8.5. JavaMail-Based JNDI References in EJB Deployment DescriptorsIn previous chapters we've used the ejb-jar.xml and jboss.xml file to describe and deploy EJBs and JNDI resources. Here are the new JavaMail -based JNDI references in ejb-jar.xml that enable the CreditCheckProcessor MDB to use a JavaMail Session, as in Example 8-5. Example 8-5. ejb-jar.xml<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns=http://java.sun.com/xml/ns/j2ee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1"> <enterprise-beans> ... <message-driven> <display-name>CreditCheckProcessorMDB</display-name> <ejb-name>CreditCheckProcessor</ejb-name> ... <resource-ref> <res-ref-name>mail/JawJavaMailSession</res-ref-name> <res-type>javax.mail.Session</res-type> <res-auth>Container</res-auth> </resource-ref> ... </message-driven> ... </ejb-jar> The <resource-ref> elements specify the JNDI resources available to the CreditCheckProcessorMDB (or any POJO that it calls). <res-ref-name> is the JNDI name for the resourcejava:comp/env/mail/JawJavaMailSession. Notice that you don't have to specify java:comp/env/because it is the assumed prefix. The <res-type> for the mail/JawJavaMailSession is a JavaMail Session, and javax.jms.Session is its fully qualified class name. We want JBoss to manage our JavaMail resources, so we set <res-auth> to Container. A JNDI resource is linked into an application only if we ask for it. JBoss binds resources under its in-JVM context, java:/. The jboss.xml file provides a mapping from the J2EE-style ENC names and the local JBoss-specific JNDI names that JBoss uses to deploy a JavaMail Session. Example 8-6 shows the JavaMail-related JNDI references for the CreditCheckProcessor MDB in jboss.xml. Example 8-6. jboss.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd"> <jboss> <enterprise-beans> ... <message-driven> <ejb-name>CreditCheckProcessor</ejb-name> <destination-jndi-name>queue/CreditCheckQueue</destination-jndi-name> <resource-ref> <res-ref-name>mail/JawJavaMailSession</res-ref-name> <jndi-name>java:/Mail</jndi-name> </resource-ref> </message-driven> ... </enterprise-beans> ... </jboss> As you'll see in the "Deploying JavaMail on JBoss" section, the java:/Mail name is the local JNDI name that JBoss uses to deploy its JavaMail Session. |