我正在寻找帮助来解决从JBoss4迁移到JBoss5时出现的问题。Hibernate对VFS的支持(在JBoss5中引入)似乎有一个问题。
由于模块化的原因,多个工件具有持久性单元(pu)声明。在部署期间,所有这些都被合并到一个类似于
的声明中。Processing PersistenceUnitInfo [
name: pu
persistence provider classname: null
classloader: org.jboss.web.tomcat.service.WebCtxLoader$ENCLoader@7a74fa
Temporary classloader: org.springframework.instrument.classloading.SimpleThrowawayClassLoader@432f0a33
excludeUnlistedClasses: false
JTA datasource: com.xyz.jdbc.datasource.DelegatingDataSource@4546bcba
Non JTA datasource: com.xyz.jdbc.datasource.DelegatingDataSource@4546bcba
Transaction type: JTA
PU root URL: vfszip:/<path>/<jar>/
Jar files URLs [
vfsfile:/<path>/<exploded jar>/
vfsfile:/<path>/<exploded jar>/
vfsfile:/<path>/<exploded jar>/
vfszip:/<path>/<jar>/
vfszip:/<path>/<jar>/
vfszip:/<path>/<jar>/]
Managed classes names []
Mapping files names []
Properties []
当启用调试时,我们可以看到爆炸的jar不会扫描注释
[org.hibernate.ejb.packaging.AbstractJarVisitor] Searching mapped entities in jar/par: vfsfile:/<path>/<exploded jar>/
[org.hibernate.ejb.packaging.AbstractJarVisitor] Searching mapped entities in jar/par: vfsfile:/<path>/<exploded jar>/
而压缩JAR如预期扫描
[org.hibernate.ejb.packaging.AbstractJarVisitor] Searching mapped entities in jar/par: vfszip:/<path>/<jar>/
[org.hibernate.ejb.packaging.AbstractJarVisitor] Filtering: com.xyz.batch.configuration.internal.impl.JobMetadataDocumentImpl$1$JobList
...
在查询未找到的实体时导致QuerySyntaxException
org.hibernate.hql.ast.QuerySyntaxException: <EntityName> is not mapped
根据Red Hat的支持,不可能对爆炸的jar使用扫描。有两种解决方案:
- 使用Compact jar,扫描工作正常
- 使用爆裂的jar并声明所有带有
标签。