J2SE
看下面的类: HibernateSessionFactory.java package zy.pro.wd.util; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import net.sf.hibernate.cfg.Configuration; /** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html}. */ public class HibernateSessionFactory { /** * Location of hibernate.cfg.xml file. * NOTICE: Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. That * is place the config file in a Java package - the default location * is the default Java package. * Examples: * CONFIG_FILE_LOCATION = "/hibernate.conf.xml". * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml". */ private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; /** Holds a single instance of Session */ private static final ThreadLocal threadLocal = new ThreadLocal(); /** The single instance of hibernate configuration */ private static final Configuration cfg = new Configuration(); /** The single instance of hibernate SessionFactory */ private static net.sf.hibernate.SessionFactory sessionFactory; /** * Returns the ThreadLocal Session instance. Lazy initialize * the SessionFactory if needed. * * @return Session * @throws HibernateException */ public static Session currentSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null) { if (sessionFactory == null) { try { cfg.configure(CONFIG_FILE_LOCATION); sessionFactory = cfg.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } session = sessionFactory.openSession(); threadLocal.set(session); } return session; } /** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * Default constructor. */ private HibernateSessionFactory() { } } 在这个类中,用到了私有构造函数,如粗体部分. 我的调用类: package zy.pro.td.plugin; /* * Created on Oct 4, 2004 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import javax.naming.Context; import javax.naming.InitialContext; import zy.pro.td.util.HibernateSessionFactory; /** * @author sunil * * This class will initialize hibernate and bind SessionFactory in JNDI at the * time of application and startup and unbind it from JNDI at the time of application * shutdown */ public class HibernatePlugin implements PlugIn { private static final String jndi_hibernate = "jndi_hibernate_factory"; private HibernateSessionFactory hsf; private String name; public HibernatePlugin() { hsf=new HibernateSessionFactory(); } // This method will be called at the time of application shutdown public void destroy() { System.out.println("Entering HibernatePlugIn.destroy()"); //Put hibernate cleanup code here System.out.println("Exiting HibernatePlugIn.destroy()"); } //This method will be called at the time of application startup public void init(ActionServlet actionServlet, ModuleConfig config) throws ServletException { System.out.println("Entering HibernatePlugIn.init()"); System.out.println("Value of init parameter " + getName()); //Uncomment next two lines if you want to throw UnavailableException from your servlet // if(true) // throw new ServletException("Error configuring HibernatePlugIn"); System.out.println("Exiting HibernatePlugIn.init()"); } private void bindFactoryToJNDI() { try { Context ctx = new InitialContext(); } catch (Exception e) { e.printStackTrace(); } } public String getName() { return name; } public void setName(String string) { name = string; } } 在调用类中,我创建了一个HibernateSessionFactory的对象,但是在初始化时,却出了问题.总提示说: HibernateSessionFactory() has private access in zy.pro.td.util.HibernateSessionFactory at line 35(35:9) 然后,我就将HibernateSessionFactory的构造函数由private改成了public,调试通过. 构造函数为私有,就不能创建该类的对象. |