FileDocCategorySizeDatePackage
MailSessionFactory.javaAPI DocApache Tomcat 6.0.146214Fri Jul 20 04:20:32 BST 2007org.apache.naming.factory

MailSessionFactory

public class MailSessionFactory extends Object implements 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) $

Fields Summary
protected static final String
factoryType
The Java type for which this factory knows how to create objects.
Constructors Summary
Methods Summary
public java.lang.ObjectgetObjectInstance(java.lang.Object refObj, javax.naming.Name name, javax.naming.Context context, java.util.Hashtable env)
Create and return an object instance based on the specified characteristics.

param
refObj Reference information containing our parameters, or null if there are no parameters
param
name The name of this object, relative to context, or null if there is no name
param
context The context to which name is relative, or null if name is relative to the default initial context
param
env Environment variables, or null if there are none
exception
Exception if an error occurs during object creation



                                                                                             
           
				        
    

        // 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);

		}
	    } );