2015-10-13 1 views
0

Я пытаюсь зарегистрировать фабрику сеансов Hibernate из единицы сохранения в приложениях, развернутых в WildFly 8.2.1, и я столкнулся с предупреждением об исключении из Код Hibernate 4 (см. Ниже). И когда я смотрю на JNDI в консоли WildFly, сеансовые заводы, безусловно, не зарегистрированы. Я хотел бы, чтобы они находились в области «java: app», чтобы избежать коллизий имен, когда больше одного приложения может иметь одно и то же имя фабрики сеансов.Невозможно связать фабрику сеансов Hibernate с java: приложение в WildFly 8.2.1

Регистрация менеджера объектов в этой области действия прекрасна.

Если я оставил префикс «java: app» от имени фабрики сеанса, он просто привязывается к JNDI, но в глобальной области. Я понимаю, что могу навязывать какое-то расстояние между именами, но я надеялся, что мне это не понадобится.

Любой вход будет оценен по достоинству. Спасибо.

Подробности ниже ...

Живучесть Блок

<persistence-unit name="myPU" transaction-type="JTA"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <jta-data-source>java:/jdbc/MyDS</jta-data-source> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
    <mapping-file>MySchema.hbm.xml</mapping-file> 
    <properties> 
     <property name="jboss.entity.manager.jndi.name" value="java:app/em/MY_EM" /> 
     <property name="hibernate.session_factory_name" value="java:app/sessions/my_FACTORY"/> 
     <property name="hibernate.query.imports" value="com.my.model" /> 
     <property name="hibernate.current_session_context_class" value="thread" /> 
     <property name="hibernate.use_outer_join" value="true" /> 
     <property name="hibernate.jdbc.use_streams_for_binary" value="true" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" /> 
    </properties> 
</persistence-unit> 

Исключение сниппет

16: 14: 50044 WARN [org.hibernate.internal.SessionFactoryRegistry] (Пул потоков ServerService - 64) - HHH000277: Не удалось связать фабрику с JNDI: org.hibernate.engine.jndi.JndiException: Err или создание промежуточного контекста [Java: приложение]

Вызванный: javax.naming.NameNotFoundException: Java: приложение

Полное исключение Предупреждение от Hibernate

16: 14: 50044 WARN [org.hibernate.internal.SessionFactoryRegistry] (пул потоков ServerService - 64) - HHH000277: Не удалось связать фабрику с JNDI: org.hibernate.engine.jndi.JndiException: Ошибка создания промежуточного контекста [java: app] at org. hibernate.engine.jndi.internal.JndiServiceImp l.bind (JndiServiceImpl.java:205) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] at org.hibernate.engine.jndi.internal.JndiServiceImpl.bind (JndiServiceImpl.java:159) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] at org.hibernate.internal.SessionFactoryRegistry.addSessionFactory (SessionFactoryRegistry.java:103) [hibernate-core-4.3.7.Final.jar : 4.3.7.Final] at org.hibernate.internal.SessionFactoryImpl. (SessionFactoryImpl.java:497) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] at org.hibernate.cfg .Configuration.buildSessionFactory (Configuration.java:1859) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform (EntityManagerFactoryBuilderImpl.java : 852) [hibernate-entitymanager-4.3.7.Final.jar: 4.3.7.Финал] на org.hibernate.jpa.boot .internal.EntityManagerFactoryBuilderImpl $ 4.perform (EntityManagerFactoryBuilderImpl.java:845) [hibernate-entitymanager-4.3.7.Final.jar: 4.3.7.Final] at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl (ClassLoaderServiceImpl.java:398) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl.java:844) [hibernate -entitymanager-4.3.7.Final.jar: 4.3.7.Final] на org.jboss.as.jpa.hibernate4.TwoPhaseBootstrapImpl.build (TwoPhaseBootstrapImpl.java:44) [jipijapa-hibernate4-3-1.0.1.Final.jar:] at org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run (PersistenceUnitServiceImpl.java:154) [wildfly-jpa-8.2.1.Final.jar: 8.2.1.Final] at org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run (PersistenceUnitServiceImpl.java:117) [wildfly-jpa-8.2.1.Final.jar: 8.2.1.Final] at java.security.AccessController.doPrivileged (Native Method) [rt.jar: 1.8.0_51] at org.wildfly.security.manager.WildFlySecurityManager.doChecked (WildFlySecurityManager.java:474) [wildfly-security-manager-1.0.0.Final.jar: 1.0. 0.Final] at org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1.run (PersistenceUnitServiceImpl.java:182) [wildfly-jpa-8.2.1.Final.jar: 8.2.1.Final] в java. util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) [rt.jar: 1.8.0_51] at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) [rt.jar: 1.8.0_51] at java.lang.Thread.run (Thread.java:745) [rt.jar: 1.8.0_51] на org.jboss.threads.JBossThread.run (JBossThread.java:122) Вызванный: javax.naming.NameNotFoundException: Java: приложение на org.jboss.as.naming.InitialContext $ DefaultInitialContext.findContext (InitialContext.java:187) [wildfly-naming-8.2.1.Final.jar: 8.2.1.Final] at org.jboss.as.naming.InitialContext $ DefaultInitialContext.createSubcontext (InitialContext.java:294) [wildfly -naming-8.2.1.Final.jar: 8.2.1.Final] at org.jboss.as.naming.NamingContext.createSubcontext (NamingContext.java:398) [wildfly-naming-8.2.1.Final.jar: 8.2.1.Финал] в javax.naming.InitialContext.createSubcontext (InitialContext.java:4 89) [rt.jar: 1.8.0_51] at javax.naming.InitialContext.createSubcontext (InitialContext.java:489) [rt.jar: 1.8.0_51] at org.hibernate.engine.jndi.internal.JndiServiceImpl. связывания (JndiServiceImpl.java:202) [гибернации-ядро-4.3.7.Final.jar: 4.3.7.Final] ... 18 более

ответ

0

я, возможно, нашли ответ ...

Хотя это не совсем тот ответ, который я хотел. Но это имеет смысл. Причина, по которой JBDI-связывающие роботы Hibernate не могут найти подконтекст java:app, состоит в том, что, я думаю, он пытается найти это имя в корне, и он там не существует. JBoss/WildFly с другой стороны, похоже, имеют неявный контекст при развертывании приложения и фактически как java:app, существующий под applications/<module-name> внутри дерева JNDI. Hibernate ничего не знает об этой структуре.

Я изменил мою реализацию в организации этих сессий фабричные привязок от имени приложения в корне дерева JNDI, как это:

hib > myApp > sessions > MY_SESSION_FACTORY 

Я надеюсь, что это помогает кто-то еще.