2016-04-13 74 views
1

Şu anda eski miras kodunu yeniden eski haline getiriyorum ve tüm EJB 2.0 referanslarını EJB 3.0/3.1 ile değiştirdim veya kaldırın. Oracle Veritabanımızın (11g/12c) geçerli Tarihini (java.util.Date) veya Zaman Damgasını (java.sql.Timestamp) sağlayan bir yardımcı program sınıfına rastladım. Veritabanına erişim, bir javax.naming.InitialContext üzerinde yapılan bir arama yoluyla elde edilen bir java.sql.Connection aracılığıyla uygulanır.Bir POJO'da EntityManager nasıl edinilir?

Bunu JPA veya Hazırda Bekletme üzerinde çözmek ve yeni Java Tarih/Zaman API'sini kullanmak istiyorum. Bu yüzden yardımcı program sınıfını yeniden yazdım, ancak geçerli bir javax.persistence.EntityManager örneğini alamıyorum. Yardımcı sınıf, bir kulağın içinde bulunan bir server.jar içindeki diğer mevcut durum bilgisi olmayan oturumlar ve varlık çekirdekleriyle birlikte paketlenmiştir. Kalıcı birim "seller-em" zaten var ve oturum ve varlık çekirdekleri tarafından kullanılıyor. GetEm() işlevini çağırmaya çalıştığımda, emf.createEntitymanager yürütüldüğünde java.lang.NullPointerException alırım.

Ben de Wildfly (Final 8.2.1) ile varlık yöneticisi enjekte izin çalıştı:

@PersistenceContext(unitName = "seller-em") 
private EntityManager em; 

Ama sonra em boş.

Zaten google ve burada ipuçlarını arıyorum bir gün geçirdim. Yanlış gittiğim herhangi bir fikir veya kimse bana doğru yöne bir ipucu verebilir mi?

Saygılarımızla,
CB

Çevre:
Java 8 (1.8.0_77)
Eclipse Mars R2 (4.5.2)
Maven 3.3.3
(JBoss) Wildfly 8.2.1 Nihai

Ek:

package org.example.server.seller.tools; 

import java.sql.Timestamp; 
import java.time.Instant; 
import java.time.LocalDate; 
import java.time.LocalDateTime; 
import java.time.LocalTime; 
import java.time.ZoneId; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import javax.persistence.Query; 

public class DateUtility { 
    private static final String ORACLE_ISO_8601_FORMAT_STRING = "YYYY-MM-DD\"T\"HH:MI:SS.FF6TZH:TZM"; 
    // 12/31/2999 00:00:00.000000 +01:00 (ECT/European Central Time/TZ:Europe/Berlin) 
    // Using Z time, because +01:00, ECT, ECT, UTC+1, etc. results in a java.time.format.DateTimeParseException. 
    private static final Instant MAXIMUM_DATE_TIME = Instant.parse("2999-12-30T23:00:00.000000Z"); 
    private static final Object TREE_LOCK = new Object(); 

    private static EntityManager getEm() { 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("seller-em"); 
     return emf.createEntityManager(); 
    } 

    public static Instant getDatabaseSystemTimestamp() { 
     // EntityManager is not thread-safe, we need to synchronie it. 
     synchronized (TREE_LOCK) { 
      Query query = getEm().createNativeQuery("SELECT TO_CHAR(SYSTIMESTAMP, :formatString) FROM DUAL"); 
      query.setParameter("formatString", ORACLE_ISO_8601_FORMAT_STRING); 
      String iso8601String = (String) query.getSingleResult(); 
      return Instant.parse(iso8601String); 
     } 
    } 

    public static Instant getMaximumDateTime() { 
     return MAXIMUM_DATE_TIME; 
    } 

    public static LocalDateTime getCurrentDateTime() { 
     return LocalDateTime.ofInstant(getDatabaseSystemTimestamp(), ZoneId.of("Europe/Berlin")); 
    } 

    public static LocalDate getCurrentDate() { 
     return getCurrentDateTime().toLocalDate(); 
    } 

    public static LocalTime getCurrentTime() { 
     return getCurrentDateTime().toLocalTime(); 
    } 

    /* 
    * Just for backwards compatibility. Opted for java.sql.Timestamp since it is an extension of java.util.Date and 
    * therefore can also be used a Date. 
    */ 
    @Deprecated 
    public static Timestamp getCurrentDateTimeAsTimestamp() { 
     return Timestamp.from(getDatabaseSystemTimestamp()); 
    } 
} 

Ve StackTrace:

java.lang.NullPointerException 
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:76) 
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:118) 
    at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1602) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:210) 
    at org.hibernate.jpa.internal.EntityManagerImpl.<init>(EntityManagerImpl.java:91) 
    at org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:345) 
    at org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313) 
    at org.example.server.seller.tools.DateUtility.getEm(DateUtility.java:26) 
    at org.example.server.seller.tools.DateUtility.getDatabaseSystemTimestamp(DateUtility.java:32) 
    at org.example.server.seller.tools.DateUtilityTest.testDateUtility(DateUtilityTest.java:94) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.jboss.arquillian.junit.Arquillian$6$1.invoke(Arquillian.java:270) 
    at org.jboss.arquillian.container.test.impl.execution.LocalTestExecuter.execute(LocalTestExecuter.java:60) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115) 
    at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67) 
    at org.jboss.arquillian.container.test.impl.execution.ContainerTestExecuter.execute(ContainerTestExecuter.java:38) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
    at org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:102) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
    at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:84) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
    at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:65) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135) 
    at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:111) 
    at org.jboss.arquillian.junit.Arquillian$6.evaluate(Arquillian.java:263) 
    at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:226) 
    at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314) 
    at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46) 
    at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:240) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:185) 
    at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314) 
    at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46) 
    at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:199) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:147) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:138) 
    at org.jboss.arquillian.junit.container.JUnitTestRunner.execute(JUnitTestRunner.java:65) 
    at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.executeTest(ServletTestRunner.java:160) 
    at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.execute(ServletTestRunner.java:126) 
    at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.doGet(ServletTestRunner.java:90) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86) 
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) 
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) 
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) 
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) 
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) 
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) 
    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) 
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:248) 
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:77) 
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:167) 
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199) 
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:761) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
      version="2.1"> 

    <persistence-unit name="seller-em"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:/DBUNIT</jta-data-source> 
     <properties> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> 
     </properties> 
    </persistence-unit> 

</persistence> 
+0


CB yığın izlemesi ve boş olanı nesne bir ifadeye yer nakledilecek! –

+0

Merhaba Neil Stockton, cevabınız için teşekkürler. Stacktrace eklemek genel olarak mantıklı olurdu, sadece eklemeyi unuttum. Afedersiniz. Orijinal gönderimi düzenledim ve stacktrace'i ekledim. –

+0

, işlemler (JTA) ile ilgili bir sorun yaşıyor, sonra da kalıcılığınızı gönderiyor.xml ve sağladığınız veri kaynağını kontrol edin –

cevap

0

başıma bir çözüm buldum. Stacktrace'i yayınladıktan sonra, JOTEStatus Yardımcısının sınıfındaki NPE'yi araştırdım ve stackoverflow'ta buraya bir isabet verdim. this thread'da belirleyici ipucunu buldum.

benim persistence.xml aşağıdaki satırı eklendi ve işe yaradı:

<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 

Teşekkür Yardımlarınız için.
En rehards, bazı NPE alırsanız o zaman İLK şey olması bekleniyor olurdu