2015-06-16 5 views
0

Хотя этот вопрос задавался несколько раз здесь, я не могу найти решение моей проблемы.Контейнер не может вводить EntityManager, используя @PersistentContext

Вот мой EJB:

@Stateless 
public class CustomerManagerBean implements CustomerManager, 
     CustomerManagerRemote { 

@PersistenceContext(unitName = "OldDataBase", type = PersistenceContextType.TRANSACTION) 
private EntityManager entityManager; 

@TransactionAttribute(value = TransactionAttributeType.SUPPORTS) 
    public Customer getCustomer(final CustomerPK customerPK) { 

cust = entityManager.find(Customer.class, customerPK); 
//Do some stuff 
} 

* The EntityManager является недействительным. Таким образом, я получаю исключение из null-указателя. *

Pesistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="OldDataBase" transaction-type="JTA"> 
     <provider> 
      org.apache.openjpa.persistence.PersistenceProviderImpl 
     </provider> 
     <jta-data-source>jdbc/legacyDs</jta-data-source> 
     <class>com.rax.pk.CustomerPK</class> 
     <class>com.rax.entity.Customer</class> 

     <properties> 
      <property name="openjpa.TransactionMode" value="managed" /> 
      <property name="openjpa.ConnectionFactoryMode" 
       value="managed" /> 
      <property name="openjpa.jdbc.DBDictionary" value="db2" /> 
      <property name="openjpa.DataCache" value="false" /> 
     </properties> 
    </persistence-unit> 
    <persistence-unit name="OracleDB" transaction-type="JTA"> 
     <provider> 
      org.apache.openjpa.persistence.PersistenceProviderImpl 
     </provider> 
     <jta-data-source>jdbc/cssDs</jta-data-source> 
     <properties> 
      <property name="openjpa.TransactionMode" value="managed" /> 
      <property name="openjpa.ConnectionFactoryMode" 
       value="managed" /> 
      <property name="openjpa.DataCache" value="false" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Ошибка:

0000002a CustAdminProf E com.staples.cacs.appsessions.CustAdminProfileAppSessionBean getCustAdminProfileStatus Domain layer Error occured while processing getCustAdminProfileStatus() 
           com.staples.cacs.domain.exception.DomainObjectsException: java.lang.NullPointerException 
    at com.staples.cacs.domain.entitymanagers.CustomerManagerBean.getCustomer(CustomerManagerBean.java:216) 
    at com.staples.cacs.domain.entitymanagers.interfaces.EJSRemote0SLCustomerManagerBean_89163ebf.getCustomer(EJSRemote0SLCustomerManagerBean_89163ebf.java) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:618) 
    at com.ibm.rmi.util.ProxyUtil$4.run(ProxyUtil.java:726) 
    at java.security.AccessController.doPrivileged(AccessController.java:241) 
    at com.ibm.rmi.util.ProxyUtil.invokeWithClassLoaders(ProxyUtil.java:724) 
    at com.ibm.CORBA.iiop.ClientDelegate.invoke(ClientDelegate.java:1161) 
    at $Proxy24.getCustomer(Unknown Source) 
    at com.staples.cacs.domain.entitymanagers.interfaces._CustomerManagerRemote_Stub.getCustomer(_CustomerManagerRemote_Stub.java) 
    at com.staples.cacs.appsessions.CustAdminProfileAppSessionBean.getMasterAccStatus(CustAdminProfileAppSessionBean.java:1791) 
    at com.staples.cacs.appsessions.CustAdminProfileAppSessionBean.getCustAdminProfileStatus(CustAdminProfileAppSessionBean.java:823) 
    at com.staples.cacs.appsessions.CustAdminProfileAppSessionBean.getCustAdminProfileStatus(CustAdminProfileAppSessionBean.java:760) 
    at com.staples.cacs.appsessions.interfaces.EJSRemote0SLCustAdminProfileAppSessionBean_e64c4c7c.getCustAdminProfileStatus(EJSRemote0SLCustAdminProfileAppSessionBean_e64c4c7c.java) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:618) 
    at com.ibm.rmi.util.ProxyUtil$4.run(ProxyUtil.java:726) 
    at java.security.AccessController.doPrivileged(AccessController.java:241) 
    at com.ibm.rmi.util.ProxyUtil.invokeWithClassLoaders(ProxyUtil.java:724) 
    at com.ibm.CORBA.iiop.ClientDelegate.invoke(ClientDelegate.java:1161) 
    at $Proxy20.getCustAdminProfileStatus(Unknown Source) 
    at com.staples.cacs.appsessions.interfaces._CustAdminProfileAppSessionRemote_Stub.getCustAdminProfileStatus(_CustAdminProfileAppSessionRemote_Stub.java) 
    at com.staples.cacs.web.security.PostLoginFilter.doFilter(PostLoginFilter.java:163) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130) 
    at com.staples.cacs.web.util.SetHttpHeadersFilter.doFilter(SetHttpHeadersFilter.java:29) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:840) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:750) 
    at com.ibm.ws.webcontainer.webapp.WebApp.invokeFilters(WebApp.java:3629) 
    at com.ibm.ws.wswebcontainer.webapp.WebApp.invokeFilters(WebApp.java:409) 
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3492) 
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:818) 
    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:126) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387) 
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
    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:136) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497) 
Caused by: java.lang.NullPointerException 
    at com.staples.cacs.domain.entitymanagers.CustomerManagerBean.getCustomer(CustomerManagerBean.java:167) 
    ... 52 more 

Я использую RAD 7.5 & IBM WebSphere Application Server 6.1. Код выглядит нормально. Потому что это код моего клиента, который я не изменил. Кажется, что некоторые проблемы касаются конфигурации WAS. Кто-нибудь может мне помочь? Заранее спасибо.

+0

Вы создали источник данных? Вы видите какие-либо другие ошибки в журнале? Если да, опубликуйте их. – rangalo

+0

Да, я создал источник данных. Я проверил соединение, и он прошел успешно. Имя jndi также одно и то же. Я отредактирую вопрос и поместим всю ошибку. @rangalo – Ajit

+0

Собираете ли вы копию аннотации 'PersistenceContext' в вашем приложении? Вы можете попробовать запустить сервер с помощью '-verbose: class' только для двойной проверки; класс 'PersistenceContext' должен быть загружен только WebSphere Application Server, если вы хотите, чтобы работа JPA, управляемая контейнером, работала. –

ответ

0

В журнале должны быть другие сообщения, которые указывают, что это проблема, но я знаю, что в ранних версиях RAD 7.5 была проблема с несколькими единицами продолжительности, определенными в одном файле persistence.xml. Вы пробовали модифицировать свой persistence.xml только для того, чтобы содержать только единицу, которая вы пытаетесь использовать? Если ничего другого, это может помочь сузить конкретную проблему. Более ранние версии OpenJPA имели аналогичную проблему во время выполнения определения правильной единицы продолжительности. Но, в любом случае, я думал, что есть сообщения, которые регистрируются, чтобы указать на проблему. Я бы попробовал это разделение, чтобы увидеть, сможете ли вы добиться прогресса. Удачи.

+0

Я просто сделал то, что вы сказали. Но та же ошибка наступает. В журнале system.out также нет дополнительной информации. Фактически при выполнении entityManager.find() он ищет таблицу в базе данных db2, которая находится в системе AS400. Я могу успешно проверить подключение к этому источнику данных. Но нужно ли мне настроить конфигурацию очереди сообщений в WAS, чтобы найти какие-либо данные в этой таблице базы данных AS400 Db2? – Ajit

+0

Я смущен, Сумит Пал. Исходная ошибка была отправлена ​​для NPE, потому что инъекция @PersistenceContext не работала. Таким образом, если это не работает, то вы не можете получить доступ к операции entityManager.find(), так как ваш entityManager будет пустым. Re: ваш вопрос о очереди сообщений ... Нет. Для получения данных из таблицы базы данных AS/400 требуется дополнительная конфигурация очереди сообщений.Просто стандартная конфигурация источника данных. –

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

  • Нет связанных вопросов^_^