2012-11-02 5 views
2

Après avoir exporté le fichier jar du projet vers le serveur de fichiers, la création du gestionnaire d'entités de jpa ne fonctionne plus.JPA avec EclipseLink et Java SE

Il y a les détails suivants:

  1. -je utiliser EclipseLink de glassfishv3 Projet
  2. J'ai téléchargé EclipseLink 2.4 ... à partir du site.
  3. org.eclipse.persistence.core.jar, org.eclipse.persistence.jpa.jar, javax.persistence.jar et eclipselink.jar se trouvent dans le dossier lib.
  4. persistence.xml se trouve dans le dossier META-INF à l'intérieur de src. (J'utiliser Eclipse helios)
  5. c'est le contenu du persistence.xml

    <?xml version="1.0" encoding="UTF-8"?> 
    <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" 
        version="2.0" 
        xmlns="http://java.sun.com/xml/ns/persistence"> 
        <persistence-unit name="QIS" transaction-type="RESOURCE_LOCAL" > 
         <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
         <class>com.quoka.qis.lib.persistence.Type</class> 
        </persistence-unit> 
    </persistence> 
    

L'ensemble fonctionne à l'intérieur éclipse, mais pas du serveur de fichiers. :-)

message d'erreur:

org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLException 
    URI was not reported to parser for entity [document]) 
Caused By: 
Log Exception of type org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLException : 
(1. URI was not reported to parser for entity [document]) 
(0) org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLExceptionHandler.error(XMLExceptionHandler.java:28) 
(1) org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLExceptionHandler.warning(XMLExceptionHandler.java:23) 
(2) gnu.xml.aelfred2.SAXDriver.warn(SAXDriver.java:935) 
(3) gnu.xml.aelfred2.SAXDriver.startExternalEntity(SAXDriver.java:631) 
(4) gnu.xml.aelfred2.XmlParser.pushURL(XmlParser.java:3358) 
(5) gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:159) 
(6) gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320) 
(7) gnu.xml.aelfred2.XmlReader.parse(XmlReader.java:294) 
(8) org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceXML(PersistenceUnitProcessor.java:442) 
(9) org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceArchive(PersistenceUnitProcessor.java:401) 
(10) org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.getPersistenceUnits(PersistenceUnitProcessor.java:310) 
(11) org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfoInArchive(JPAInitializer.java:149) 
(12) org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfoInArchives(JPAInitializer.java:136) 
(13) org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfo(JPAInitializer.java:125) 
(14) org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:98) 
(15) org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:65) 
(16) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78) 
(17) com.quoka.qis.admin.QisAdminEntityManager.getInstance(QisAdminEntityManager.java:33) 
(18) com.quoka.qis.admin.QisAdminFrame.login(QisAdminFrame.java:574) 
(19) com.quoka.qis.admin.QisAdminFrame.testLogin(QisAdminFrame.java:513) 
(20) com.quoka.qis.admin.QisAdminFrame.showFrame(QisAdminFrame.java:441) 
(21) com.quoka.qis.admin.QisAdminFrame.showFrame(QisAdminFrame.java:417) 
(22) com.quoka.qis.admin.QisAdminFrame.access$3(QisAdminFrame.java:416) 
(23) com.quoka.qis.admin.QisAdminFrame$DebugPanel.run(QisAdminFrame.java:777) 
(24) java.lang.Thread.run(Thread.java:662) 

DBConnection est:

Map<String, String> properties = new HashMap<String, String>(); 
properties.put("javax.persistence.jdbc.driver", "com.sybase.jdbc3.jdbc.SybDriver"); 
properties.put("eclipselink.target-database", "Sybase"); 
properties.put("javax.persistence.jdbc.url", "jdbc:sybase:Tds:"+meta.getServerName()+":"+meta.getPort()); 
properties.put("javax.persistence.jdbc.user", meta.getUserName()); 
properties.put("javax.persistence.jdbc.password", meta.getPassword()); 
properties.put("eclipselink.logging.level", "INFO"); 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("QIS", properties); 
em = emf.createEntityManager(); 
+0

Y a-t-il une trace de pile à l'erreur? Le XMLException est juste envelopper la cause sous-jacente, donc il devrait y avoir une trace de pile d'exception interne qui pourrait aider à pointer vers le problème – Chris

+0

J'ai ajouté la trace de la pile complète. S'il vous plaît voir ci-dessus. –

+0

Vous n'êtes pas sûr du message d'erreur, mais vous n'avez pas spécifié les informations de connexion à la base de données ... http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Configuration/JPA/persistence.xml – Puce

Répondre

1

Le fichier persistence.xml est bien formé si l'erreur pourrait être liée à un analyseur SAX mal appelé à la suite d'un chemin de classe foiré. Mon conseil est de revoir attentivement le classpath de votre application, en particulier en vérifiant si les fichiers jar contiennent des parsers SAX dupliqués et incompatibles.

+0

oui vous où droit. J'ai mélangé Glassfishv3 et Glassfish3.1. –

0

En supposant que votre phrase « Après avoir exporté le fichier jar de projet au serveur de fichiers » signifie que vous avez déployé votre projet en Glassfish, la réponse à votre question est la suivante:

Votre problème est que vous créez un EntityManager dont le type de transaction est "resource-local" pour une application que vous avez déployée dans glassfish. Votre application - une fois déployée dans n'importe quel serveur d'application comme GlassFish - est en fait gérée par le conteneur et c'est une application EE non SE. Le EntityManager à gérer par le conteneur doit avoir un type de transaction JTA.

Suivez ces étapes ou consultez this Link ou consultez this Link pour configurer votre type de transaction JTA:

  1. Copiez votre pot de pilote Sybase dans le dossier: .. \ GlassFish \ domaines \ domain1 \ lib
  2. Ouvrez la console d'administration GlassFish
  3. Ressources -> JDBC -> JDBC pools de connexion
  4. bouton poussoir nouveau
  5. nom de la piscine *: SybasePoolOfHasan
  6. Type Sauter ressource pour l'instant
  7. Base de données du fournisseur de pilote: Sybase
  8. Appuyez sur le bouton Suivant
  9. DataSource nom de classe: com.sybase.jdbc3.jdbc.SybDriver
  10. Ajoutez les propriétés suivantes:

    URL = jdbc: sybase: Tds: "tapez votre ServerName": "tapez votre port"

    utilisateur = taper

    Mot de passe = taper

  11. Poussez Terminer
  12. Poussez Ping -> Ping réussit
  13. Open Resources -> JDBC -> Ressources JDBC
  14. JNDI Nom *: HasanSybaseJNDI
  15. Piscine Nom: SybasePoolOfHasan
  16. Appuyez sur OK

    Retour à votre persistence.xml, modifier comme suit:

    nom persistence-unit = "QIS" transaction- type = "JTA"

    JTA-data-source> HasanSybaseJNDI

    Redéployer et vous définissez.

    Bien que vous deviez modifier votre code pour perdre toute manipulation de transaction. Ce qui signifie que les 2 lignes suivantes ne sont plus nécessaires dans votre code:

    em.getTransaction(). Begin(); em.getTransaction(). Commit();

    Le serveur d'application Glassfish gère les transactions pour vous!

Questions connexes