2012-10-08 8 views
8

Moje pytanie jest niemal odpowiedział w tym wątku:EclipseLink jednostki kompozyt Trwałość na różnych serwerach bez <jar-file>

EclipseLink, EntityManager with two persistence units needed

Ale używałem jeden plik persistence.xml zadeklarować 3 jednostki utrwalania i to działało dobrze. Ale teraz potrzebuję złożonej jednostki wytrwałości i nie wiem i nie chcę budować oddzielnych słoików dla każdej jednostki utrwalania. Czy jest jakiś sposób, aby to zrobić bez tagu <jar-file>. Jeśli nie, czy ktoś może podać przykład tworzenia pliku jar za pomocą pojedynczej jednostki trwałości?

EDIT 1: Ta konfiguracja skończyło się, ale nadal nie działa - wszystko co dostaje jest to wyjście, a gdy próbuję użyć em.createNamedQuery (czarownica pracował wcześniej, kiedy miałem oddzielne jednostki utrwalania) nic się nie dzieje, kod zatrzymuje się na linii createEntity i to jest to.

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> 

W ten sposób tworzony jest 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(); 

I tu jest wyjście, które mam:

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:

Doszedłem do wniosku, że problem polega na tym, że jednostka wytrwałości nie widzi żadnych obiektów, chociaż deklaruję je przy użyciu znaczników klasy ... Czy jest jakaś pomoc?

+0

Każda pomoc w tej sprawie? – Minutis

+0

Czy dowiedziałeś się, jak utworzyć złożoną jednostkę utrwalania za pomocą pojedynczego pliku persistence.xml? –

Odpowiedz

0

Jakiego błędu dostałeś? Czy to wisi? Jeśli jest zawieszony, musisz go złamać i uzyskać ślad stosu.

Zasadniczo potrzebujesz, to jedyny sposób na określenie jednostek trwałości podrzędnej. Nie ma potrzeby, aby klasy znajdowały się w plikach jar (chociaż jest to najłatwiejsza rzecz), wystarczy mieć plik persistence.xml w słoiku.

+0

Problem polega na tym, że ta zespolona jednostka utrwalania nie rozpoznaje żadnych elementów, chociaż deklaruję je w złożonych elementach trwałości (również wypróbowane w zespole trwałości złożonej - nie działają) przy użyciu tagów . Zobacz Ostrzeżenie w komunikacie wyjściowym. – Minutis

+0

Hej, ja też mam do czynienia z tym samym problemem. Znalazłeś jakieś rozwiązanie? – Ketan

0

Mam podobny problem, z podobnym podejściem, ale utknąłem w następnym kroku. Rozwiązałem to, tworząc jednostki w innych projektach, a następnie wklejając je do głównego projektu i ostatecznie włączając podmioty w jednostki persistance (które wstępnie zdefiniowałem w pliku persistence.xml. Redefiniuję bazy danych w czasie wykonywania). Następnie jednostki zostały rozpoznane, ale jednostka trochę ich "pomieszała".

Powiązane problemy