org.apache.naming.factory
public class: MailSessionFactory [javadoc |
source]
java.lang.Object
org.apache.naming.factory.MailSessionFactory
All Implemented Interfaces:
ObjectFactory
Factory class that creates a JNDI named JavaMail Session factory,
which can be used for managing inbound and outbound electronic mail
messages via JavaMail APIs. All messaging environment properties
described in the JavaMail Specification may be passed to the Session
factory; however the following properties are the most commonly used:
-
- mail.smtp.host - Hostname for outbound transport
connections. Defaults to
localhost if not specified.
This factory can be configured in a <DefaultContext>
or <Context> element in your conf/server.xml
configuration file. An example of factory configuration is:
<Resource name="mail/smtp" auth="CONTAINER"
type="javax.mail.Session"/>
<ResourceParams name="mail/smtp">
<parameter>
<name>factory</name>
<value>org.apache.naming.factory.MailSessionFactory</value>
</parameter>
<parameter>
<name>mail.smtp.host</name>
<value>mail.mycompany.com</value>
</parameter>
</ResourceParams>
- author:
Craig - R. McClanahan
- version:
$ - Revision: 467222 $ $Date: 2006-10-24 05:17:11 +0200 (mar., 24 oct. 2006) $
| Field Summary |
|---|
| protected static final String | factoryType | The Java type for which this factory knows how to create objects. |
| Method from org.apache.naming.factory.MailSessionFactory Detail: |
public Object getObjectInstance(Object refObj,
Name name,
Context context,
Hashtable env) throws Exception {
// Return null if we cannot create an object of the requested type
final Reference ref = (Reference) refObj;
if (!ref.getClassName().equals(factoryType))
return (null);
// Create a new Session inside a doPrivileged block, so that JavaMail
// can read its default properties without throwing Security
// exceptions.
//
// Bugzilla 31288, 33077: add support for authentication.
return AccessController.doPrivileged( new PrivilegedAction() {
public Object run() {
// Create the JavaMail properties we will use
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "localhost");
String password = null;
Enumeration attrs = ref.getAll();
while (attrs.hasMoreElements()) {
RefAddr attr = (RefAddr) attrs.nextElement();
if ("factory".equals(attr.getType())) {
continue;
}
if ("password".equals(attr.getType())) {
password = (String) attr.getContent();
continue;
}
props.put(attr.getType(), (String) attr.getContent());
}
Authenticator auth = null;
if (password != null) {
String user = props.getProperty("mail.smtp.user");
if(user == null) {
user = props.getProperty("mail.user");
}
if(user != null) {
final PasswordAuthentication pa = new PasswordAuthentication(user, password);
auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return pa;
}
};
}
}
// Create and return the new Session object
Session session = Session.getInstance(props, auth);
return (session);
}
} );
}
Create and return an object instance based on the specified
characteristics. |