Question

Environnement: Windows 7, NetBean 6.9 (y compris celui GlassFish v3, Java EE 6), serveur MySQL

J'ai créé des tables dans la base de données MySQL et en utilisant la capacité de NetBean par un clic droit sur le projet et choisissez « create entity from database » (Désolé si le libellé est erroné parce que mon NetBean est en japonais)

Cela va créer des entités.

Maintenant, je suis allé à tester si je peux accéder à DB par l'entité gestionnaire.

Tmp.java

package local.test.tmp;
import Resources.Users;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import java.util.List;
/**
 *
 * @author m-t
 */
public class Tmp {

    private static EntityManagerFactory factory;
    private static final String WEB_PU = "WebApplication1PU";

    public static void main(String args[]) {
        factory = Persistence.createEntityManagerFactory(WEB_PU);
        EntityManager em = factory.createEntityManager();
        //read existing entries and write to concole
        Query q = em.createQuery("select * from users");

        List<Users> userList = q.getResultList();
        for(Users u : userList) {
            System.out.println(u);
        } 
    }
}

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">
  <!--   orignal
  <persistence-unit name="WebApplication1PU" transaction-type="JTA">
    <jta-data-source>masatoJNDI</jta-data-source>
    <properties/>
  </persistence-unit>
  -->

  <persistence-unit name="WebApplication1PU" transaction-type="JTA">
    <jta-data-source>masatoJNDI</jta-data-source>
    <properties>
        <property name="toplink.jdbc.user" value="masato" />
        <property name="toplink.jdbc.password" value="foobar" />
    </properties>
  </persistence-unit>
</persistence>

Quand je lance Tmp.java, je peux le voir échoue à:

factory = Persistence.createEntityManagerFactory(WEB_PU);

Message d'erreur:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence 
provider for EntityManager named WebApplication1PU
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at local.test.tmp.Tmp.main(Tmp.java:24)

J'ai vérifié l'orthographe de l'unité de persistance « WebApplication1PU » dans les matches de code de test avec avec persistence.xml et il est correct.

persistence.xml est situé ... il est en japonais, je ne sais pas comment en anglais: (

Je vais essayer ..

project
 |-------web page
 |-------test package
 |-------lib
 |-------enterprise bean
 |-------*** file  //blah file, I can't translate..
               |-----MNIFEST.MF
               |-----faces-cofig.xml
               |-----persistence.xml  //HERE!!

Depuis l'échec est au début où l'usine tente de localiser la persistance unité persistence.xml, je suis totalement confus. Est-ce que je devrais vérifieront?

S'il vous plaît laissez-moi savoir si vous avez besoin plus de précisions.

UPDATE

J'ai essayé les solutions proposées possibles, mais pas de chance .. Même message d'erreur est renvoyée. Oui, NetBean 6.9 fournisseur par défaut est TopLink.

Qu'est-ce que je l'ai fait:

fournisseur Ajouté à 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="NoJSFPU" transaction-type="JTA">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <jta-data-source>masatoJNDI</jta-data-source>

    <properties>
        <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/mytest"/>
        <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="toplink.jdbc.user" value="masato" />
        <property name="toplink.jdbc.password" value="mocha123" />
    </properties>
  </persistence-unit>
</persistence>

On dirait que la plupart des gens sont le succès avec ma situation. Je suis en train de commencer à penser qu'il peut y avoir problème avec la façon dont je lance le fichier de test ou si le fichier se trouve?

Tmp.java que j'exécute à partir de NetBean est situé à:

project
|------web page
|------source package
|          |-----------local.test.session
           |-----------local.test.tmp
                           |------------------Tmp.java //HERE

Je ne sais pas si cela importe bien.

MISE À JOUR 2

J'ai ajouté TopLink lib contenant TopLink-essential.jar et TopLink essentiels-agent.jar dans le répertoire lib de mon projet et maintenant je deviens nouvelle erreur sur le dessus d'un original, mais je crois que je reçois plus.

On dirait attribut de version dans persistence.xml a un problème ... ???

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named WebApplication1PU: Provider named oracle.toplink.essentials.PersistenceProvider threw unexpected exception at create EntityManagerFactory: 
oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException
Local Exception Stack: 
Exception [TOPLINK-30005] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: sun.misc.Launcher$AppClassLoader@f6a746
Internal Exception: Exception [TOPLINK-30004] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while processing persistence.xml from URL: file:/C:/Users/m-takayashiki/Documents/NetBeansProjects/NoJSF/build/web/WEB-INF/classes/
Internal Exception: 
(1. cvc-complex-type.3.1: Value '2.0' of attribute 'version' of element 'persistence' is not valid with respect to the corresponding attribute use. Attribute 'version' has a fixed value of '1.0'.)
        at oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:143)
        at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:169)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
        at local.test.tmp.Tmp.main(Tmp.java:24)

Mettre à Jour 3

Après quelques recherches, trouver des besoins numéro de version à 1.0 conforme à moi aussi appliqué le correctif et a obtenu une nouvelle erreur.

 <?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
  <persistence-unit name="NoJSFPU" transaction-type="JTA">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <jta-data-source>masatoJNDI</jta-data-source>
    <class>local.test.session.Addresses</class>
    <class>local.test.session.Users</class>
    <properties>
        <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/mytest"/>
        <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="toplink.jdbc.user" value="masato" />
        <property name="toplink.jdbc.password" value="mocha123" />
    </properties>
  </persistence-unit>
</persistence>

Il est bizarre parce que je classe déjà fait dans persistence.xml ci-dessus: (

Exception in thread "main" javax.persistence.PersistenceException: Exception [TOPLINK-7060]
 (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException
Exception Description: Cannot acquire data source [masatoJNDI].
Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in
 environment or system property, or as an applet parameter, or in an application resource 
file:  java.naming.factory.initial

UPDATE 4

Je ne pense pas que ce qu'on appelle « résolu », mais après une longue tentative, j'ai décidé de courir juste mon code de test dans l'application Web au lieu de courir individuellement à partir NetBean. Je devais créer web.xml moi-même depuis GlassFish ne fournit pas. (Je vois le soleil web.xml mais ce ne fut pas la substitution) servlet a ensuite créé, définir la cartographie dans le web.xml et ajouté mon code de test extrait au servlet et essayé sur le navigateur. Il a travaillé, avec succès les données obtenues à partir de la base de données.

Je me demande quelle est la raison pour laquelle il ne fonctionnait pas lorsque je tente courir juste le Tmp.java (mon fichier test) à partir Netbean ...

Était-ce utile?

La solution

Je pense que vous devrez peut-être préciser votre fournisseur de persistance. Voir .

Par exemple:

<provider>org.hibernate.ejb.HibernatePersistence</provider>

ou

<provider>oracle.toplink.essentials.PersistenceProvider</provider>

Votre « original » la persistance unité repose sur le serveur pour fil dans les détails comme le fournisseur, mais lorsque vous l'exécutez en dehors du contexte du serveur, vous devez spécifier quelques choses -. L'un d'entre eux étant le fournisseur

Voir .

Autres conseils

S'il vous plaît spécifier le <provider> pour votre <persistence-unit>:

<!-- EclipseLink -->
<provider>
  org.eclipse.persistence.jpa.PersistenceProvider
</provider>

<!-- Hibernate -->
<provider>
  org.hibernate.ejb.HibernatePersistence
</provider>

<!-- Toplink -->
<provider>
 oracle.toplink.essentials.PersistenceProvider
</provider>

Et ton nom de persistence-unit est correct et le chemin de fichier est également dans le chemin de contexte.

Je suppose que le problème est cette ligne:

<jta-data-source>masatoJNDI</jta-data-source>

qui, à moins que vous utilisez dans un contexte permis JNDI provoquera le type d'erreur que vous avez initialement vu. Essayez de créer un fichier persistence.xml dans votre test / ressources dossier et la suppression de cette ligne dans la version de test du fichier xml.

Je pense que vous devrez peut-être ajouter un contexte JNDI, vous devez créer un fichier jndi.properties dans votre bocal et ajouter le contenu ci-dessous en elle.

java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top