我正在使用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-声明性注释。