2012-11-15 10 views
22

ich Glassfish 3.1.2.2 (Build 5), JPA, Eclipse, MySQLJava, JPA, Glassfish, Ungültige Ressource: jdbc/__ default__pm

Ich habe MySQL Pool über Glassfish Admin-Panel. Ping an MySQL von GF Admin Panel ist in Ordnung.

Ich habe App mit persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
<persistence-unit name="myUnit"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <properties> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/myDBName"/> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     <property name="javax.persistence.jdbc.user" value="root"/> 
     <property name="javax.persistence.jdbc.password" value="myPass"/> 
     <property name="javax.persistence.ddl-generation" value="drop-and-create-tables"/> 
    </properties> 
</persistence-unit> 

ich es einsetzen versucht und bekam den Fehler:

Invalid resource : jdbc/__default__pm 

[#|2012-11-16T02:20:59.480+0400|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=43;_ThreadName=Thread-2;|Invalid resource : jdbc/__default__pm 
java.lang.RuntimeException: Invalid resource : jdbc/__default__pm 

Stacktrace in GF Protokoll ist riesig. Gestartet von

at com.sun.enterprise.connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:540) 
at com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource(ConnectorRuntime.java:469) 
at org.glassfish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63) 
at org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71) 
.... 

Hat jemand Ideen, was passiert ist und was zu tun ist?

Antwort

22

Wenn Sie nur eine MySQL-Connection-Pool erstellt haben, müssen Sie auch eine JDBC-Ressource erstellen. Dies kann über das Kontextmenü oberhalb desjenigen erstellt werden, mit dem Sie den Verbindungspool erstellt haben.

Example Glassfish jdbc resource setup

In meinem Glassfish, mein JDBC-Ressource, jdbc/__ Standard des Verbindungspool mysql_lemon verwendet.

+11

aber, woher kommt die * __ pm <- ?? – Bernhard

2

(Der gleiche Beitrag von mir, aber mit dem richtigen Konto jetzt):

Wenn Persistenz mit Ihrem Setup zu konfigurieren, müssen Sie nur den JNDI-Name für den JDBC-Pool in persistence.xml gesetzt. Optional können Sie den Namen der Zieldatenbank festlegen.

<persistence-unit name="foo" transaction-type="JTA"> 
    <jta-data-source>jdbc/mysql</jta-data-source> 
    <!--optional--> 
    <property name="eclipselink.target-database" value="MySQL4"/> 
</persistence-unit> 

Ich ermutige auch die ‚Drop-and-create-table‘ ändern zu ‚create-Tabellen‘, so dass Sie nicht verlieren Daten zu tun, und dies sollte den Eclipse sein wird, um Eigenschaften in folgenden Weise bereitstellt:

<property name="eclipselink.ddl-generation" value="create-tables"/> 

und auch praktisch

<property name="eclipselink.ddl-generation.output-mode" value="both"/> 

das Schema und sQL-Skripte erstellen.

Für weitere Informationen besuchen Sie bitte: http://wiki.eclipse.org/EclipseLink/Examples/JPA/DDL oder http://docs.oracle.com/cd/E19798-01/821-1752/gbwmj/index.html

0

Ich hatte das gleiche Problem und ich glaube fest, dass es durch einige Rest Cache verursacht wird.

Gerade nachdem ich

asadmin remove-domain domain1 
asadmin create-domain domain1 
firefox http://localhost:4848 

Jetzt angefügt getan haben __pm nicht mehr zu JDBC-Ressourcen.

wenn dies nicht hilft, dann gehe ich davon aus, dass Sie

@PersistenceContext 
EntityManager em; 

verwenden diese mit beispielsweise ersetzt werden sollte

+0

Warum sollte ich den EntityManager selbst erstellen (und keine Annotation verwenden)? Woher hast du diesen Code? – Bernhard

+0

Wenn es für Sie funktioniert, sollten Sie Anmerkungen verwenden, aber wenn Sie gezwungen werden, einige Buggy-Version oder etwas zu verwenden, kann es hardcoding helfen – test30

1

Ich hatte das gleiche Problem, wenn ich eine App auf einem Server ausführen/bereitstellen, der vom Netbeans Instalation Wizard erstellt wurde.

Um zu lösen Ich habe die letzte Glassfish-Version von der offiziellen Website heruntergeladen und ging zu: Netbeans> "Registerkarte Service"> "Server"> "Add Server ...".

Denken Sie daran, Ihre Projektkonfigurationen zu ändern, um die neue Glassfish-Serverinstanz zu verwenden.

6

Die __nontx und __pm sind Erweiterungen des Pools. Dokumentation: https://docs.oracle.com/cd/E19798-01/821-1752/beamr/index.html (woanders http://docs.oracle.com/cd/E26576_01/doc.312/e24930/jdbc.htm#GSDVG00185 und http://docs.oracle.com/cd/E26576_01/doc.312/e24930/transaction-service.htm#GSDVG00512)

erste __pm

von https://docs.oracle.com/cd/E19798-01/821-1752/gavro/index.html

Allowing Non-Component Callers

You can allow non-Java-EE components, such as servlet filters, lifecycle modules, and third party persistence managers, to use this JDBC connection pool. The returned connection is automatically enlisted with the transaction context obtained from the transaction manager. Standard Java EE components can also use such pools. Connections obtained by non-component callers are not automatically closed at the end of a transaction by the container. They must be explicitly closed by the caller.

You can enable non-component callers in the following ways:

Check the Allow Non Component Callers box on the Edit Connection Pool Advanced Attributes page in the Administration Console. The default is false. For more information, click the Help button in the Administration Console.

Specify the ----allownoncomponentcallers option in the asadmin create-jdbc-connection-pool command. For more information, see the Oracle GlassFish Server 3.0.1 Reference Manual.

Specify the allow-non-component-callers option in the asadmin set command. For example:

asadmin set domain1.resources.jdbc-connection-pool.DerbyPool.allow-non-component-callers=true

For more information, see the Oracle GlassFish Server 3.0.1 Reference Manual.

Create a JDBC resource with a __pm suffix.

und __nontx

von https://docs.oracle.com/cd/E19798-01/821-1752/beamu/index.html

0

Ich hatte dieses Problem.Ich legte jdbc Verbindung Pool und JDBC Ressource in Admin Consol. Aber ich habe die Datenquelle nicht in persistence.xml festgelegt.

<persistence-unit name="OnlinePrintService-warPU" transaction-type="JTA"> 
    <jta-data-source>jdbc/your-name</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="javax.persistence.schema-generation.database.action" value="create"/> 
    </properties> 
    </persistence-unit> 
2

Ich hatte das gleiche Problem.

Die Lösung (für alle, die noch dieses Problem haben):

  1. , wenn Sie die NetBeans IDE 8.1 mit Glassfish 4.1.1 verwenden, rate ich Ihnen, es zu ändern 4.1
  2. Gehe zu Glassfish das linke Panel in NetBeans. Klicken Sie auf services > server > glassfish, klicken Sie dann mit der rechten Maustaste (in Glassfish Server) und wählen Sie Domain Admin Konsole anzeigen, sollte eine Webseite angezeigt werden. Gehe nach links und wähle resources > JDBC und JDBC-Verbindungspool. Fügen Sie einen neuen Verbindungspool hinzu, indem Sie auf new klicken, geben Sie den Namen Ihres Pools ein. Als nächstes wählen Sie die javax.sql.ConnectionPoolDataSource und die datadriver (in meinem Fall ist MySQL) und klicken Sie auf Weiter. Danach sollten Sie alle benötigten Informationen für Ihre Datenbank eingeben.
  3. Zurück zu Resources > JDBC. Dieses Mal erstellen JDBC-Ressourcen neue JDBC-Ressourcen (für mich habe ich sie jdbc/test genannt). Vergessen Sie nicht, es mit dem Verbindungspool zu verknüpfen, den Sie bereits erstellt haben. In NetBeans gehen Sie zu Ihrem ejb Projekt und ändern Sie die persistence.xml Datei. Ändern Sie die datasource in die Datenbankressource (in meinem Fall jdbc/test) und speichern Sie alle.

Das sollte funktionieren (y).

Verwandte Themen