2012-03-18 2 views
1

Я создаю структуру веб-приложений, используя Spring MVC, Hibernate, JBoss Tools и JSF. Однако мне удалось создать классы домена и классы DAO, используя JBoss Tools, однако, когда я пытаюсь построить любой объект DAO (на данный момент я строю службу, но в конечном итоге услуга будет введена в контроллер), я получить ошибку JNDI. Я использую Tomcat 7 как AS. Я был бы признателен за простое решение этой проблемы.Ошибка фабричной сессии JNDI с Tomcat и Hibernate

Controller Код:

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

DAO/Service Code:

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:803) at org.apache.naming.NamingContext.lookup (NamingContext.java:159) at org.apache.naming.SelectorContext.lookup (SelectorContext.java:158) at javax.naming.InitialContext.lookup (Неизвестный источник) at com .webapplication.service.AuthorHome.getSessionFactory (AuthorHome.java:31) на com.webapplication.service.AuthorHome. (AuthorHome.java:26)

ответ

2

Вам нужно настроить Factory Session гибернации внутри весны. См. http://static.springsource.org/spring/docs/current/spring-framework-reference/html/orm.html#orm-session-factory-setup. Также обратите внимание, что прямое использование Hibernate внутри Spring требует транзакционного контекста. Простой способ сделать это - использовать аннотацию @Transactional. Подробности здесь: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/transaction.html#transaction-declarative-annotations.

+0

Благодарим вас за ссылки. Я не решил проблему, воспользовавшись предлагаемым контентом, однако, это привело меня в правильном направлении, и я уверен, что это будет полезно в будущем. Это было что-то глупое, службы не смогли найти мой hibernate.cfg.xml, поскольку путь, на который он ссылался, был неправильным. – unknown