web-dev-qa-db-fra.com

Java, JPA, Glassfish, ressource non valide: jdbc / __ default__pm

J'utilise Glassfish 3.1.2.2 (build 5), JPA, EclipseLink, MySQL

J'ai créé le pool MySQL via le panneau d'administration de Glassfish. Ping vers MySQL depuis GF est ok.

J'ai créé une application avec 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>

J'ai essayé de le déployer et j'ai eu l'erreur:

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 dans GF est énorme. Commencé par

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)
....

Quelqu'un at-il des idées sur ce qui s'est passé et que faire?

26
Victor Mezrin

Si vous avez uniquement créé un pool de connexions MySQL, vous devez également créer une ressource JDBC. Cela peut être créé à partir du menu contextuel au-dessus de celui que vous avez utilisé pour créer le pool de connexions.

Example Glassfish jdbc resource setup

Dans mon Glassfish, ma ressource JDBC, jdbc/__ default utilise le pool de connexion mysql_lemon.

24
Kevin

__nontx et __pm sont des extensions du pool. documentation: https://docs.Oracle.com/cd/E19798-01/821-1752/beamr/index.html (ailleurs http://docs.Oracle.com /cd/E26576_01/doc.312/e24930/jdbc.htm#GSDVG00185 et http://docs.Oracle.com/cd/E26576_01/doc.312/e24930/transaction-service.htm# GSDVG00512 )

premier __ pm

de https://docs.Oracle.com/cd/E19798-01/821-1752/gavro/index.html

Autoriser les appelants non composants

Vous pouvez autoriser les composants non Java-EE, tels que les filtres de servlet, les modules de cycle de vie et les gestionnaires de persistance tiers, à utiliser ce pool de connexions JDBC. La connexion renvoyée est automatiquement enregistrée avec le contexte de transaction obtenu auprès du gestionnaire de transactions. Standard Java EE peuvent également utiliser ces pools. Les connexions obtenues par les appelants non-composants ne sont pas automatiquement fermées à la fin d'une transaction par le conteneur. Elles doivent être explicitement fermées par l'appelant.

Vous pouvez activer les appelants non-composants des manières suivantes:

Cochez la case Autoriser les appelants non composants sur la page Modifier les attributs avancés du pool de connexions dans la console d'administration. Le défaut est faux. Pour plus d'informations, cliquez sur le bouton Aide dans la console d'administration.

Spécifiez l'option ---- allownoncomponentcallers dans la commande asadmin create-jdbc-connection-pool. Pour plus d'informations, reportez-vous au manuel Oracle GlassFish Server 3.0.1 Reference Manual.

Spécifiez l'option allow-non-component-callers dans la commande asadmin set. Par exemple:

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

Pour plus d'informations, reportez-vous au manuel Oracle GlassFish Server 3.0.1 Reference Manual.

Créez une ressource JDBC avec un suffixe __pm.

et __ nontx

de https://docs.Oracle.com/cd/E19798-01/821-1752/beamu/index.html

Utilisation de connexions non transactionnelles

Vous pouvez spécifier une connexion à une base de données non transactionnelle de l'une des manières suivantes:

Cochez la case Connexions non transactionnelles sur la page Nouveau pool de connexions JDBC ou Modifier le pool de connexions dans la console d'administration. La valeur par défaut n'est pas cochée. Pour plus d'informations, cliquez sur le bouton Aide dans la console d'administration.

Spécifiez l'option ---- nontransactionalconnections dans la commande asadmin create-jdbc-connection-pool. Pour plus d'informations, reportez-vous au manuel Oracle GlassFish Server 3.0.1 Reference Manual.

Spécifiez l'option non-transactional-connections dans la commande asadmin set. Par exemple:

asadmin set domain1.resources.jdbc-connection-pool.DerbyPool.non-transactional-connections = true

Pour plus d'informations, reportez-vous au manuel Oracle GlassFish Server 3.0.1 Reference Manual.

Utilisez l'implémentation DataSource dans le serveur GlassFish, qui fournit une méthode getNonTxConnection. Cette méthode récupère une connexion JDBC qui ne fait partie d'aucune transaction. Il existe deux variantes.

public Java.sql.Connection getNonTxConnection () lève Java.sql.SQLException

public Java.sql.Connection getNonTxConnection (utilisateur String, mot de passe String) lève Java.sql.SQLException

Créez une ressource avec le nom JNDI se terminant par __nontx. Cela force toutes les connexions recherchées à l'aide de cette ressource à être non transactionnelles.

6
Bernhard

(Le même poste que moi mais avec un compte approprié maintenant):

Lors de la configuration de la persistance avec votre installation, vous définissez uniquement le nom JNDI du pool JDBC dans persistence.xml. Facultatif, vous pouvez définir le nom de la base de données cible.

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

J'encourage également à changer le "drop-and-create-table" en "create-tables", afin que vous ne perdiez pas de données, et cela devrait fournir les propriétés d'EclipseLink de la manière suivante:

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

et aussi pratique

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

qui va créer des schémas et des scripts sql.

Pour plus d'informations, visitez: http://wiki.Eclipse.org/EclipseLink/Examples/JPA/DDL ou http://docs.Oracle.com/cd/E19798-01/ 821-1752/gbwmj/index.html

4
Pawel Solarski

J'ai eu le même problème.

La solution (pour tous ceux qui ont toujours ce problème):

  1. si vous utilisez les NetBeans IDE 8.1 avec Glassfish 4.1.1, je vous conseille de le changer en Glassfish 4.1
  2. Accédez au panneau de gauche dans NetBeans. Cliquer sur services > server > glassfish puis faites un clic droit (dans le serveur Glassfish) et choisissez afficher la console d'administration du domaine, une page Web devrait apparaître. Allez à gauche et choisissez resources > JDBC et pool de connexions JDBC. Ajoutez un nouveau pool de connexions en cliquant sur new, saisissez le nom de votre pool. Ensuite, choisissez le javax.sql.ConnectionPoolDataSource et le datadriver (dans mon cas est MySQL) et cliquez sur suivant. Après cela, vous devez entrer toutes les informations nécessaires pour votre base de données.
  3. Revenir à Resources > JDBC. Cette fois, les ressources JDBC créent une nouvelle ressource JDBC (pour moi, je l'ai nommée jdbc/test). N'oubliez pas de le lier au pool de connexions que vous avez déjà créé.
  4. Dans NetBeans, accédez à votre projet ejb et modifiez le persistence.xml fichier. Remplacez datasource par la ressource de base de données (dans mon cas jdbc/test) et enregistrez tout.

Cela devrait fonctionner (y).

2
Mourad Lamkas

J'ai eu le même problème lorsque j'ai exécuté/déployé une application sur un serveur créé par l'assistant d'installation netbeans.

Pour résoudre, j'ai téléchargé la dernière version de glassfish sur le site officiel et je suis allé sur: Netbeans> "Onglet Service"> "Serveurs"> "Ajouter un serveur ...".

N'oubliez pas de modifier les configurations de votre projet pour utiliser la nouvelle instance du serveur glassfish.

1
user3512459

Cela pourrait se produire en raison de n bogue NetBeans qu'ils disent avoir corrigé mais apparemment ils ne l'avaient pas fait. Comme solution, j'ai fini par supprimer glassfish-resources.xml tout à fait (comme je ne pouvais pas faire persistence.xml prenez-le avec n'importe quel type de solution) et utilisez @DataSourceDefinition annotation à la place.

Ma configuration utilise un DataSourceBean.Java fichier pour @DataSourceDefinition:

@Singleton
@Startup
@DataSourceDefinition(name="Java:global/jdbc/myDataSource",
    className="com.Microsoft.sqlserver.jdbc.SQLServerDataSource",
    url="jdbc:sqlserver://127.0.0.1:1433;databaseName=myDB",
    user="myuser",
    password="mypassword"
)
public class DataSourceBean {
}

persistence.xml Ressemble à ça:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
    <persistence-unit name="myUnit" transaction-type="JTA">
        <jta-data-source>Java:global/jdbc/myDataSource</jta-data-source>
        <properties>
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
        </properties>
    </persistence-unit>
</persistence>
0
Wade

J'ai eu ce problème. J'ai défini le pool de connexion jdbc et la ressource jdbc dans la console d'administration. Mais je n'ai pas défini de source de données dans persistence.xml.

  <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>
0
John