FileDocCategorySizeDatePackage
JDOPlugIn.javaAPI DocExample2729Sun Mar 02 09:24:26 GMT 2003com.mediamania.appserver

JDOPlugIn.java

package com.mediamania.appserver;

import javax.servlet.*;
import javax.servlet.http.*;

import javax.jdo.PersistenceManagerFactory;
import javax.jdo.PersistenceManager;
import javax.jdo.JDOHelper;
import javax.jdo.Extent;

import java.util.Properties;
import java.util.Iterator;

import java.io.InputStream;
import java.io.IOException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

public class JDOPlugIn implements PlugIn {
    private ServletContext ctx;
    private String name;
    private String path;
    private String jndiName;
    public JDOPlugIn() {
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setPath(String path) {
        this.path = path;
    }
    
    public void setJndiName(String jndiName) {
        this.jndiName = jndiName;
    }
    
    public void init(ActionServlet servlet, ModuleConfig config) 
            throws ServletException {
        ctx = servlet.getServletContext();
        if (name == null || name.length() == 0) {
            throw new ServletException
                ("You must specify name.");
        }
        try {
            PersistenceManagerFactory pmf;
            if (path != null) {
                pmf = getPersistenceManagerFactoryFromPath(path);
            } else if (jndiName != null) {
                pmf = getPersistenceManagerFactoryFromJndi(jndiName);
            } else {
                throw new ServletException
                    ("You must specify either path or jndiName.");
            }
            ctx.setAttribute(name, pmf);
        } catch (Exception ex) {
            throw new ServletException(
                "Unable to load PMF: name:" + name +
                ", path: " + path + 
                ", jndiName: " + jndiName,
                ex);
        }
    }
    
    private PersistenceManagerFactory 
            getPersistenceManagerFactoryFromPath(String path) 
                throws IOException {
        Properties props = new Properties();
        InputStream in = ctx.getResourceAsStream(path);
        props.load(in);
        return JDOHelper.getPersistenceManagerFactory(props);
    }
    
    private PersistenceManagerFactory 
            getPersistenceManagerFactoryFromJndi(String jndiName) 
                throws NamingException {
            Context ic = new InitialContext();
            return (PersistenceManagerFactory) ic.lookup(jndiName);
    }
    
    public void destroy() {}
}