Java JPA-Klasse für MATLAB

7

Ich verwende MATLAB R2007b, Java 1.6 SE, Eclipse Helios und MySql 5 unter Windows XP Pro SP3.

Ich versuche, eine Klassenbibliothek zu erstellen, die JPA-Anmerkungen verwendet, um auf eine MySql 5-Datenbank zuzugreifen. Die Idee ist, dass das MATLAB-Skript diese Java-Objekte instanziiert, die eine API für den Zugriff auf die DB bereitstellen.

Ich kann meine annotierten Klassen erstellen, die innerhalb von Eclipse funktionieren (d. h. JUnit-Test). Ich kann den Code in ein Jar exportieren, das ich von einer Eingabeaufforderung ausführen kann.

Ich aktualisiere den MATLAB Java-Klassenpfad mit javaaddpath (). Ich kann meine Klasse in MATLAB instanziieren. Aber wenn ich meine init (), die javax.persistence.Persistence.createEntityManagerFactory () aufruft, aufrufen, bekomme ich das gefürchtete

"Kein Persistenzanbieter für EntityManager"

Dieser Fehler bedeutet normalerweise, dass die Datei persistence.xml nicht an der richtigen Stelle ist. Aber es muss sein, weil mein Jar von der Kommandozeile aus funktioniert. Das Hinzufügen des META-INF-Ordners zum MATLAB-Java-Klassenpfad hilft nicht. Es wird auch weder das JAR-Objekt extrahiert noch die extrahierte Ordnerstruktur dem Klassenpfad hinzugefügt, unabhängig davon, ob META-INF hinzugefügt wird.

Hat jemand irgendwelche Ideen, verrückt oder nicht? Hat jemand das jemals in irgendeiner Version von MATLAB getan.

Danke.

-Reilly

    
Reilly 07.12.2010, 12:27
quelle

5 Antworten

8

Nun, ich habe "eine Antwort" gefunden. Irgendwo bevor ich einen Beitrag über den Unterschied in den "dynamischen" und "statischen" MATLAB-CPs gesehen habe. Das "statische" cp ist eine Textdatei, die beim Start geladen wird. Das "dynamische" cp wird zur Laufzeit geladen und Sie manipulieren es normalerweise mit M-Skriptaufrufen. Das habe ich versucht zu tun.

Also habe ich meine Gläser dem dynamischen Pfad hinzugefügt und es hat nicht funktioniert.

Ich habe sie am Ende des statischen Pfades hinzugefügt und verschiedene Fehler bekommen, die mit dem XML-Parsing zusammenhängen. Fortschritt!

Dann habe ich meine Gläser zum Anfang des statischen Pfades hinzugefügt und es funktioniert.

Um Bart Simpson zu zitieren: Craptackular.

Danke für all eure Ideen. Fragen Sie mich eine C # -Frage, damit ich erwidern kann ...

-Reilly

    
Reilly 07.12.2010 18:36
quelle
8

Bei der Arbeit mit Java in MATLAB stieß ich häufig auf Probleme mit dem dynamischen Klassenpfad . Zur Behebung dieses Problems hat die Verwendung von classpath.txt bisher jedes Problem behoben.

Der Umgang mit verschiedenen Umgebungen, zum Beispiel Testen und Produzieren, führt zu mehreren classpath.txt -Dateien in Ihrem MATLAB-Startverzeichnis. Die Verwendung verschiedener MATLAB-Versionen fügt der Anzahl der classpath.txt -Dateien einen weiteren Multiplikator hinzu.

ClassPathHacker.java ist eine Option zum Hinzufügen von < em> dynamisch Klassen und JAR-Dateien in Ihren statischen Klassenpfad. Bei diesem Ansatz muss classpath.txt nicht mehr berührt werden. Ihre Java-Klassenpfadkonfiguration kann am gewünschten Ort startup.m bleiben.

    
zellus 07.12.2010 19:08
quelle
3

Dies ist nur eine Fortsetzung Ihrer Antwort zu statischen und dynamischen Klassenpfaden. Hier ist eine Funktion, mit der Sie diagnostizieren können, wo eine Java-Klasse aus Matlab geladen wird, und ob es eine Maskierung der Klassendefinitionen gibt. Sie könnten andere Kollisionen sehen; zumindest dom4j.jar und commons-collections.jar werden mit Matlab ausgeliefert, aber ich weiß nicht welche Versionen.

%Vor%     
Andrew Janke 07.12.2010 19:10
quelle
2

Stellen Sie sicher, dass auf Ihrem Klassenpfad ein JPA-Provider-Jar (z. B. eclipselink.jar) vorhanden ist.

    
James 07.12.2010 13:45
quelle
0

Sind Sie absolut sicher, dass Sie den Namen der Persistenzeinheit im Aufruf korrekt geschrieben haben:

%Vor%

Das würde Ihnen auch den gleichen Fehler geben. Der Name unterscheidet zwischen Groß- und Kleinschreibung.

    
Jim Tough 07.12.2010 12:41
quelle

Tags und Links