2

I am getting error when I try to run my application on Server. I am suing eclipse and glass fish server 4. I made a glassfish-resources.xml file and put it in the WEB-INF directory. When I try to run on server. I get the following exception

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

Here is my glassfish-resources.xml file

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

here is my persistence.xml file

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

I have also put ojdbc6.jar in the lib/ext folder. I am using oracle 11g release 2. Why I am getting invalid url error?

I have also check the connection in the SQL Developer and it is working, with user system and my password.

Thanks

1
  • try changing <jta-data-source>java:app/jdbc/myOracleDatasource</jta-data-source> in persistance.xml to <jta-data-source>app/jdbc/myOracleDatasource</jta-data-source> Commented Oct 25, 2013 at 6:28

2 Answers 2

2

Looks like you have mistakenly given the url two times and the property name is not correct.

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

It should be

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

Also it would be a good idea to refer to the documentation of glassfish 4.1 to get the correct property names you can use in glassfish-resources.xml

For Glassfish 3.1 the options are given here

Sign up to request clarification or add additional context in comments.

Comments

0

I have solved the issue. Actually I am using EJB 3.1, JSF 2.2, Java EE 7 and glass fish 4. My JSF controller call EJB which perform CRUD operations. I have something like this in 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>

Note:

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.

So I used something like this on my 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  {
    ....
}

What I was missing is the properties={"url=jdbc:oracle:thin:@localhost:1521:XE"} attribute. So it was giving me error. After adding this attribute to @DataSourceDefinition. The error gone and things start working fine.

Thank you

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.