【发布时间】:2012-02-28 11:33:25
【问题描述】:
我在一个应用程序中使用 Spring/JPA/Hibernate 3,在 Tomcat 7 中运行得很好,但在 JBoss AS 7 中失败了。我正在使用 @PersistenceContext 注释来注入我的实体管理器在 DAO 中,但在运行查询时出现 "Entity is not mapped" 异常。我不希望 JBoss 管理我的持久性上下文,我正在使用类路径扫描来构造我的 LocalContainerEntityManagerFactoryBean。我尝试从 JBoss Standalone.xml 中禁用 jpa 模块,甚至添加一个包含以下内容的 jboss-deployment-structure.xml:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="org.hibernate"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
还是不行。这个异常的原因是什么?为什么 JBoss 仍然尝试管理我的持久化上下文?
P.S.:默认情况下,我得到一个奇怪的 PU 定义(PU 根 url 不是我的战争!)
(MSC service thread 1-3) insurance-module 17:51:41.456 [MSC service thread 1-3] DEBUG org.hibernate.ejb.Ejb3Configuration - Processing PersistenceUnitInfo [
17:51:41,456 INFO [stdout] (MSC service thread 1-3) name: default
17:51:41,456 INFO [stdout] (MSC service thread 1-3) persistence provider classname: null
17:51:41,456 INFO [stdout] (MSC service thread 1-3) classloader: ModuleClassLoader for Module "deployment.insurance-module-0.1-SNAPSHOT.war:main" from Service Module Loader
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Temporary classloader: org.springframework.instrument.classloading.SimpleThrowawayClassLoader@13acaabd
17:51:41,457 INFO [stdout] (MSC service thread 1-3) excludeUnlistedClasses: true
17:51:41,457 INFO [stdout] (MSC service thread 1-3) JTA datasource: null
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Non JTA datasource: com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> z8kfsx8l1ikdpo61c3bmxu|6b5638a, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> z8kfsx8l1ikdpo61c3bmxu|6b5638a, idleConnectionTestPeriod -> 60, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/insurance, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 60, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 5, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> select 1, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Transaction type: RESOURCE_LOCAL
17:51:41,457 INFO [stdout] (MSC service thread 1-3) PU root URL: file:/home/mircea/jboss-as-7.0.2.Final/modules/sun/jdk/main/service-loader-resources/
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Shared Cache Mode: UNSPECIFIED
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Validation Mode: AUTO
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Jar files URLs []
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Managed classes names []
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Mapping files names []
17:51:41,457 INFO [stdout] (MSC service thread 1-3) Properties []
17:51:41,459 INFO [stdout] (MSC service thread 1-3) insurance-module 17:51:41.459 [MSC service thread 1-3] DEBUG org.hibernate.ejb.Ejb3Configuration - Detect class: true; detect hbm: true
17:51:41,462 INFO [stdout] (MSC service thread 1-3) insurance-module 17:51:41.462 [MSC service thread 1-3] DEBUG o.h.ejb.packaging.AbstractJarVisitor - Searching mapped entities in jar/par: file:/home/mircea/jboss-as-7.0.2.Final/modules/sun/jdk/main/service-loader-resources/
【问题讨论】:
-
给我们看一些配置文件和代码?
-
如果我从 LocalContainerEntityManagerFactoryBean bean 定义中删除 packagesToScan 属性并使用带有 value="classpath*:META-INF/jpa-persistence.xml" 的 persistenceXmlLocation (并手动将实体类添加到, 有用)。看起来“packagesToScan”功能不适用于 JBoss7(?!)。 @Sajan 你还想要什么(pom.xml,bean 定义)?
-
ANSWER: 看起来我很愚蠢:如果 packagesToScan 没有指向正确的包,那么在 Tomcat 7 中一切正常,但是在部署到 JBoss 时它会失败,如中所述问题。
标签: spring hibernate jpa jboss7.x