2010-03-19 3 views
3

세션 공장 입수해야한다 방법이 : Tomcat6는 자바 코드에서 간단한 JNDI 조회를 통해 SessionFactory를 을 얻을 수있을 때까지Hibernate SessionFactory : Tomcat에서 JNDI를 구성하는 방법은 무엇입니까?

 
    protected SessionFactory getSessionFactory() { 
     try { 
      return (SessionFactory) new InitialContext() 
        .lookup("SessionFactory"); 
     } catch (Exception e) { 
     } 
    } 

간단한 솔루션을 제공하십시오. Tomcat 측의 어떤 파일에 무엇을 써야합니까?

답변

0

톰캣 문서 says는 : Hibernate가 여러 세션 팩토리를 관리하기 위해 읽기 - 쓰기를 요구하면서

Tomcat은 읽기 전용 InitialContext을 제공합니다. Tomcat은 비 관리 컨테이너에 대한 사양을 분명히 따라가는 입니다. 세션 팩토리를 JNDI 객체에 바인드하려면 관리 서버 (Glassfish, JBoss 등)로 이동하거나 게시 된 해결 방법으로 인터넷에서 을 검색해야합니다. 최대 절전 모드의 문서에서

권장 사항은 JNDI에 바인딩을 시도하지 톰캣 작업을 할 때 단지 hibernate.session_factory_name 특성에서 을 떠날 것입니다.

그리고 최대 절전 모드 문서 the same 말한다 :

그것은 JDNI 네임 스페이스로 SessionFactory를 결합하는 것은 매우 유용합니다. 대부분 경우 구성에서 hibernate.session_factory_name 속성을 사용할 수 있습니다. 그러나 Tomcat에서는 hibernate.session_factory_name 속성을 사용할 수 없습니다. Tomcat이 읽기 전용 JNDI 구현을 제공하기 때문입니다. JNDI 바인딩 SessionFactory을 Tomcat과 함께 사용하려면 SessionFactory에 대한 사용자 정의 자원 팩토리 클래스를 작성하고 Tomcat 구성을 설정해야합니다.

package myutil.hibernate; 

import java.util.Hashtable; 
import java.util.Enumeration; 
import javax.naming.Name; 
import javax.naming.Context; 
import javax.naming.NamingException; 
import javax.naming.Reference; 
import javax.naming.RefAddr; 
import javax.naming.spi.ObjectFactory 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class HibernateSessionFactoryTomcatFactory implements ObjectFactory{ 
    public Object getObjectInstance(Object obj, Name name, Context cntx, Hashtable env) 
       throws NamingException{ 

     SessionFactory sessionFactory = null; 
     RefAddr addr = null; 

     try{ 
     Enumeration addrs = ((Reference)(obj)).getAll(); 

     while(addrs.hasMoreElements()){ 
      addr = (RefAddr) addrs.nextElement(); 
      if("configuration".equals((String)(addr.getType()))){ 
       sessionFactory = (new Configuration()) 
        .configure((String)addr.getContent()).buildSessionFactory(); 
      } 
     } 
     }catch(Exception ex){ 
     throw new javax.naming.NamingException(ex.getMessage()); 
     } 

     return sessionFactory; 
    } 
} 
:

그래서 사용자 정의 같은 SessionFactory을해야

관련 문제