2014-09-10 75 views
0

所以我使用的JPA(OpenJPA 2.3.0实现)可能是一种非常规的方式。我正在编写一个软件,用于维护一些人员数据并将工作分配给所述人员。它指定什么类型的工作是未定义的 - 用户必须扩展一个映射的超类,为该类添加任何额外的映射,并且我的软件基本上会从那里获取它。我们有几个遵循这种模式的系统,我们只想写一次赋值代码。但是,分配的内容有些许差异 - 某些系统分配了一个案例,其他分配了一个较小的案例,其他分配了一个客户等。使用OpenJPA打包jar之外的persistence.xml

为了获得最大的可配置性,我将所有元数据我的持久化实体放入映射文件中,而不是使用注释。由于使用我的软件的程序员必须扩展映射的超类并将其自己的映射添加到持久单元,因此我不想将persistence.xml或映射XML打包到我创建的jar中。我想程序员可以将他们的文件包含在他们的耳边。我用Java SE写了整个东西,而不是EE,所以我自己创建了EntityManagerFactory,而不是注入它。

我的组织正在使用实现Java EE 5的Websphere Application Server 7.0。查看Java EE 5中JPA的文档,似乎我的用户需要打包persistence.xml并将XML文件映射到单独的jar中可以放在耳朵的库文件夹中。然后他们可以在persistence.xml中引用我的jar文件。像下面的东西(我的软件的名称为WAM):

<?xml version="1.0" encoding="UTF-8"?> 
<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="WAM" transaction-type="RESOURCE_LOCAL"> 
    <mapping-file>wamMapping.xml</mapping-file> 
    <jar-file>wam-1.0.0.jar</jar-file> 
</persistence-unit> 

我想以这种方式来写一个快速和肮脏的Web服务。我添加了我的persistence.xml文件并将XML映射到名为wam-config.jar的jar并将其粘贴到ear库文件夹中。当我提出Web服务请求时,我收到以下错误消息:

javax.persistence.PersistenceException: Explicit persistence provider error(s) occurred for &quot;WAM&quot; after trying the following discovered implementations: com.ibm.websphere.persistence.PersistenceProviderImpl, org.apache.openjpa.persistence.PersistenceProviderImpl, org.apache.openjpa.persistence.PersistenceProviderImpl, org.apache.openjpa.persistence.PersistenceProviderImpl with the following failures: 
com.ibm.websphere.persistence.PersistenceProviderImpl returned: java.lang.IllegalArgumentException: The jar resource &quot;wam-1.0.0.jar&quot; cannot be loaded. 
at org.apache.openjpa.persistence.PersistenceUnitInfoImpl.validateJarFileName(PersistenceUnitInfoImpl.java:277) 
at org.apache.openjpa.persistence.PersistenceUnitInfoImpl.processJarFileNames(PersistenceUnitInfoImpl.java:239) 
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:538) 
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:335) 
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:89) 
at com.ibm.websphere.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:73) 
at com.ibm.websphere.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:43) 
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:154) 
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:65) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:150) 
at gov.ssa.wam.service.BaseWAMService.initializeEntityManagerFactory(BaseWAMService.java:73) 
at gov.ssa.wam.service.BaseWAMService.&lt;init&gt;(BaseWAMService.java:34) 
at gov.ssa.wam.service.WAMServiceDelegate.getInstance(WAMServiceDelegate.java:31) 
at gov.ssa.earnings.webservice.WAMServiceBean.&lt;init&gt;(WAMServiceBean.java:22) 
at java.lang.J9VMInternals.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1474) 
at com.ibm.wsspi.injectionengine.InjectionUtil.createInjectedInstance(InjectionUtil.java:79) 
at com.ibm.ws.websvcs.server.WSServiceInstanceFactory.createServiceInstance(WSServiceInstanceFactory.java:110) 
at org.apache.axis2.jaxws.server.EndpointController.handleRequest(EndpointController.java:247) 
at org.apache.axis2.jaxws.server.EndpointController.invoke(EndpointController.java:103) 
at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:161) 
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:189) 
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275) 
at com.ibm.ws.websvcs.transport.http.WASAxis2Servlet.doPost(WASAxis2Servlet.java:1431) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:738) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1663) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) 
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181) 
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91) 
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864) 
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592) 
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276) 
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
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: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:1646) 
org.apache.openjpa.persistence.PersistenceProviderImpl returned: java.lang.IllegalArgumentException: The jar resource &quot;wam-1.0.0.jar&quot; cannot be loaded. 
at org.apache.openjpa.persistence.PersistenceUnitInfoImpl.validateJarFileName(PersistenceUnitInfoImpl.java:277) 
at org.apache.openjpa.persistence.PersistenceUnitInfoImpl.processJarFileNames(PersistenceUnitInfoImpl.java:239) 
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:538) 
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:335) 
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:89) 
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:154) 
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:65) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:150) 
at gov.ssa.wam.service.BaseWAMService.initializeEntityManagerFactory(BaseWAMService.java:73) 
at gov.ssa.wam.service.BaseWAMService.&lt;init&gt;(BaseWAMService.java:34) 
at gov.ssa.wam.service.WAMServiceDelegate.getInstance(WAMServiceDelegate.java:31) 
at gov.ssa.earnings.webservice.WAMServiceBean.&lt;init&gt;(WAMServiceBean.java:22) 
at java.lang.J9VMInternals.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1474) 
at com.ibm.wsspi.injectionengine.InjectionUtil.createInjectedInstance(InjectionUtil.java:79) 
at com.ibm.ws.websvcs.server.WSServiceInstanceFactory.createServiceInstance(WSServiceInstanceFactory.java:110) 
at org.apache.axis2.jaxws.server.EndpointController.handleRequest(EndpointController.java:247) 
at org.apache.axis2.jaxws.server.EndpointController.invoke(EndpointController.java:103) 
at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:161) 
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:189) 
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275) 
at com.ibm.ws.websvcs.transport.http.WASAxis2Servlet.doPost(WASAxis2Servlet.java:1431) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:738) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1663) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) 
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181) 
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91) 
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864) 
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592) 
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276) 
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
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: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:1646) 

wam-1.0.0.jar文件位于ear库文件夹中。它似乎是在wam-config.jar中找到persistence.xml,但它找不到(或不能使用)wam-1.0.0.jar。任何人有任何想法我要去哪里错了?

编辑:每个请求发布完整的堆栈跟踪。对于那个很抱歉!

+0

是_COMPLETE_堆栈跟踪?如果没有,发布它。 – 2014-09-10 15:39:29

回答

0

我想通了。它似乎无法找到我的映射XML文件。

我开始尝试通过做一些“经典”的方式 - 包括jar中的persistence.xml和我的映射XML文件与持久实体。那也不管用。然后,我将persistence.xml中映射文件的路径更改为“META-INF/wamMapping.xml”,并开始工作!之后,我从我的jar文件中删除了persistence.xml和我的映射XML,并将它们放在META-INF目录内的单独的jar文件中。然后我把它放在我的耳库里。还在工作!

我现在无法让我的战争中的额外持久类正常工作,但这是一个不同的问题。