Jpa 2.0 JBoss5中的多个JPA持久性加载问题
我有两个项目“ProjectA.war”和“ProjectB.war” 在这两个项目中,我都使用Oracle11g、JPA2和EclipseLink 2.4.2。 我使用的是JBoss5.1.0GA应用服务器 两者都有不同的persistence.xml文件,具有不同的持久性单元名称和不同的数据源文件。 在这里,我为两个项目连接相同的Oracle DB用户 我的问题是。。。 首先,我在服务器中部署了ProjectA.war。它工作得很好。数据库操作也运行良好 现在,除了ProjectA.war之外,我还在服务器上部署ProjectB.war。 因此,当我试图在ProjectA.war上执行db操作时,jboss正在ProjectB.war的persistence.xml文件中搜索POJO类,并借助于ProjectB的持久化单元名。 但实际上它需要在ProjectA中搜索 那么,我能做什么 我的项目A.war配置如下所示Jpa 2.0 JBoss5中的多个JPA持久性加载问题,jpa-2.0,eclipselink,classloader,jboss5.x,Jpa 2.0,Eclipselink,Classloader,Jboss5.x,我有两个项目“ProjectA.war”和“ProjectB.war” 在这两个项目中,我都使用Oracle11g、JPA2和EclipseLink 2.4.2。 我使用的是JBoss5.1.0GA应用服务器 两者都有不同的persistence.xml文件,具有不同的持久性单元名称和不同的数据源文件。 在这里,我为两个项目连接相同的Oracle DB用户 我的问题是。。。 首先,我在服务器中部署了ProjectA.war。它工作得很好。数据库操作也运行良好 现在,除了ProjectA.war之
============ persistence.xml ==================
<persistence 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
persistence_2_0.xsd" version="2.0">
<persistence-unit name="Entity" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:/projectADS</non-jta-data-source>
<class>env.model.authorization.IptUsersRoles</class>
<class>env.model.defaults.IptUsergroups</class>
<class>env.model.defaults.IptUsertype</class>
<class>env.model.authorization.IptUsers</class>
<properties>
<property name="javax.persistence.jdbc.driver"
value="oracle.jdbc.driver.OracleDriver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:oracle:thin:@x.x.x.x:1521:TEST" />
<property name="javax.persistence.jdbc.user" value="TEST" />
<property name="javax.persistence.jdbc.password" value="TEST" />
<property name="eclipselink.session.customizer" value="entity.jpa.JPAEclipseLinkSessionCustomizer"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
================= jboss-classloading.xml ===================
<?xml version="1.0" encoding="UTF-8"?>
<classloading xmlns="urn:jboss:classloading:1.0"
name="ProjectA.war"
domain="DefaultDomain"
top-level-classloader="true"
parent-domain="Ignored"
export-all="NON_EMPTY"
import-all="true"
parent-first="false">
</classloading>
==================== jboss-web.xml ======================
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>ProjectADS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<jndi-name>java:/ProjectADS</jndi-name>
<res-auth>Container</res-auth>
</resource-ref>
</jboss-web>
============ persistence.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"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
persistence_2_0.xsd" version="2.0">
<persistence-unit name="IportIBEntity" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:/ProjectBDS</non-jta-data-source>
<class>env.model.IptRequestDataRecord</class>
<class>env.model.IptResponseDataRecord</class>
<properties>
<property name="eclipselink.jdbc.driver"
value="oracle.jdbc.driver.OracleDriver" />
<property name="eclipselink.jdbc.url"
value="jdbc:oracle:thin:@x.x.x.x:1521:TEST" />
<property name="eclipselink.jdbc.user" value="TEST" />
<property name="eclipselink.jdbc.password" value="TEST" />
<property name="eclipselink.session.customizer"
value="entity.jpa.JPAEclipseLinkSessionCustomizer" />
<property name="eclipselink.logging.level" value="FINEST" />
</properties>
</persistence-unit>
</persistence>
================= jboss-classloading.xml ===================
<?xml version="1.0" encoding="UTF-8"?>
<classloading xmlns="urn:jboss:classloading:1.0"
name="ProjectB.war"
domain="DefaultDomain"
top-level-classloader="true"
parent-domain="Ignored"
export-all="NON_EMPTY"
import-all="true"
parent-first="false">
</classloading>
==================== jboss-web.xml ======================
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>ProjectBDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<jndi-name>java:/ProjectBDS</jndi-name>
<res-auth>Container</res-auth>
</resource-ref>
</jboss-web>
在这里,IportIBEntity是ProjectB.war的持久化单元,但IPTOURCES pojo在ProjectA.war中拥有。
因此,它试图在ProjectB.war中搜索pojo,而不是ProjectA.war
我也放弃了下面的链接,但没有任何进展
请帮我解决这个问题……请帮我!!我处于非常关键的位置。为什么需要两种不同的API?我看到您在这两个应用程序中使用相同的RDBMScases@IAM这里ProjectA是我的基础项目,ProjectB是Web服务项目。两者将与同一oracle用户共享同一数据库。因为我需要按时间间隔发送数据。但是我想让ProjectB成为一个可插入的项目(需要作为单独的实例运行)。那么,你能给我一个建议,我如何用不同的产品管理相同的表。
13:26:34,068 INFO [IportIBEntity] finding IptUsers instance with property: userCode, value: ADMIN
13:26:34,709 SEVERE [IportIBEntity] find by property name failed
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Problem compiling [select model from IptUsers model where model.userCode= :propertyValue].
[18, 26] The abstract schema type 'IptUsers' is unknown.
[39, 53] The state field path 'model.userCode' cannot be resolved to a valid type.
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1512)
at env.acegi.users.IptUsersDAO.findByProperty(IptUsersDAO.java:174)
at env.acegi.users.IptUsersDAO.findByUserCode(IptUsersDAO.java:185)
at env.acegi.security.AcegiAuthentication.loadUserByUsername(AcegiAuthentication.java:51)
at org.acegisecurity.providers.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:99)
at org.acegisecurity.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:122)
at org.acegisecurity.providers.ProviderManager.doAuthentication(ProviderManager.java:200)
at org.acegisecurity.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:47)
at org.acegisecurity.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:74)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:252)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.concurrent.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:95)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)
Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.4.2.v20130315-93567e3): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling [select model from IptUsers model where model.userCode= :propertyValue].
[18, 26] The abstract schema type 'IptUsers' is unknown.
[39, 53] The state field path 'model.userCode' cannot be resolved to a valid type.
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:150)
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:339)
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:270)
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:157)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:138)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:112)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:98)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:82)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1510)
... 38 more
13:26:34,711 ERROR [[default]] Servlet.service() for servlet default threw exception
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Problem compiling [select model from IptUsers model where model.userCode= :propertyValue].
[18, 26] The abstract schema type 'IptUsers' is unknown.
[39, 53] The state field path 'model.userCode' cannot be resolved to a valid type.
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1512)
at env.acegi.users.IptUsersDAO.findByProperty(IptUsersDAO.java:174)
at env.acegi.users.IptUsersDAO.findByUserCode(IptUsersDAO.java:185)
at env.acegi.security.AcegiAuthentication.loadUserByUsername(AcegiAuthentication.java:51)
at org.acegisecurity.providers.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:99)
at org.acegisecurity.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:122)
at org.acegisecurity.providers.ProviderManager.doAuthentication(ProviderManager.java:200)
at org.acegisecurity.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:47)
at org.acegisecurity.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:74)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:252)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.concurrent.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:95)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)
Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.4.2.v20130315-93567e3): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling [select model from IptUsers model where model.userCode= :propertyValue].
[18, 26] The abstract schema type 'IptUsers' is unknown.
[39, 53] The state field path 'model.userCode' cannot be resolved to a valid type.
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:150)
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:339)
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:270)
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:157)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:138)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:112)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:98)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:82)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1510)
... 38 more
"INFO [IportIBEntity] finding IptUsers instance with property: userCode, value: ADMIN"