[ Team LiB ] Previous Section Next Section

Recipe 25.6 Accessing the WebLogic JNDI Resource from a Servlet

Problem

You want to access the JNDI object created and bound on WebLogic.

Solution

Use the JNDI API in the servlet to access a reference to the bound object.

Discussion

Example 25-9 is an HttpServlet that obtains a javax.mail.Session object from WebLogic's JNDI implementation. The servlet uses this object to build an email message. The servlet initiates the JNDI lookup in its init( ) method for an object bound under the name "MyEmail" (Recipe 25.4). The servlet container calls the init( ) once when the container creates the servlet instance.

Example 25-9. Servlet to obtain a javax.mail.Session object from WebLogic's JNDI implementation and build an email message
package com.jspservletcookbook;    

import java.io.IOException;
import java.io.PrintWriter;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;  
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class EmailJndiServlet extends HttpServlet {

    private Session mailSession;

  public void init( ) throws ServletException {
        
      Context env = null;
    
      try{

          env = (Context) new InitialContext( );
          mailSession = (Session) env.lookup("MyEmail");
          if (mailSession == null)
              throw new ServletException(
                 "MyEmail is an unknown JNDI object");
                   
           //close the InitialContext
           env.close( );
             
      } catch (NamingException ne) { 
          try{ env.close( );} catch (NamingException nex) { }
          throw new ServletException(ne);
      }
  }//init

  public void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException,
          java.io.IOException {
    
      response.setContentType("text/html");
      java.io.PrintWriter out = response.getWriter( );

      out.println(
      "<html><head><title>Email message sender</title></head><body>");
     
      String to = request.getParameter("to");
      String from = request.getParameter("from");
      String subject = request.getParameter("subject");
      String emailContent = request.getParameter("emailContent");
      try{
          sendMessage(to,from,subject,emailContent);
       } catch(Exception exc){
          throw new ServletException(exc.getMessage( ));
       }
    
    
        out.println(
        "<h2>The message was sent successfully</h2></body></html>");
    
       out.println("</body></html>");

  } //doPost
     
  public void doGet(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException,
        java.io.IOException {
        
      //doGet( ) calls doPost( )  
      doPost(request,response);
          
  }
     
  private void sendMessage(String to, String from, String subject, 
    String bodyContent) throws Exception {
    
      Message mailMsg = null;
       
      mailMsg = new MimeMessage(mailSession);//a new email message
      InternetAddress[] addresses = null;
    
      try {
          if (to != null) {
        
              //throws 'AddressException' if the 'to' email address
              //violates RFC822 syntax
              addresses = InternetAddress.parse(to, false);
              mailMsg.setRecipients(Message.RecipientType.TO, addresses);
        
          } else {
              throw new MessagingException(
                "The mail message requires a 'To' address.");
          }

          if (from != null)
              mailMsg.setFrom(from);

          if (subject != null)
              mailMsg.setSubject(subject);

          if (bodyContent != null)
              mailMsg.setText(bodyContent);
        
          //Finally, send the mail message; throws a 'SendFailedException' 
          //if any of the message's recipients have an invalid adress
          Transport.send(mailMsg);
        
          } catch (Exception exc) {
              throw exc;

    }//sendMessage
}//EmailJndiServlet

The doPost( ) method calls the servlet's sendMessage( ) method, passing in the email message parts such as the recipient and the email's content. The servlet derives this information from request parameters that the user submits. A typical request for the servlet looks like:

http://localhost:7001/email?to=author@jspservletcookbook.com&
  from=bwperry@parkerriver.com&subject=hello&
  emailContent=A web message

A user can also POST information to the servlet with an HTML form.

The servlet's sendMessage( ) method uses the JNDI object in the javax.mail.internet.MimeMessage constructor when the method creates a new email message.

Figure 25-6 shows the servlet's simple return message in a browser window.

Figure 25-6. The servlet sends the email successfully
figs/jsjc_2506.gif

See Also

Recipe 25.4 on configuring a JNDI object on WebLogic; Recipe 25.5 on viewing the WebLogic JNDI tree with the Administration console; Recipe 25.7 on accessing a JNDI object with a JSP on WebLogic; Chapter 2 on deploying web components with WebLogic.

    [ Team LiB ] Previous Section Next Section