2014-09-03 5 views
1

현재 제가 작업하고있는 어플리케이션은 Spring JPA를 사용하고 있습니다. 하지만 Websphere 애플리케이션 서버 V8.5에 배포하면 애플리케이션 시작시 예외가 발생합니다. 사용되는 데이터베이스는 Oracle Database 11g Express Edition 릴리즈 11.2.0.2.0입니다.HibernatePersistence 제공자에서 에러가 발생했습니다.

An error occurred in the org.hibernate.ejb.HibernatePersistence persistence provider when it attempted to create the container entity manager factory for the domain persistence unit. The following error occurred: java.lang.NullPointerException 
    at org.hibernate.engine.jdbc.internal.TypeInfoExtracter.extractTypeInfo(TypeInfoExtracter.java:85) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:144) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) 
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1797) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1755) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:76) 
    at com.ibm.ws.jpa.management.JPAPUnitInfo.createEMFactory(JPAPUnitInfo.java:1584) 
    at com.ibm.ws.jpa.management.JPAPUnitInfo.createEntityManagerFactory(JPAPUnitInfo.java:1406) 
    at com.ibm.ws.jpa.management.JPAPxmlInfo.extractPersistenceUnits(JPAPxmlInfo.java:246) 
    at com.ibm.ws.jpa.management.JPAScopeInfo.processPersistenceUnit(JPAScopeInfo.java:119) 
    at com.ibm.ws.jpa.management.JPAApplInfo.processModulePUs(JPAApplInfo.java:167) 
    at com.ibm.ws.jpa.management.AbstractJPAComponent.startingModule(AbstractJPAComponent.java:451) 
    at com.ibm.ws.jpa.management.JPAComponentImpl.startingDeployedModule(JPAComponentImpl.java:771) 
    at com.ibm.ws.jpa.management.JPAComponentImpl.adjust(JPAComponentImpl.java:559) 
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.adjust(ApplicationMgrImpl.java:1071) 
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectAdjust(DeployedApplicationImpl.java:1394) 
    at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:627) 
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968) 
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:776) 
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1379) 
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2189) 
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:446) 
    at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123) 
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:389) 
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:117) 
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$1.run(CompositionUnitMgrImpl.java:664) 
    at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5474) 
    at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5600) 
    at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255) 
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:678) 
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:622) 
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:1269) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:611) 
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:69) 
    at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:611) 
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:272) 
    at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1152) 
    at java.security.AccessController.doPrivileged(AccessController.java:298) 
    at com.ibm.oti.security.CheckedAccessControlContext.securityCheck(CheckedAccessControlContext.java:30) 
    at sun.misc.JavaSecurityAccessWrapper.doIntersectionPrivilege(JavaSecurityAccessWrapper.java:41) 
    at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1146) 
    at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:999) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:847) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:783) 
    at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1335) 
    at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) 
    at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1228) 
    at com.ibm.ws.management.connector.AdminServiceDelegator.invoke(AdminServiceDelegator.java:181) 
    at com.ibm.ws.management.connector.ipc.CallRouter.route(CallRouter.java:247) 
    at com.ibm.ws.management.connector.ipc.IPCConnectorInboundLink.doWork(IPCConnectorInboundLink.java:360) 
    at com.ibm.ws.management.connector.ipc.IPCConnectorInboundLink$IPCConnectorReadCallback.complete(IPCConnectorInboundLink.java:602) 
    at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1864) 

그리고 응용 프로그램은 여전히 ​​정상적으로 작동합니다. 즉, 응용 프로그램에 액세스하여 비즈니스 논리를 수행 할 수 있음을 의미합니다.

응용 프로그램을 배포 할 때마다 왜이 예외가 SystemOut.log에 기록되는지 잘 모르겠습니다. Persistence.xml은 다음과 같습니다.

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
<persistence-unit name="domain" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <non-jta-data-source>java:comp/env/jdbc/MyDS</non-jta-data-source> 
    <class>MyEntityClasses</class> 
</persistence-unit> 

은 알려 주시기 바랍니다 어떤 사람은 왜 예외가 발생 할 수 있습니까?

여기 TypeInfo.extractTypeInfo가 데이터베이스에서 데이터 유형을 조회하는 JDBC DatabaseMetaData를 사용하여 내 스프링 구성

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/data/jpa 
     http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.1.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
     http://www.springframework.org/schema/jee 
     http://www.springframework.org/schema/jee/spring-jee-3.1.xsd"> 

<context:annotation-config/> 
<tx:annotation-driven/> 
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="mypersistenceunit" /> 
</bean> 
<bean id="persistenceExceptionTranslationPostProcessor" 
     class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

<jpa:repositories base-package="com.domain.repository" /> 

+0

전체 스프링 구성을 추가 할 수 있습니까? – Xstian

+0

MyEntityClasses 엔티티를 가지고 있습니까? 아니면 가지고있는 모든 클래스를 지정하고 더미처럼 추가하고 싶지 않았습니까? – zaratustra

+0

@Xstian Spring 구성으로 내 게시물을 편집했습니다. – Samy

답변

0

최대 절전 모드 방법이다. 귀하의 경우에 NullPointer를 디버깅해야 할 수도 있습니다. 나는 Hibernate가 부트 스트랩하는 동안이 메소드를 호출하기 전에 광범위하게 사용되기 때문에 metaData가 null 인 것으로 의심하지 않는다.

public static LinkedHashSet<TypeInfo> extractTypeInfo(DatabaseMetaData metaData) { 
     final LinkedHashSet<TypeInfo> typeInfoSet = new LinkedHashSet<TypeInfo>(); 
     try { 
      final ResultSet resultSet = metaData.getTypeInfo(); 
      try { 
       while (resultSet.next()) { 
        typeInfoSet.add(
          new TypeInfo(
            resultSet.getString("TYPE_NAME"), 
            resultSet.getInt("DATA_TYPE"), 
            interpretCreateParams(resultSet.getString("CREATE_PARAMS")), 
            resultSet.getBoolean("UNSIGNED_ATTRIBUTE"), 
            resultSet.getInt("PRECISION"), 
            resultSet.getShort("MINIMUM_SCALE"), 
            resultSet.getShort("MAXIMUM_SCALE"), 
            resultSet.getBoolean("FIXED_PREC_SCALE"), 
            resultSet.getString("LITERAL_PREFIX"), 
            resultSet.getString("LITERAL_SUFFIX"), 
            resultSet.getBoolean("CASE_SENSITIVE"), 
            TypeSearchability.interpret(resultSet.getShort("SEARCHABLE")), 
            TypeNullability.interpret(resultSet.getShort("NULLABLE")) 
          ) 
        ); 
       } 
      } 
      catch (SQLException e) { 
       LOG.unableToAccessTypeInfoResultSet(e.toString()); 
      } 
      finally { 
       try { 
        resultSet.close(); 
       } 
       catch (SQLException e) { 
        LOG.unableToReleaseTypeInfoResultSet(); 
       } 
      } 
     } 
     catch (SQLException e) { 
      LOG.unableToRetrieveTypeInfoResultSet(e.toString()); 
     } 

     return typeInfoSet; 
    } 
+0

NullPointer 예외가 온라인 상태입니다. resultSet.close(); 마지막으로 블록에. 맞습니다. 데이터베이스 메타 데이터는 null이 아니지만 ResultSet을 결과로하는 metaData.getTypeInfo()는 null입니다. 나는 응용 프로그램이 문제없이 잘 작동하는 것처럼 이것을 디버깅하는 방법을 알 수 없다. – Samy

+0

WebSphere에서 원격 디버깅을 활성화하고 서버가 시작되는 동안 IDE (Eclipse 등)에서 디버거를 연결할 수 있습니다. – Shailendra

+0

스프링 프레임 워크 로그를 활성화하려고 시도했지만 WebSphere 로그 및 업데이트를 사용 가능하게하려고 노력했습니다. – Samy

관련 문제