Question :
When I put it to persistence.xml
, using a JNDI resource configured in Glassfish itself does not give an error. But when it is to get from file glassfish-resource.xml
it gives the following error:
Information: [EL Info]: 2014-07-09 12: 24: 19,019 – ServerSession (1076034183) – EclipseLink,
version: Eclipse Persistence Services – 2.5.0.v20130507-3faac2b
Information:
[EL Severe]: ejb: 2014-07-09 12: 24: 19,038 – ServerSession (1076034183)
Exception [EclipseLink-7060] (Eclipse Persistence Services – 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Can not acquire data source [jdbc / Bank].
Internal Exception: javax.naming.NamingException: Lookup failed for ‘jdbc / Integration’ in SerialContext
[myEnv = java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming .factory.url.pkgs = com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: Bank not found]
Here are the files used:
glassfish-resource.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="pool_de_conexao" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<!-- Propriedades da conexão -->
</jdbc-connection-pool>
<jdbc-resource enabled="true" jndi-name="jdbc/Banco" object-type="user" pool-name="pool_de_conexao"/>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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">
<persistence-unit name="br.com.app-1.0-SNAPSHOTPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>jdbc/Banco</non-jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>
</persistence>
Answer :
For some unknown reason, the file containing the JDBC Resource is not being deployed along with the application.
In this case, then adding connection properties to the persistence.xml file solves the connection problem.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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">
<persistence-unit name="br.com.app-1.0-SNAPSHOTPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://*******" />
<property name="javax.persistence.jdbc.user" value="*******" />
<property name="javax.persistence.jdbc.password" value="*******" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
</properties>
</persistence-unit>
</persistence>
How is the structure of your project? is a .war
, .ear
or .jar
? where are you putting glassfish-resource.xml
?
I do not understand much about Glassfish, but the problem is generic:
basically your datasource file is not coming together with your application in deploy.
Check the startup log if jndi is being registered.
Resource files must be located in the META-INF
folder (for .ear or .jar) or WEB-INF
(for .war) for deploy to the container.
Otherwise, why are you using the transaction type as RESOURCE_LOCAL
on an application server? let the server take care of the heavy lifting for you, at a glance.
a>.
If you do not resolve your issue, please update this information so we can help you better.