E.1 The com.mediamania.appserver package

This package includes classes that are described in Chapter 16 and Chapter 17 for using JDO in an application server environment.

E.1.1 com.mediamania.appserver.CashierBean

 1    package com.mediamania.appserver;
 2    
 3    import javax.ejb.*;
 4    
 5    import javax.naming.InitialContext;
 6    import javax.naming.Context;
 7    import javax.naming.NamingException;
 8    
 9    import java.util.Iterator;
10    import java.util.Date;
11    
12    import com.mediamania.store.StoreQueries;
13    import com.mediamania.store.Customer;
14    import com.mediamania.store.Purchase;
15    import com.mediamania.store.Rental;
16    import com.mediamania.store.RentalItem;
17    import com.mediamania.store.MediaItem;
18    
19    import javax.jdo.PersistenceManager;
20    import javax.jdo.PersistenceManagerFactory;
21    
22    public class CashierBean implements javax.ejb.SessionBean {
23        private javax.ejb.SessionContext context;
24        private PersistenceManagerFactory pmf;
25        private PersistenceManager pm;
26        private String pmfName = "java:comp/env/jdo/MediaManiaPMF";
27    
28        /**
29         * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
30         */
31        public void setSessionContext(javax.ejb.SessionContext aContext) {
32            context = aContext;
33            try {
34                Context ic = new InitialContext(  );
35                pmf = (PersistenceManagerFactory)ic.lookup(pmfName);
36            } catch (NamingException ex) {
37                throw new EJBException("setSessionContext", ex);
38            }
39        }
40        
41        public void ejbActivate(  ) {
42        }
43        public void ejbPassivate(  ) {
44        }
45        public void ejbRemove(  ) {
46        }
47        public void ejbCreate(  ) {
48        }
49        
50        public void checkout(
51            final java.lang.String lastName, 
52            final java.lang.String firstName, 
53            final java.util.Collection rentals, 
54            final java.util.Collection purchases) 
55                throws java.rmi.RemoteException {
56            PersistenceManager pm = pmf.getPersistenceManager(  );
57            Customer customer = StoreQueries.getCustomer(pm, firstName, lastName);
58            Iterator it = rentals.iterator(  );
59            while (it.hasNext(  )) {
60                RentalValueObject rvo = (RentalValueObject)it.next(  );
61                RentalItem ri = StoreQueries.getRentalItem
62                    (pm, rvo.serialNumber);
63                Rental rental = new Rental(customer, new Date(  ), ri);
64                customer.addTransaction(rental);
65                customer.addRental(rental);
66            }
67            it = purchases.iterator(  );
68            while (it.hasNext(  )) {
69                PurchaseValueObject pvo = (PurchaseValueObject)it.next(  );
70                MediaItem mediaItem = StoreQueries.getMediaItem(
71                    pm, pvo.title, pvo.format);
72                Purchase purchase = new Purchase(customer, new Date(  ), mediaItem);
73                customer.addTransaction(purchase);
74            }
75            pm.close(  );
76        }
77    }

E.1.2 com.mediamania.appserver.JDOPlugIn

 1    package com.mediamania.appserver;
 2    
 3    import javax.servlet.*;
 4    import javax.servlet.http.*;
 5    
 6    import javax.jdo.PersistenceManagerFactory;
 7    import javax.jdo.PersistenceManager;
 8    import javax.jdo.JDOHelper;
 9    import javax.jdo.Extent;
10    
11    import java.util.Properties;
12    import java.util.Iterator;
13    
14    import java.io.InputStream;
15    import java.io.IOException;
16    
17    import javax.naming.Context;
18    import javax.naming.InitialContext;
19    import javax.naming.NamingException;
20    
21    import org.apache.struts.action.ActionServlet;
22    import org.apache.struts.action.PlugIn;
23    import org.apache.struts.config.ModuleConfig;
24    
25    public class JDOPlugIn implements PlugIn {
26        private ServletContext ctx;
27        private String name;
28        private String path;
29        private String jndiName;
30        public JDOPlugIn(  ) {
31        }
32        
33        public void setName(String name) {
34            this.name = name;
35        }
36        
37        public void setPath(String path) {
38            this.path = path;
39        }
40        
41        public void setJndiName(String jndiName) {
42            this.jndiName = jndiName;
43        }
44        
45        public void init(ActionServlet servlet, ModuleConfig config) 
46                throws ServletException {
47            ctx = servlet.getServletContext(  );
48            if (name == null || name.length(  ) == 0) {
49                throw new ServletException
50                    ("You must specify name.");
51            }
52            try {
53                PersistenceManagerFactory pmf;
54                if (path != null) {
55                    pmf = getPersistenceManagerFactoryFromPath(path);
56                } else if (jndiName != null) {
57                    pmf = getPersistenceManagerFactoryFromJndi(jndiName);
58                } else {
59                    throw new ServletException
60                        ("You must specify either path or jndiName.");
61                }
62                ctx.setAttribute(name, pmf);
63            } catch (Exception ex) {
64                throw new ServletException(
65                    "Unable to load PMF: name:" + name +
66                    ", path: " + path + 
67                    ", jndiName: " + jndiName,
68                    ex);
69            }
70        }
71        
72        private PersistenceManagerFactory 
73                getPersistenceManagerFactoryFromPath(String path) 
74                    throws IOException {
75            Properties props = new Properties(  );
76            InputStream in = ctx.getResourceAsStream(path);
77            props.load(in);
78            return JDOHelper.getPersistenceManagerFactory(props);
79        }
80        
81        private PersistenceManagerFactory 
82                getPersistenceManagerFactoryFromJndi(String jndiName) 
83                    throws NamingException {
84                Context ic = new InitialContext(  );
85                return (PersistenceManagerFactory) ic.lookup(jndiName);
86        }
87        
88        public void destroy(  ) {}
89    }

E.1.3 com.mediamania.appserver.LookupMovieAction

 1    package com.mediamania.appserver;
 2    
 3    import javax.servlet.ServletContext;
 4    import javax.servlet.http.HttpServletRequest;
 5    import javax.servlet.http.HttpServletResponse;
 6    import org.apache.struts.action.Action;
 7    import org.apache.struts.action.ActionForm;
 8    import org.apache.struts.action.ActionForward;
 9    import org.apache.struts.action.ActionMapping;
10    
11    import javax.jdo.PersistenceManagerFactory;
12    import javax.jdo.PersistenceManager;
13    import javax.jdo.JDOHelper;
14    import javax.jdo.Extent;
15    import javax.jdo.Transaction;
16    import javax.jdo.Query;
17    import javax.jdo.JDOException;
18    
19    import java.util.Collection;
20    import java.util.Iterator;
21    import com.mediamania.content.Movie;
22    
23    public class LookupMovieAction extends Action {
24        PersistenceManagerFactory pmf = null;
25        PersistenceManager pm = null;
26        public ActionForward execute(ActionMapping mapping,
27            ActionForm form,
28            HttpServletRequest request,
29            HttpServletResponse response)
30            throws Exception {
31            try {
32                ServletContext ctx = getServlet().getServletContext(  );
33                pmf = (PersistenceManagerFactory)ctx.getAttribute("jdo.Movies");
34                pm = pmf.getPersistenceManager(  );
35                Query q = pm.newQuery(Movie.class, "title == param1");
36                q.declareParameters ("String param1");
37                String movieName = request.getParameter("movieName");
38                Collection movies = (Collection)q.execute(movieName);
39                Movie movie = (Movie)movies.iterator().next(  );
40                String description = movie.getDescription(  );
41                ctx.setAttribute("movieDescription", description);
42            } catch (JDOException e) {
43            } finally {
44                if (pm != null) {
45                    pm.close(  );
46                }
47                pm = null;
48            }
49            return (mapping.findForward("success"));
50        }
51    }

E.1.4 com.mediamania.appserver.MediaValueObject

 1    package com.mediamania.appserver;
 2    
 3    import java.io.Serializable;
 4    
 5    public class MediaValueObject implements Serializable {
 6        public String title;
 7    }

E.1.5 com.mediamania.appserver.MovieInfo

 1    package com.mediamania.appserver;
 2    
 3    import javax.servlet.*;
 4    import javax.servlet.http.*;
 5    
 6    import javax.jdo.PersistenceManagerFactory;
 7    import javax.jdo.PersistenceManager;
 8    import javax.jdo.JDOHelper;
 9    import javax.jdo.Extent;
10    import javax.jdo.JDOException;
11    
12    import java.util.Properties;
13    import java.util.Iterator;
14    
15    import java.io.InputStream;
16    import java.io.IOException;
17    
18    import javax.naming.Context;
19    import javax.naming.InitialContext;
20    import javax.naming.NamingException;
21    
22    import com.mediamania.content.Movie;
23    
24    public class MovieInfo extends HttpServlet {
25        PersistenceManagerFactory persistenceManagerFactory;
26        PersistenceManager pm;
27        public void init(  ) throws ServletException {
28            try {
29                ServletContext ctx = getServletContext(  );
30                InputStream in = ctx.getResourceAsStream("WEB-INF/pmf.properties");
31                Properties props = new Properties(  );
32                props.load(in);
33                persistenceManagerFactory = 
34                    JDOHelper.getPersistenceManagerFactory(props);
35            } catch (IOException ex) {
36                throw new ServletException("Unable to load PMF properties.", ex);
37            } catch (JDOException ex) {
38                throw new ServletException("Unable to create PMF resource.", ex);
39            } catch (Exception ex) {
40                throw new ServletException("Unable to initialize.", ex);
41            }
42            
43        }
44                
45        /**
46           Destroys the servlet.
47         */
48        public void destroy(  ) {
49        }
50        
51        /** Processes requests for both HTTP <code>GET</code>
52         * and <code>POST</code> methods.
53         * @param request servlet request
54         * @param response servlet response
55         */
56        protected void processRequest(HttpServletRequest request, 
57            HttpServletResponse response)
58                throws ServletException, java.io.IOException {
59            pm = persistenceManagerFactory.getPersistenceManager(  );
60            response.setContentType("text/html");
61            java.io.PrintWriter out = response.getWriter(  );
62            out.println("<html>");
63            out.println("<head>");
64            out.println("<title>Servlet</title>");
65            out.println("</head>");
66            out.println("<body>");
67            out.print(formatMovieInfo(  ));
68            out.println("</body>");
69            out.println("</html>");
70            out.close(  );
71            pm.close(  );
72        }
73        
74        protected String formatMovieInfo(  ) {
75            StringBuffer result = new StringBuffer(  );
76            Extent movies = pm.getExtent(Movie.class, true);
77            Iterator it = movies.iterator(  );
78            while (it.hasNext(  )) {
79                result.append("<P>");
80                Movie movie = (Movie)it.next(  );
81                result.append(movie.getDescription(  ));
82            }
83            return result.toString(  );
84        }
85        /** Handles the HTTP <code>GET</code> method.
86         * @param request servlet request
87         * @param response servlet response
88         */
89        protected void doGet(HttpServletRequest request,
90            HttpServletResponse response)
91                throws ServletException, java.io.IOException {
92            processRequest(request, response);
93        }
94        
95        /** Handles the HTTP <code>POST</code> method.
96         * @param request servlet request
97         * @param response servlet response
98         */
99        protected void doPost(HttpServletRequest request, 
100            HttpServletResponse response)
101                throws ServletException, java.io.IOException {
102            processRequest(request, response);
103        }
104        
105        /** Returns a short description of the servlet.
106         */
107        public String getServletInfo(  ) {
108            return "Movie Information";
109        }
110        
111    }

E.1.6 com.mediamania.appserver.PurchaseValueObject

 1    package com.mediamania.appserver;
 2    
 3    public class PurchaseValueObject extends MediaValueObject {
 4        public String format;
 5    }

E.1.7 com.mediamania.appserver.RentalValueObject

 1    package com.mediamania.appserver;
 2    
 3    public class RentalValueObject extends MediaValueObject {
 4         public String serialNumber;
 5    }