1

Spring MVC、Hibernate、JBoss Tools、JSFを利用してWebアプリケーションフレームワークを構築しています。JBoss Toolsを利用してドメインクラスとDAOクラスを生成することができましたが、DAOオブジェクトを作成しようとすると(現時点ではサービスを作成していますが、最終的にはサービスがコントローラーに挿入されます)、 JNDIエラーを受け取ります。ASとしてTomcat7を使用しています。この問題の簡単な解決策をいただければ幸いです。

コントローラーコード:

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:名前SessionFactoryは、org.apache.naming.NamingContext.lookup(NamingContext.java:159)のorg.apache.naming.NamingContext.lookup(NamingContext.java:803)のこのコンテキストにバインドされていません。 .apache.naming.SelectorContext.lookup(SelectorContext.java:158)at javax.naming.InitialContext.lookup(Unknown Source)at com.webapplication.service.AuthorHome.getSessionFactory(AuthorHome.java:31)at com.webapplication.service .AuthorHome。(AuthorHome.java:26)

4

1 に答える 1

2

Spring内でHibernateSessionFactoryを構成する必要があります。http://static.springsource.org/spring/docs/current/spring-framework-reference/html/orm.html#orm-session-factory-setupを参照してください。また、Spring内でHibernateを直接使用するには、トランザクションコンテキストが必要であることに注意してください。これを行う簡単な方法は、@Transactional注釈を使用することです。詳細はこちら:http ://static.springsource.org/spring/docs/current/spring-framework-reference/html/transaction.html#transaction-declarative-annotations 。

于 2012-03-18T13:24:44.307 に答える