java jdbc oracle11g jpa-2.0 glassfish-4

java - Obteniendo el error URL de Oracle no válida especificada: OracleDataSource.makeURL



jdbc oracle11g (2)

Recibo un error cuando intento ejecutar mi aplicación en el servidor. Estoy demandando eclipse y glass fish server 4. Hice un archivo glassfish-resources.xml y lo puse en el directorio WEB-INF. Cuando trato de ejecutar en el servidor. Obtengo la siguiente excepción

Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: Invalid Oracle URL specified: OracleDataSource.makeURL Error Code: 0 at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:316) at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:135) at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:307) .....

Aquí está mi archivo glassfish-resources.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 name="java:app/myOracleConnectionPool" res-type="javax.sql.ConnectionPoolDataSource" datasource-classname="oracle.jdbc.pool.OracleConnectionPoolDataSource"> <property name="User" value="system" /> <property name="Port" value="1521" /> <property name="DatabaseName" value="XE" /> <property name="ServerName" value="127.0.0.1" /> <property name="Url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /> <property name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /> <property name="Password" value="xxxx" /> </jdbc-connection-pool> <jdbc-resource enabled="true" jndi-name="java:app/jdbc/myOracleDatasource" object-type="user" pool-name="java:app/myOracleConnectionPool"> <description /> </jdbc-resource> </resources>

aquí está mi archivo persistence.xml

<persistence-unit name="chapter11PU" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>java:app/jdbc/myOracleDatasource</jta-data-source> <properties> <property name="eclipselink.target-database" value="Oracle"/> <property name="javax.persistence.schema-generation-action" value="drop-and-create"/> <property name="javax.persistence.schema-generation-target" value="scripts"/> <property name="javax.persistence.ddl-create-script-target" value="createfoo.sql"/> <property name="javax.persistence.ddl-drop-script-target" value="dropfoo.sql"/> <property name="eclipselink.deploy-on-startup" value="true"/> <property name="eclipselink.application-location" value="/tmp"/> <!-- To log SQL queries --> <property name="eclipselink.logging.level.sql" value="FINE"/> <property name="eclipselink.logging.parameters" value="true"/> <property name="eclipselink.logging.level" value="INFO"/> </properties> </persistence-unit>

También puse ojdbc6.jar en la carpeta lib / ext. Estoy usando la versión 2.g de Oracle 11g. ¿Por qué obtengo un error de URL no válido?

También compruebo la conexión en SQL Developer y está funcionando, con el sistema del usuario y mi contraseña.

Gracias


Parece que ha dado erróneamente la url dos veces y el nombre de la propiedad no es correcto.

<property name="Url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /> <property name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />

Debería ser

<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />

También sería una buena idea consultar la documentación de glassfish 4.1 para obtener los nombres de propiedad correctos que puede usar en glassfish-resources.xml

Para Glassfish 3.1 las opciones se dan aquí


He resuelto el problema En realidad estoy usando EJB 3.1, JSF 2.2, Java EE 7 y Glass Fish 4. Mi controlador JSF llama a EJB, que realiza operaciones CRUD. Tengo algo como esto en persistence.xml

<?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="chapter11PU" transaction-type="JTA"> <jta-data-source>java:app/jdbc/myOracleDatasource</jta-data-source> <properties> <property name="eclipselink.target-database" value="Oracle"/> <property name="eclipselink.ddl-generation.output-mode" value="both"/> <property name="eclipselink.create-ddl-jdbc-file-name" value="createDDL.sql"/> <property name="eclipselink.drop-ddl-jdbc-file-name" value="dropDDL.sql"/> <property name="eclipselink.application-location" value="E:/eclipse-kepler/workspace/Java EE 7/ch11_ProcessAndNavigation/src/main/resources/" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> <!-- To log SQL queries --> <property name="eclipselink.logging.level.sql" value="FINE"/> <property name="eclipselink.logging.parameters" value="true"/> <property name="eclipselink.logging.level" value="INFO"/> </properties> </persistence-unit> </persistence>

Nota:

The "java:app/jdbc/myOracleDatasource" data source required by the persistence unit must be created within the EJB container. And there are several ways to do so. The simplest one is to have a @DataSourceDefinition annotation on any Managed Bean. The container will deploy the bean and create the data source. Another way is to use the GlassFish interface.

Así que usé algo como esto en mi EJB

@Named @Stateless @DataSourceDefinition( className = "oracle.jdbc.pool.OracleConnectionPoolDataSource", name = "java:app/jdbc/myOracleDatasource", user = "system", password = "xxxx", databaseName = "XE", portNumber=1521, properties={"url=jdbc:oracle:thin:@localhost:1521:XE"} ) public class BookEJB { .... }

Lo que me faltaba era el properties={"url=jdbc:oracle:thin:@localhost:1521:XE"} . Entonces me estaba dando un error. Después de agregar este atributo a @DataSourceDefinition . El error desapareció y las cosas comenzaron a funcionar bien.

Gracias