2012-10-08 7 views
8

la mia domanda è quasi risposto in questa discussione:EclipseLink unità di persistenza composito su server diversi senza <jar-file>

EclipseLink, EntityManager with two persistence units needed

Ma mi stava usando un file persistence.xml per dichiarare 3 unità di persistenza e ha funzionato bene. Ma ora ho bisogno di un'unità di persistenza composta e non so e non voglio costruire giare separate per ogni unità di persistenza. C'è un modo per farlo senza il tag <jar-file>. Se no, qualcuno può darmi un esempio di come creare un file jar con una singola unità di persistenza?

EDIT 1: Questa configurazione ho finito con, ma ancora non funziona - tutto quello che ottiene è questa uscita e quando provo ad usare em.createNamedQuery (strega lavoravo prima, quando avevo unità di persistenza separate) non succede niente il codice si ferma sulla linea createEntity e questo è tutto.

persistence.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="persistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <properties> 
     <property name="eclipselink.composite-unit" value="true"/> 
    </properties> 
    </persistence-unit> 
    <persistence-unit name="Minutis" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>database.entity.Entity1</class> 
    <class>database.entity.Entity2</class> 
    ... 
    <properties> 
     <property name="eclipselink.composite-unit.member" value="true"/> 
    </properties> 
    </persistence-unit> 
    <persistence-unit name="Minutis2" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>database.entity.EEntity1</class> 
    <class>database.entity.EEntity2</class> 
    ... 
    <properties> 
     <property name="eclipselink.composite-unit.member" value="true"/> 
    </properties> 
    </persistence-unit> 
    <persistence-unit name="Minutis3" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>database.entity.EEEntity1</class> 
    <class>database.entity.EEEntity2</class> 
    ... 
    <properties> 
     <property name="eclipselink.composite-unit.member" value="true"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

In questo modo si crea EntityManager:

Map minutis = new HashMap(); 
minutis.put("javax.persistence.jdbc.user", "user"); 
minutis.put("javax.persistence.jdbc.password", "password"); 
minutis.put("javax.persistence.jdbc.driver", "driver"); 
minutis.put("javax.persistence.jdbc.url", "url"); 

Map minutis2= new HashMap(); 
minutis2.put("javax.persistence.jdbc.user", "user"); 
minutis2.put("javax.persistence.jdbc.password", "password"); 
minutis2.put("javax.persistence.jdbc.driver", "driver"); 
minutis2.put("javax.persistence.jdbc.url", "url"); 

Map minutis3= new HashMap(); 
minutis3.put("javax.persistence.jdbc.user", "user"); 
minutis3.put("javax.persistence.jdbc.password", "password"); 
minutis3.put("javax.persistence.jdbc.driver", "driver"); 
minutis3.put("javax.persistence.jdbc.url", "url"); 

Map persistanceUnitsProps = new HashMap(); 
persistanceUnitsProps.put("Minutis", minutis); 
persistanceUnitsProps.put("Minutis2", minutis2); 
persistanceUnitsProps.put("Minutis3", minutis3); 

Map props = new HashMap(); 
props.put("eclipselink.logging.level", "FINEST"); 
props.put("eclipselink.composite-unit.properties", persistanceUnitsProps); 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit", props); 
em = emf.createEntityManager(); 

E qui è un'uscita che ottengo:

run: 
[EL Finest]: 2012-10-09 09:04:43.071--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--Begin predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Initial; factoryCount 0 
[EL Finest]: 2012-10-09 09:04:43.099--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--property=eclipselink.orm.throw.exceptions; default value=true 
[EL Finest]: 2012-10-09 09:04:43.116--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--End predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 0 
[EL Finer]: 2012-10-09 09:04:43.117--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--JavaSECMPInitializer - transformer is null. 
[EL Finest]: 2012-10-09 09:04:43.117--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--Begin predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 0 
[EL Finest]: 2012-10-09 09:04:43.117--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--End predeploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 1 
[EL Finest]: 2012-10-09 09:04:43.125--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--Begin deploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Predeployed; factoryCount 1 
[EL Finest]: 2012-10-09 09:04:43.128--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--property=eclipselink.logging.level; value=FINEST 
[EL Finest]: 2012-10-09 09:04:43.128--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--property=eclipselink.logging.level; value=FINEST 
[EL Info]: 2012-10-09 09:04:43.13--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504 
[EL Info]: 2012-10-09 09:04:43.138--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit login successful 
[EL Warning]: 2012-10-09 09:04:43.146--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element 
[EL Finer]: 2012-10-09 09:04:43.146--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element 
[EL Finest]: 2012-10-09 09:04:43.147--SessionBroker(2079047885)--Thread(Thread[SwingWorker-pool-1-thread-1,5,main])--End deploying Persistence Unit persistenceUnit; session file:/C:/Users/Minutis/Documents/NetBeansProjects/JavaApplication4/build/classes/_persistenceUnit; state Deployed; factoryCount 1 

EDIT 2:

Ho capito che il problema è che l'unità di persistenza non vede alcuna entità, anche se le dichiaro usando i tag di classe ... Qualche aiuto su questo?

+0

Qualsiasi aiuto su questo? – Minutis

+0

Hai scoperto come utilizzare l'unità di persistenza composita con un singolo file persistence.xml? –

risposta

0

Che errore si ottiene? O è sospeso? Se è sospeso, è necessario interromperlo e ottenere la traccia dello stack.

In generale è necessario il, che è l'unico modo per specificare le unità di persistenza figlio. Non hai bisogno che le classi siano nei file jar (anche se questa è la cosa più facile da fare), puoi semplicemente avere il file persistence.xml nel jar.

+0

Il problema è che quell'unità di persistenza composita non riconosce alcuna entità, sebbene io le dichiaro in membri di persistenza composita (anche provato in unità di persistenza composita -non funziona) usando i tag . Vedi Avviso nel messaggio di output. – Minutis

+0

Ehi, anch'io sto affrontando lo stesso problema. Hai trovato qualche soluzione? – Ketan

0

Ho lo stesso problema, con un approccio simile, ma sono bloccato al passaggio successivo. Ho risolto questo problema creando le entità in un altro progetto e poi le ho incollate nel progetto principale e infine includendo le entità nelle unità di persistenza (che ho predefinito nel persistence.xml. Sto ridefinendo i database in tempo di esecuzione). Dopo che le entità sono state riconosciute, l'unità 'le ha mescolate un po'.

Problemi correlati