在JBoss 5.1/Hibernate 3.3.2上使用vfsfile(爆裂的JAR)加载持久化单元



我正在寻找帮助来解决从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并声明所有带有标签。

相关内容

  • 没有找到相关文章