越来越严重:无法在JNDI查找SessionFactory的同时获得的SessionFactory(

2019-09-21 22:43发布

我使用Hibernate作为持久层与数据库进行通信。 我使用Maven插件调用:hbm2java生成DAO,JAVA,*的hbm.xml和hibernate.cfg.xml。 到那时插件工作正常。

但是,当我试图传达给DB它给了以下异常。

Aug 30, 2012 1:45:46 PM org.hbm2dao.AssemblyHome getSessionFactory
SEVERE: Could not locate SessionFactory in JNDI
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:     java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at org.hbm2dao.AssemblyHome.getSessionFactory(AssemblyHome.java:29)
at org.hbm2dao.AssemblyHome.<init>(AssemblyHome.java:24)
at com.myhadoop.app.App.main(App.java:22)
java.lang.IllegalStateException: Could not locate SessionFactory in JNDI
at org.hbm2dao.AssemblyHome.getSessionFactory(AssemblyHome.java:33)
at org.hbm2dao.AssemblyHome.<init>(AssemblyHome.java:24)
at com.myhadoop.app.App.main(App.java:22)
Exception in thread "main" java.lang.NullPointerException
at com.myhadoop.app.App.main(App.java:32)

默认情况下,Hibernate3的:hbm2cfgxml产生与会话厂名为SessionFactory的hibernate.cfg.xml文件。 就像下面。

<session-factory name="SessionFactory">

插件生成下面的代码获取会话工厂。

private final SessionFactory sessionFactory = getSessionFactory();

protected SessionFactory getSessionFactory() {
    try {

        return (SessionFactory) new InitialContext().lookup("SessionFactory");
    }
    catch (Exception e) {
        log.error("Could not locate SessionFactory in JNDI", e);
        throw new IllegalStateException("Could not locate SessionFactory in JNDI");
    }
}

我发现类似的查询使用eclipse Hibernate插件的问题-在JNDI无法找到的SessionFactory 。

然而,它并不可行通过插件来从* Home.java获取会话工厂改变产生400个多班。

如何摆脱这个问题与Hibernate插件,而无需改变400+类?

我不希望使用任何Web /应用服务器,这是我独立的应用程序。

Answer 1:

使用产生getSessionFactory()方法,如果你已经设置了环境,只会工作InitialContext可以找到你hibernate.cfg.xml文件,这听起来像它不能。

您可以通过设置解决这个问题InitialContext正确和环境为每InitialContext的javadoc 。 作为替代方案,可以通过改变完全切割出JNDI getSessionFactory方法简单地创建一个Configuration ,并告诉它在映射文件(一个或多个)是。



文章来源: Getting SEVERE: Could not locate SessionFactory in JNDI while getting sessionfactory