Frage

Umwelt: Windows 7, NetBean 6.9 (die mit Glassfish v3, Java EE 6), MySQL-Server

Ich habe Tabellen in MySQL-Datenbank erstellt und NetBean die Fähigkeit durch Rechtsklick auf das Projekt mit und wählen Sie „create entity from database“ (Sorry, wenn die Formulierung ist falsch, weil mein NetBean in Japanisch)

Dies wird Entities erstellen.

ging nun ich zu testen, ob ich DB über Entity Manager zugreifen kann.

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>

Wenn ich laufen Tmp.java, ich kann es nicht sieht unter:

factory = Persistence.createEntityManagerFactory(WEB_PU);

Fehler msg:

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)

Ich habe die Rechtschreibung Persistenzeinheit „WebApplication1PU“ in Testcode Matches mit mit persistence.xml geprüft und es ist richtig.

persistence.xml liegt ... es ist in der japanischen ich weiß nicht, wie in Englisch: (

Lassen Sie mich versuchen ..

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

Da der Fehler am Anfang ist, wo die Fabrik versucht Persistenzeinheit in persistence.xml ausfindig zu machen, ich bin total verwirrt. Gibt es etwas, muss ich überprüfen, werden?

Bitte lassen Sie mich wissen, wenn Sie mehr Klärungsbedarf.

UPDATE

Ich habe versucht, vorgeschlagen mögliche Lösungen aber kein Glück .. Same Fehlermeldung zurückgegeben wird. Ja, NetBean 6.9 Standardanbieter ist toplink.

Was ich getan habe:

hinzugefügt Anbieter 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>

Es scheint, wie die meisten Menschen zu sein Erfolg mit meiner Situation. Ich bin jetzt anfangen, es kann Problem mit, wie ich die Test-Datei ausführen oder wo sich die Datei befindet?

Tmp.java, dass ich von NetBean ausführt befindet sich unter:

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

Ich bin mir nicht sicher, ob es allerdings wichtig ist.

UPDATE 2

Ich habe hinzugefügt toplink lib enthalten toplink-essential.jar und toplink-essential-agent.jar in das lib Verzeichnis von meinem Projekt und jetzt neue Fehler ich bin immer auf dem ursprünglichen, aber ich glaube, ich bin immer näher.

Sieht aus wie Versionsattribut in persistence.xml hat ein Problem ... ???

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)

UPDATE 3

Nach einigen Recherchen, die Versionsnummer Bedürfnisse finden sich als 1.0 kompatibel, so habe ich das Update angewendet und bekam neue Fehler.

 <?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>

Es ist komisch, weil ich schon angegebene Klasse in persistence.xml oben: (

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

Ich glaube nicht, das heißt „gelöst“, aber nach langen Versuch, ich beschloß, nur meinen Testcode in der Web-Anwendung ausführen, anstatt individuell von NetBean laufen. Ich hatte web.xml selbst zu schaffen, da es Glassfish bietet keine. (Ich sehe sun-web.xml, aber es war nicht die Substitution) Dann Servlet erstellt, definieren Zuordnung in der web.xml und mein Test-Code-Snippet zum Servlet hinzugefügt und versuchte, sich auf den Browser. Es funktionierte, erfolgreich erhalten Daten aus der Datenbank.

Ich frage mich, was ist der Grund, warum es nicht funktioniert, wenn ich laufe nur versuchen, die Tmp.java (mein Test-Datei) von NetBean ...

War es hilfreich?

Lösung

ich glaube, Sie brauchen, um Ihre Persistenz-Provider angeben. Siehe hier .

Zum Beispiel:

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

oder

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

Ihre „original“ Persistenzeinheit verlässt sich auf dem Server Draht in Details wie der Anbieter, aber wenn Sie es außerhalb des Servers Kontext ausführen müssen Sie ein paar Dinge spezifizieren -. Einer von ihnen der Anbieter sein

finden Sie unter href="https://stackoverflow.com/questions/1158159/no-persistence-provider-for-entitymanager-named">.

Andere Tipps

Bitte geben Sie den <provider> für Ihre <persistence-unit>:

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

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

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

Und machen Sie Ihren persistence-unit Name korrekt und Dateipfad ist auch in richtigen Kontext Pfad.

Ich stelle mir vor, das Problem ist diese Zeile:

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

, das, wenn Sie in einem JNDI-fähigen Kontext ausführen wird die Art des Fehlers führt, dass Sie zunächst Säge. Versuchen Sie die Schaffung einer persistence.xml Datei in Ihrem Test / Ressourcen-Ordner und entfernen Sie diese Zeile in der Testversion der XML-Datei.

Ich denke, man kann einen jndi Kontext hinzufügen müssen, sollten Sie eine jndi.properties Datei in Ihrem Glas erstellen, und fügen Sie den folgenden Inhalt haben.

java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
scroll top