OpenJPA mit einem Java-SE-Projekt benutzen

Status
Nicht offen für weitere Antworten.

silentwater

Mitglied
Hallo,

ich habe ein JPA Utility Projekt erstellt, indem die JPA Klassen verwaltet werden. Da JPA prinzipiell aus unterschiedlichen Kontexten heraus verwendet werden kann (Servlets, Session Beans, Java SE Klassen), verwaltet dieses Projekt den EntityManager nicht selber, sondern dieser wird als Parameter von der darüberliegenden Schicht übergeben.

Von einem Webprojekt oder einer Session Beans lässt sich problemlos mittels dem JPA Utility Projekt auf die Datenbank zugreifen.

Nun will ich den Zugriff noch aus einem SE Projekt heraus realisieren. Als JPA Framework verwende ich OpenJPA. Leider konnte ich kein Tutorial finden, wie ich OpenJPA in einem Java-SE projekt integrieren kann. Meine ersten Versuche endeten mit einer
java.lang.NoClassDefFoundError: org.apache.commons.collections.set.MapBackedSet
beim Aufruf der Methode
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPU");

Weiß jemand ein gutes Tutorial das beschreibt, wie man aus einem Java SE Projekt heraus JPA verwenden kann? Insebsondere ist interessant:

- Welche Bibliotheken eingebudnen werden müssen
- Werden Spezielle Parameter in der Runtime Configuration benötigt?
- Kann eine Datenbank direkt angebunden werden, oder muss das über einen Server laufen?


Als Tool verwende ich RAD oder Eclipse Ganymede.

Schon mal herzlichen Dank
 

byte

Top Contributor
OpenJPA kenne ich nicht, aber o.g. Exception lässt sich doch ohne weiteres fixen, indem Du Apache Commons Collections in den Classpath einfügst. Es ist nicht ungewöhnlich, dass JPA-Implementierungen diverse externe Libs verwenden - ist bei Hibernate genauso. Für gewöhnlich werden diese Libs mitgeliefert und müssen nur eingebunden werden.
 

silentwater

Mitglied
Vielen Dank, das hat mich schon mal sehr viel weitergebracht .....

Nun habe ich diesbezüglich aber noch ein Problem. beim Starten wird die Fehlermedlung geworfen:

<openjpa-1.2.0-SNAPSHOT-r422266:661498 fatal user error> org.apache.openjpa.persistence.ArgumentException: Es muss der Name eines JDBC-Treibers oder einer DataSource-Klasse in der Eigenschaft ConnectionDriverName angegeben werden.

Dabei habe ich den Treiber genommen, der im OpenJPA manual empfohlen wird manual

Code:
<property name="openjpa.ConnectionDriverName" value="com.ibm.db2.jcc.DB2Driver" /></properties>

ich habe die Bibliotheken, die die Treiber enthalten jedoch eingebunden. Die Treiber würden sich mittels import com.ibm.db2.jcc.DB2Driver; einbinden lassen. Trotzdem wird der Treiber aus irgendwelchen gründen nicht als ein solcher erkannt.
 
G

Guest

Gast
Lass das </properties> weg.
Übrigens, alle nötigen Libraries mit Apache Commons etc. sind im lib Verzeichnis von OpenJPA enthalten.
Wenn du OpenJPA nicht innerhalb eines Server-Containers verwedest, brauchst du noch das hier beim
Aufruf deiner Anwendung.

-javaagent:./lib/openjpa-1.1.0.jar
 

silentwater

Mitglied
Anonymous hat gesagt.:
Lass das </properties> weg.

Alle <property> Elemente sind zusammen in dem <properties> Tag. Wurde nur ausversehen hier mit hereinkopiert.

Anonymous hat gesagt.:
Übrigens, alle nötigen Libraries mit Apache Commons etc. sind im lib Verzeichnis von OpenJPA enthalten.
Wenn du OpenJPA nicht innerhalb eines Server-Containers verwedest, brauchst du noch das hier beim
Aufruf deiner Anwendung.

-javaagent:./lib/openjpa-1.1.0.jar

Leider hat dies nicht das Problem geändert, die Fehlermeldung ist nach wie vor die gleiche.
Exception in thread "main" <openjpa-1.1.0-r422266:657916 fatal user error> org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.

In den Zeilen vor dem Fehler steht
31 WARN [main] openjpa.Runtime - The configuration property named "openjpa.Id" was not recognized and will be ignored, although the name closely matches a valid property called "openjpa.Id".
93 INFO [main] openjpa.Runtime - Starting OpenJPA 1.1.0
[/quote]
 
G

Guest

Gast
Vielleicht irgendwo ein fehlendes schliessendes / oder sowas. Lass mal den Validator für XML laufen.

Hast du wirklich die richtige Jar-Datei mit dem JDBC-Treiber eingebunden?
Prüfe auch die Schreibweise: com.ibm.db2.jcc.DB2Driver oder COM.ibm.db2.jcc.DB2Driver etc.

Versuche die Klasse in einem kleinen Test mit
Code:
Class.forName("com.ibm.db2.jcc.DB2Driver");
zu laden.
Mit DB2 habe ich bisher nichts zu tun gehabt, aber der Test sollte zeigen, ob die Klasse auch geladen
werden kann. Vielleicht kann die Klasse des Treibers nicht geladen werden, weil noch irgendwelche
zusätzlichen Jar-Dateien bzw. Klassen in Classpath fehlen? Die
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JPA Hibernate Search & EclipseLink (oder OpenJPA) Data Tier 0
Y [openJPA] Problem mit Transaktion? Data Tier 2
N Spring / OpenJPA Inheritance: Subklassen werden nicht erkannt Data Tier 4
T Problem mit openJPA Data Tier 7
J JPA - Zeilen in einem festen Intervall laden. Data Tier 4
R Ein Objekt mit einem String aus einem Set laden Data Tier 2
GilbertGrape Probleme mit einem Query (left join) Data Tier 2
L JSP Mit Java-Daten von einer Webseite zu ziehen? Data Tier 5
E Wie kann ich über einen Suchfeld in Java Server Pages nach Datenbankinhalten suchen? Data Tier 1
Kenan89 9.2-1000 JDBC 4 nicht für Java EE ? Data Tier 3
M Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message Data Tier 4
M JPA Problem: java.sql.SQLSyntaxErrorException: Data Tier 7
I JPA EntityManager und persist() (Java EE 6) Data Tier 5
M JSF java.sql.SQLIntegrityConstraintViolationException nach zweitem persist Data Tier 6
S Datenbanktool für JAVA DB. Data Tier 10
C [Hibernate] Generierung von hbm.xml to Java Data Tier 4
H Java EE 5 + Glassfish 3 + Hibernate: Wie geht das genau? Data Tier 2
P Java und HSQL verbindung herstellen Data Tier 18
J MappingException:Could not determine type for: java.util.Set Data Tier 5
byte Preload Pattern aus Java Magazin 4/08 fehlerhaft Data Tier 9
N java.sql.SQLException: Error in allocating a connection. Cau Data Tier 5
V [Hibernate] java.lang.NoClassDefFoundError Data Tier 6

Ähnliche Java Themen

Neue Themen


Oben