2015-04-22 2 views
0

Я перейдя из JBoss в Weblogic 12C, весь проект работал хорошо на JBoss, но при попытке перейти на Weblogic i имеют эту ошибку. Таким образом, некоторые контекст:Weblogic с Hibernate, получающим javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Не удалось открыть соединение

Моя база данных: Oracle XE Application Server: WebLogic 12С

В сценарии запуска startWebLogic.cmd я добавил:

set PRE_CLASSPATH=%MW_HOME%\oracle_common\modules\javax.persistence_2.1.jar;%MW_HOME%\wlserver\modules\com.oracle.weblogic.jpa21support_1.0.0.0_2-1.jar 

На Weblogic консоли в Сервисы -> Источники данных i создал источник данных

Имя: OracleDS

JNDI Имя: u_interface

URL: JDBC: оракул: тонкий: @localhost: 1521: х

Класс драйвера: oracle.jdbc.xa. client.OracleXADataSource

Я могу видеть на JNDI именах, что u_interface есть.

Я смог проверить подключение к базе данных на Weblogic.

Теперь мое приложение:

pom.xml

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>3.6.0.Final</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <type>jar</type> 
    <scope>provided</scope> 
</dependency> 

persistence.xml

<persistence-unit 
name="OracleDS" 
transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>u_interface</jta-data-source> 
    <properties> 
     <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
      <!-- property name="hibernate.hbm2ddl.auto" value="validate"/--> 
      <!--property name="hibernate.show_sql" value="true" /--> 
      <property name="hibernate.default_batch_fetch_size" value="8"/> 
      <property name="hibernate.max_fetch_depth" value="3"/> 
    </properties> 

EJB-где у меня есть менеджер сущности:

@Stateful(mappedName="/ModuleDao") 
    public class ModuleDao implements ModuleDaoRemote { 

    @PersistenceContext(unitName = "OracleDS", type = PersistenceContextType.TRANSACTION) 
    private EntityManager em; 

Метод getModuleByName, который вы можете видеть на трассе стека.

@SuppressWarnings("unchecked") 
    public Module getModuleByName(String name) { 
     List<Module> local = null; 
     CriteriaBuilder cb = getEntityManager().getCriteriaBuilder(); 
     CriteriaQuery<Module> cq = cb.createQuery(Module.class); 
     Root<Module> root = cq.from(Module.class); 

     Predicate cond1 = cb.equal(root.get(Module_.name), name); 
     cq.where(cb.and(cond1)); 

     Query query = getEntityManager().createQuery(cq); 
     local = query.getResultList(); 
     if(local != null && !local.isEmpty()) { 
      return local.get(0);   
     } else { 
      return null; 
     } 
    } 

Я получаю ошибку на линии

local = query.getResultList(); 

Интерфейс:

@Remote 
public interface ModuleDaoRemote 

Таким образом, в другом классе я впрыснуть EJB успешно, но когда я называю метод

getModuleByName("Some string")

Я получаю сообщение об ошибке:

Apr 22, 2015 3:58:57 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 0, SQLState: null 
<22-Apr-2015 15:58:57 o'clock CEST> <Warning> <org.hibernate.engine.jdbc.spi.SqlExceptionHelper> <BEA-000000> <SQL Error: 0, SQLState: null> 
Apr 22, 2015 3:58:57 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: java.lang.NullPointerException 
<22-Apr-2015 15:58:57 o'clock CEST> <Error> <org.hibernate.engine.jdbc.spi.SqlExceptionHelper> <BEA-000000> <java.lang.NullPointerException> 
Apr 22, 2015 3:58:57 PM org.hibernate.engine.internal.StatisticalLoggingSessionEventListener end 
INFO: Session Metrics { 
    81423 nanoseconds spent acquiring 1 JDBC connections; 
    0 nanoseconds spent releasing 0 JDBC connections; 
    7839815 nanoseconds spent preparing 1 JDBC statements; 
    0 nanoseconds spent executing 0 JDBC statements; 
    0 nanoseconds spent executing 0 JDBC batches; 
    0 nanoseconds spent performing 0 L2C puts; 
    0 nanoseconds spent performing 0 L2C hits; 
    0 nanoseconds spent performing 0 L2C misses; 
    0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections); 
    7610 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections) 
} 
Apr 22, 2015 3:58:57 PM com.sun.xml.ws.server.sei.TieHandler createResponse 
SEVERE: EJB Exception: ; nested exception is: 
     javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection 
javax.ejb.EJBException: EJB Exception: ; nested exception is: 
     javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection 
     at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException(RemoteBusinessIntfProxy.java:117) 
     at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:97) 
     at com.sun.proxy.$Proxy191.getModuleByName(Unknown Source) 
     at com.example.ejb.module.Maestro.getModuleByName(Maestro.java:81) 
     at com.example.webservice.ModuleLauncher.launch(ModuleLauncher.java:52) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:117) 
     at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:91) 
     at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:149) 
     at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:88) 
     at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136) 
     at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050) 
     at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019) 
     at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877) 
     at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:419) 
     at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:868) 
     at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:422) 
     at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:169) 
     at weblogic.wsee.jaxws.WLSServletAdapter.handle(WLSServletAdapter.java:199) 
     at weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke.run(HttpServletAdapter.java:640) 
     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) 
     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146) 
     at weblogic.wsee.util.ServerSecurityHelper.authenticatedInvoke(ServerSecurityHelper.java:108) 
     at weblogic.wsee.jaxws.HttpServletAdapter$3.run(HttpServletAdapter.java:284) 
     at weblogic.wsee.jaxws.HttpServletAdapter.post(HttpServletAdapter.java:293) 
     at weblogic.wsee.jaxws.JAXWSServlet.doRequest(JAXWSServlet.java:128) 
     at weblogic.servlet.http.AbstractAsyncServlet.service(AbstractAsyncServlet.java:99) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:844) 
     at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) 
     at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) 
     at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) 
     at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346) 
     at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:243) 
     at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3432) 
     at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402) 
     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
     at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
     at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285) 
     at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201) 
     at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179) 
     at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572) 
     at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255) 
     at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) 
     at weblogic.work.ExecuteThread.run(ExecuteThread.java:263) 
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection 
     at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) 
     at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) 
     at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:458) 
     at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:67) 
     at com.example.ejb.dao.ModuleDao.getModuleByName(ModuleDao.java:77) 
     at com.example.ejb.dao.ModuleDao_b09ccg_ModuleDaoRemoteImpl.__WL_invoke(Unknown Source) 
     at weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:34) 
     at com.example.ejb.dao.ModuleDao_b09ccg_ModuleDaoRemoteImpl.getModuleByName(Unknown Source) 
     at com.example.ejb.dao.ModuleDao_b09ccg_ModuleDaoRemoteImpl_CBV.getModuleByName(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:84) 
     ... 46 more 
Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection 
     at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) 
     at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 
     at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171) 
     at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:63) 
     at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:162) 
     at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) 
     at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:160) 
     at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1885) 
     at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) 
     at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:910) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) 
     at org.hibernate.loader.Loader.doList(Loader.java:2554) 
     at org.hibernate.loader.Loader.doList(Loader.java:2540) 
     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370) 
     at org.hibernate.loader.Loader.list(Loader.java:2365) 
     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497) 
     at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) 
     at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) 
     at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300) 
     at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) 
     at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) 
     at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) 
     ... 57 more 
Caused by: java.sql.SQLException: java.lang.NullPointerException 
     at weblogic.jdbc.common.internal.JDBCUtil.wrapAndThrowResourceException(JDBCUtil.java:278) 
     at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:416) 
     at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:393) 
     at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139) 
     at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228) 
     ... 78 more 
Caused by: java.lang.NullPointerException 
     at weblogic.security.SimpleCallbackHandler.<init>(SimpleCallbackHandler.java:38) 
     at weblogic.jdbc.common.internal.RmiDataSource.getSubject(RmiDataSource.java:466) 
     at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:407) 
     ... 82 more 

<22-Apr-2015 15:58:57 o'clock CEST> <Error> <com.sun.xml.ws.server.sei.TieHandler> <BEA-000000> <EJB Exception: ; nested exception is: 
     javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection 
javax.ejb.EJBException: EJB Exception: ; nested exception is: 
     javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection 
     at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException(RemoteBusinessIntfProxy.java:117) 
     at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:97) 
     at com.sun.proxy.$Proxy191.getModuleByName(Unknown Source) 
     at com.example.ejb.module.Maestro.getModuleByName(Maestro.java:81) 
     at com.example.webservice.ModuleLauncher.launch(ModuleLauncher.java:52) 
     Truncated. see log file for complete stacktrace 
Caused By: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection 
     at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) 
     at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) 
     at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:458) 
     at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:67) 
     at com.example.ejb.dao.ModuleDao.getModuleByName(ModuleDao.java:77) 
     Truncated. see log file for complete stacktrace 
Caused By: org.hibernate.exception.GenericJDBCException: Could not open connection 
     at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) 
     at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 
     at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171) 
     Truncated. see log file for complete stacktrace 
Caused By: java.sql.SQLException: java.lang.NullPointerException 
     at weblogic.jdbc.common.internal.JDBCUtil.wrapAndThrowResourceException(JDBCUtil.java:278) 
     at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:416) 
     at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:393) 
     at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139) 
     at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380) 
     Truncated. see log file for complete stacktrace 
Caused By: java.lang.NullPointerException 
     at weblogic.security.SimpleCallbackHandler.<init>(SimpleCallbackHandler.java:38) 
     at weblogic.jdbc.common.internal.RmiDataSource.getSubject(RmiDataSource.java:466) 
     at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:407) 
     at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:393) 
     at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139) 
     Truncated. see log file for complete stacktrace 

Нужна помощь! Пожалуйста, не стесняйтесь спрашивать дополнительную информацию.

+0

Какую версию веб-журнала вы используете? Старая версия 12c не поддерживает JPA2.1. Можете ли вы протестировать свой источник данных через веб-консоль? –

+0

Здравствуйте @AlexanderFedyukov, спасибо за вашу помощь, я использую 12C, загруженный 3 дня назад с веб-сайта Oracle, и я добавил поддержку JPA2.1, как вы можете видеть на моем посту. Я смог проверить источник данных на веб-консоли с результатом: тест OracleDS на сервере myserver был успешным. Благодарю. – rodrigocoelho

+0

Хорошо. И какую версию спящего режима вы используете? –

ответ

0

Итак, теперь его работа.

Поскольку Weblogic является закрытым источником, а NPE - кодом сервера приложений, я попытался изменить версию Hibernate, и я думаю, что существует некоторый конфликт между последней версией WebLogic 12C и Hibernate (4.3.9), поскольку с Hibernate 4.1.1 его работа в настоящее время.

Благодарим за помощь.

0

Я работал над WebLogic один раз, не нужно ничего тестировать прямо сейчас, но это не похоже на то, что имя файла jta-данных JPA завершено, не нужно ли быть java : // u_interface?

+0

Здравствуйте, @ Scott Sosna, спасибо за вашу помощь, на самом деле я пробовал это, но нет, кажется, что я использую правильное имя JNDI. На Weblogic, если я иду на серверы-> мой сервер-> JNDI Tree, я могу видеть что u_interface находится в верхней части интерфейса каталога. Спасибо – rodrigocoelho

+0

Да, weblogic не требовал java:/prefix –

0

Я не уверен в справедливости своего решения, но имею большой опыт работы с weblogic.

Вы используете hibernate-entitymanager 3.6, которые предоставляют jpa 2.0. Попробуйте обновить hibernate-entitymanager до последней версии или проекта понижения до jpa 2.0

По моему мнению, веблогика болезненно относится к модификации внутреннего баннера. Если вы ограничены сервером приложений, то лучшим решением будет переход на jpa2.0.

+0

Спасибо @Alexander, я использовал JBoss для этого проекта, но внезапно руководство изменилось на Weblogic. Все отлично работало на JBoss. Когда я опубликовал эту проблему вчера, я использовал последнюю версию Hibernate (4.3.9) + Weblogic 12C + JPA2.1. Изменение только версии: Hibernate (4.1.1) + Weblogic 12C + JPA2.1 теперь работает. Спасибо – rodrigocoelho

+0

Hibernate 4.1.1 поддержка jpa2.0. Мы используем 4.2.7 с weblogic, но не можем обновиться до ветки 4.3.x из-за тяжелого jar hell. –

+0

Hy @Alexander, просто чтобы вы знали, что также работает с Hibernate 4.2.7 и JPA2.1, – rodrigocoelho

Смежные вопросы