簡體   English   中英

JPA 在多個應用程序之間共享的實體(Wildfly - Hibernate - Maven)

[英]JPA Entities shared between several applications (Wildfly - Hibernate - Maven)

有沒有辦法配置各種持久性。xml 包含在所有使用包含所有實體的共享 jar 的不同應用程序(戰爭或耳朵)中?

就像是:

  deployments/
    |-ArchiviBase.war
      |-WEB-INF\classes\META-INF\persistence.xml
      |-WEB-INF\classes\META-INF\TipoAbitazione.hbm.xml
    |-Application2.war
      |-WEB-INF\classes\META-INF\persistence.xml
    |-Application3.war
      |-WEB-INF\classes\META-INF\persistence.xml
  lib/
    |-models.jar
      |- it\test\archiviBase\beans\TipoAbitazione.java

With all files (persistence.xml, hbm.xml and java class) within the war the mapping works correctly, but I need to share java entities with all applications, so I would like to move them to models.jar.

持久性.xml

<?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="archiviBasePU">
        <jta-data-source>java:jboss/jdbc/myDataSource</jta-data-source>
        <properties>
            <property name="jboss.entity.manager.factory.jndi.name"
                            value="java:jboss/hibernate/app1SF" />
            <property name="jboss.entity.manager.jndi.name"
                            value="java:/hibernate/app1SF" />
            <property name="hibernate.generate_statistics" value="true" />
            <property name="hibernate.default_schema"
                            value="app_schema" />
            <property name="hibernate.show_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

TipoAbitazione.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true"
    default-access="property" default-cascade="none" default-lazy="true">
    <class dynamic-insert="false" dynamic-update="false"
        mutable="true"
        name="it.test.app1.beans.TipoAbitazione"
        optimistic-lock="version" polymorphism="implicit"
        select-before-update="false" table="tipo_abitazione">
        <id column="tpab_codice" name="codice" type="java.lang.String">
            <generator class="assigned" />
        </id>
        <property column="tpab_descrizione" generated="never"
            lazy="false" length="100" name="descrizione" not-null="true"
            optimistic-lock="true" type="java.lang.String" unique="false" />
        <property column="tpab_flag_attivo" generated="never"
            lazy="false" length="1" name="attivo" optimistic-lock="true"
            type="java.lang.Boolean" unique="false" />
    </class>
</hibernate-mapping>

TipoAbitazione.java

package it.test.archiviBase.beans;

import java.io.Serializable;
 
public class TipoAbitazione implements Serializable {

    private static final long serialVersionUID = 1L;

    private String codice;
    private String descrizione;
    private Boolean attivo;

    public TipoAbitazione() {
    }

    public TipoAbitazione(String codice, String descrizione) {
        this.codice = codice;
        this.descrizione = descrizione;
    }

    public TipoAbitazione(String codice, String descrizione, Boolean attivo) {
        this.codice = codice;
        this.descrizione = descrizione;
        this.attivo = attivo;
    }

    public String getCodice() {
        return this.codice;
    }

    public void setCodice(String codice) {
        this.codice = codice;
    }

    public String getDescrizione() {
        return this.descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public Boolean getAttivo() {
        return this.attivo;
    }

    public void setAttivo(Boolean attivo) {
        this.attivo = attivo;
    }
}

每個應用程序都應該定義自己的持久性單元,使用自己的 hbm.xml 文件,但 java 實體將全部包含在共享模型中。jar

這是我嘗試部署戰爭時的錯誤:

1-03-25 15:20:46,406 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 3) MSC000001: Failed to start service jboss.persistenceunit."archiviBaseTest2-0.0.1-SNAPSHOT.war #archiviBasePU": org.jboss.msc.service.StartException in service jboss.persistenceunit."archiviBaseTest2-0.0.1-SNAPSHOT.war#archiviBasePU": javax.persistence.PersistenceException: [PersistenceUnit: archiviBasePU] Unable to build Hibernate SessionFactory at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:198) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:128) at java.secur ity.AccessController.doPrivileged(Native Method) at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:664) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:213) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java :1486) 在 org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) 在 Z93F725A07423FE1C889F B33D21F46Z.lang.Thread.run(Thread.java:748) at org.jboss.threads.JBossThread.run(JBossThread.java:513) Caused by: javax.persistence.PersistenceException: [PersistenceUnit: archiviBasePU] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1327) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1253) at org.jboss.as.jpa .hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) 在 org.jboss.as.ZF0B4A299C4517 1493AE3215D69D9B0A6Z.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:170)... 10 more Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister at org.hibernate.persister .internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:123) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77) at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:154 ) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:295) 在 org.hibernate.FactoryI.boot. mpl.build(SessionFactoryBuilderImpl.java:467) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1250)... 12 more Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:91) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116) at org.hibernate.tuple.entity.EntityMetamodel.(EntityMetamodel.java:413) at org.hibernatePer.ApersisterEntity.entity r.(AbstractEntityPersister.java:557) at org.hibernate.persister.entity.SingleTableEntityPersister.(SingleTableEntityPersister.java:124) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl. java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl .java:96)... 17 更多原因:java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(N ative Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:88)... 26 more Caused by: java.lang.IllegalArgumentException: Could not create type at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java: 154)在net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:365)在net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:1InlineExp4)在net.bytebuddy.TypeCache ction.findOrInsert(TypeCache.java:376) at org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState.load(ByteBuddyState.java:183) at org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState.loadProxy(ByteBuddyState.java: 107) at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyProxyHelper.buildProxy(ByteBuddyProxyHelper.java:54) at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyProxyFactory.postInstantiate(ByteBuddyProxyFactory.java:62) at org.hibernate.tuple .entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:103) at org.hibernate.tuple.entity.AbstractEntityTuplizer.(AbstractEntityTuplizer.java:155) at org.ZCB1F008EEBF5012C4E F9A2C36E574D61Z.tuple.entity.PojoEntityTuplizer.(PojoEntityTuplizer.java:51)... 31 more Caused by: java.lang.IllegalStateException: Error invoking Unsafe::defineClass at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe$Dispatcher$ Enabled.defineClass(ClassInjector.java:1997) at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe.injectRaw(ClassInjector.java:1774) at net.bytebuddy.dynamic.loading.ClassInjector$AbstractBase.inject(ClassInjector.java: 112) at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$ForUnsafeInjection.load(ClassLoadingStrategy.java:546) at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:100) at net.bytebuddy.dynamic.DynamicType $Default$Unloaded.load(DynamicType.java:5662) 在 org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState.lambda$load$0(ByteBuddyState.java:187) at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:152)... 41 more Caused by: java.lang. NoClassDefFoundError: org/hibernate/proxy/HibernateProxy at sun.misc.Unsafe.defineClass(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe$Dispatcher$Enabled.defineClass(ClassInjector .java:1987)... 48 更多原因:Z93F725A07423FE1C889F 448B33D21F46Z.lang.ClassNotFoundException: org.hibernate.proxy.HibernateProxy from [Module "deployment.external.global-directory.lib" from Service Module Loader] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255) at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410) at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116) ... 54 更多

2021-03-25 15:20:46,411 錯誤 [org.jboss.as.controller.management-operation] (外部管理請求線程--地址(“部署”失敗) " => "archiviBaseTest2-0.0.1-SNAPSHOT.war")]) - 失敗描述:{"WFLYCTL0080: 失敗的服務" => {"jboss.persistenceunit."archiviBaseTest2-0.0.1-SNAPSHOT.war#archiviBasePU"" => "javax.persistence.PersistenceException: [PersistenceUnit: archiviBasePU] Unable to build Hibernate SessionFactory Caused by: javax.persistence.PersistenceException: [PersistenceUnit: archiviBasePU] Unable to build Hibernate SessionFactory Caused by: org.hibernate.MappingException: Could not get org.hibernate.persister.entity.SingleTableEntityPersister 的構造函數引起:org.hibernate.HibernateException:無法實例化默認的tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] Caused by: java.lang.reflect.InvocationTargetException Caused by: java.lang.IllegalArgumentException: Could not create type Caused by: java.lang.IllegalStateException: Error invoking Unsafe::defineClass Caused by: java.lang.NoClassDefFoundError: org/hibernate/proxy/HibernateProxy Caused by: java.lang.ClassNotFoundException: org.hibernate.proxy.HibernateProxy from [Module "deployment.external.global-directory.lib" from Service Module Loader] “}} 2021-03-25 15:20:46,412 錯誤 [org.jboss.as.server](外部管理請求線程 -- 1)WFLYSRV0021:部署部署“archiviBaseTest2-0.0.1-SNAPSHOT.war”已滾動返回以下失敗消息: {"WFLYCTL0080: Failed services" => {"jboss.persistenceun it."archiviBaseTest2-0.0.1-SNAPSHOT.war#archiviBasePU"" => "javax.persistence.PersistenceException: [PersistenceUnit: archiviBasePU] 無法構建 Hibernate SessionFactory 原因:javax.persistence.PersistenceException: [PersistenceUnit: unable archiviBasePU] to build Hibernate SessionFactory Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity. PojoEntityTuplizer] Caused by: java.lang.reflect.InvocationTargetException Caused by: java.lang.IllegalArgumentException: Could not create type Caused by: java.lang.IllegalStateException: Error invoking Unsafe::defineC lass Caused by: java.lang.NoClassDefFoundError: org/hibernate/proxy/HibernateProxy Caused by: java.lang.ClassNotFoundException: org.hibernate.proxy.HibernateProxy from [Module "deployment.external.global-directory.lib" from Service Module加載器]"}}

<!-- Define persistence unit -->
<persistence-unit name="archiviBasePU">
    ...
    <jar-file>models.jar</jar-file>
    ...
</persistence-unit>

如果您不想在每個應用程序的 persistence.xml 中明確列出它們,則必須將persistence.xml與加載的類放在同一個庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM