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?
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.
Dans mon Glassfish, ma ressource JDBC, jdbc/__ default utilise le pool de connexion mysql_lemon.
__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.
(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
J'ai eu le même problème.
La solution (pour tous ceux qui ont toujours ce problème):
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.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éé.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).
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.
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>
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>