2014-09-10 9 views
0

그래서 JPA (OpenJPA 2.3.0 구현)를 다소 비 전형적인 방식으로 사용하고 있습니다. 필자는 일부 직원 데이터를 유지하고 직원에게 작업을 할당하는 소프트웨어를 작성하고 있습니다. 할당 된 작업 유형은 정의되지 않습니다. 사용자는 매핑 된 수퍼 클래스를 확장하고 해당 클래스에 대한 추가 매핑을 추가해야하며 내 소프트웨어는 기본적으로이 클래스에서 가져옵니다. 이 패턴을 따르는 몇 가지 시스템이 있으며 할당 코드를 한 번만 작성하려고했습니다. 그러나 할당 된 항목에는 약간의 차이가 있습니다. 일부 시스템은 사례를 할당하고, 다른 시스템은 사례를 할당하고, 다른 시스템은 사례를 할당하고, 다른 사용자는 고객을 기반으로 할당합니다.OpenJPA를 사용하여 jar 파일 외부에 persistence.xml 패키징

최대의 구성 가능성을 얻으려면 내 영구적 인 엔티티를 주석을 사용하는 대신 매핑 파일에 저장하십시오. 필자의 소프트웨어를 사용하는 프로그래머는 매핑 된 수퍼 클래스를 확장하고 자체 매핑을 지속성 단위에 추가해야하므로 persistence.xml 또는 매핑 XML을 내가 만드는 병에 패키지하지 않으려했습니다. 나는 프로그래머가 그 파일을 귀에 어딘가에 포함시킬 수 있다고 생각했다. 나는 EE가 아닌 Java SE를 사용하여 모든 것을 작성 했으므로 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> 

나는이 방식으로 신속하고 더러운 웹 서비스를 작성했습니다. persistence.xml 파일을 추가하고 wam-config.jar라는 항아리에 XML을 매핑하고 ear 라이브러리 폴더에 붙여 넣었습니다. 웹 서비스 요청을하면 다음 오류가 발생합니다.

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_ 스택 추적입니까? 그렇지 않은 경우 게시하십시오. –

답변

0

나는 그것을 알아 냈다. 내 매핑 XML 파일을 찾을 수없는 것 같습니다.

persistence.xml과 내 영속 엔티티가있는 jar 파일의 매핑 XML 파일을 포함하여 "고전적인"방법으로 실험을 시작했습니다. 그것도 작동하지 않았다. 그런 다음 persistence.xml의 매핑 파일 경로를 "META-INF/wamMapping.xml"로 변경했으며 모든 작업이 시작되었습니다! 그런 다음, jar 파일에서 persistence.xml과 매핑 XML을 제거하고 META-INF 디렉토리 안에 별도의 jar 파일에 넣습니다. 나는 그것을 귀에 보관했다. 아직도 일하고있어!

이제는 전쟁에서 추가로 지속되는 클래스를 올바르게 작동시키는 데 문제가 있습니다.하지만 이는 다른 문제입니다.