<exclude-unlisted-classes>true</exclude-unlisted-classes> mag <class>package.Klasse</class> nicht

neonfly

Aktives Mitglied
Hallo zusammen!

Ich hab hier ein kleines Java EE 6 Projekt in der Startphase...

Von der Architektur her muss es möglich sein Mandanten-bezogene Daten in einer eigenen Datenbank abzulegen (für jede Firma eine). Die restlichen Daten sollen in einer globalen DB gespeichert werden.

Ich habe 2 Persistenzeinheiten erstellt, einmal die globale und einmal für die Fa. 00000.

Nun habe ich 2 Packages, einmal für die globalen Entities und einmal Firmenbezogen. Ich will natürlich nicht, dass eine globale Entity in einer Firmendatenbank landet und umgekehrt.

Hier mal die persistence.xml:
[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="Ferwo_Global_PU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>Ferwo_Global</jta-data-source>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<class>de.ssartorius.ferwo.server.model.CommonData</class>
<class>de.ssartorius.ferwo.server.model.global.User</class>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>

<persistence-unit name="Ferwo_00000_PU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>Ferwo_00000</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<!--class>de.ssartorius.ferwo.server.model.company.Company</class-->
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>

</persistence>
[/XML]

Wenn ich <exclude-unlisted-classes>false</exclude-unlisted-classes> verwende und die Klassen auskommentiere, so wie bei Fa. 00000 zu sehen ist funktioniert alles. Dann werden aber für alle Entities Tabellen in allen Datenbanken angelegt und das ist ja genau das, was ich nicht will.

Lasse ich das Ganze aber so, wie oben zu sehen ist, dann krachts. Hier mal der Stacktrace:
Code:
Schwerwiegend: DPL8015: Invalid Deployment Descriptors in Deployment descriptor file META-INF/persistence.xml in archive [classes]. 
Line 11 Column 12 -- cvc-complex-type.2.4.a: Ungültiger Content wurde beginnend mit Element "class" gefunden. "{"http://java.sun.com/xml/ns/persistence":shared-cache-mode, "http://java.sun.com/xml/ns/persistence":validation-mode, "http://java.sun.com/xml/ns/persistence":properties}" wird erwartet.
Schwerwiegend: DPL8005: Deployment Descriptor parsing failure : cvc-complex-type.2.4.a: Ungültiger Content wurde beginnend mit Element "class" gefunden. "{"http://java.sun.com/xml/ns/persistence":shared-cache-mode, "http://java.sun.com/xml/ns/persistence":validation-mode, "http://java.sun.com/xml/ns/persistence":properties}" wird erwartet.
Schwerwiegend: Exception while deploying the app
java.io.IOException: org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 12; Deployment descriptor file META-INF/persistence.xml in archive [classes].  cvc-complex-type.2.4.a: Ungültiger Content wurde beginnend mit Element "class" gefunden. "{"http://java.sun.com/xml/ns/persistence":shared-cache-mode, "http://java.sun.com/xml/ns/persistence":validation-mode, "http://java.sun.com/xml/ns/persistence":properties}" wird erwartet.
	at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:170)
	at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:79)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:612)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:554)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:262)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
	at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
	at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)
	at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
	at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
	at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:722)

Jetzt finde ich aber im Netz nicht wirklich Hilfreiches, ausser persistence.xml Konfigurationen, die das genau so machen, anscheinend scheints bei anderen zu funktionieren?
Z.B. dort: persistence.xml - javaee6examples - Java EE 6 Examples - Google Project Hosting

Dort ist ja explizit die Rede von Java EE, in meinem Java EE Buch von Dirk Weil ist aber diese Konfiguration nur für die SE angegeben!

Es scheint mit EE aber trotzdem zu funktionieren, weil wenn ich alle <class> Tags entferne/auskommentiere und exclude-unlisted-classes auf true setze, dann werden keine Tabellen erzeugt. Der Schalter wird intern also verwendet.

Ich bin da mit meinem Latein gerade am Ende, vielleicht hat von euch jemand eine Idee? Schön wäre es...

Die XML Namensräume habe ich schon geprüft, Netbeans schlägt mir auch brav und artig die class-Tags vor, sobald ich ein < tippe.

Bestimmt habe ich nur irgendwas übersehen... :reflect:

Viele Grüße,
neonfly
 

Neue Themen


Oben