톰캣 문서 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
을해야