Tomcat和Hibernate的JNDI会话工厂错误



我正在使用Spring MVC、Hibernate、JBoss Tools和JSF构建一个web应用程序框架。我已经通过使用JBoss Tools成功地生成了域类和DAO类,然而,当我试图构建任何DAO对象时(目前我正在构建服务,但最终服务将被注入控制器),我收到了JNDI错误。我使用Tomcat7作为as。如果能为这个问题提供一个简单的解决方案,我将不胜感激。

控制器代码:

AuthorHome ah = new AuthorHome();
Author a = ah.findById(1);

DAO/服务代码:

public class AuthorHome {
private static final Log log = LogFactory.getLog(AuthorHome.class);
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");
    }
}
}

堆栈跟踪:

javax.naming.NameNotFoundException:未在此上下文中绑定Name SessionFactory网址:org.apache.naming.NamingContext.ulookup(NamingContext.java:803)网址:org.apache.naming.NamingContext.ulookup(NamingContext.java:159)网址:org.apache.namening.SelectorContext.ulookup(SelectorContext.java:158)位于javax.nameming.InitialContext.ulookup(未知源)网址:com.webapplication.service.AuthorHome.getSessionFactory(AuthorHome.java:31)网址:com.webapplication.service.AuthorHome.(AuthorHome.java:26)

您需要在Spring中配置Hibernate会话工厂。看见http://static.springsource.org/spring/docs/current/spring-framework-reference/html/orm.html#orm-会话工厂设置。还要注意,在Spring中直接使用Hibernate需要一个事务上下文。一个简单的方法是使用@Transactional注释。此处提供详细信息:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/transaction.html#transaction-声明性注释。

最新更新