Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property "How to solve it?"

overview : This my first tutorial by Websphere 7 Server & JPA 1.0 & EJB & Derby Database.

First : My data source name is EJB3BANK & my target database is SHOP .

Second : This the persistence.xml file

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ShopJPA" transaction-type="JTA">
    <jta-data-source>jdbc/EJB3BANK</jta-data-source>
    <non-jta-data-source>jdbc/EJB3BANK</non-jta-data-source>
    <properties>
        <property name="openjpa.jdbc.Schema" value="SHOP" />
    </properties>
</persistence-unit>
</persistence> 

Third : This partial code of Item entity Class

@Entity
@Table(schema = "SHOP", name = "ITEM")
@NamedQuery(name = "getItem", query = "SELECT i FROM Item i")
public class Item{...}

Fourth : here is the business class CartBean here is the start of the problem

@Stateful
CartBean implements Cart{
....
....
public List<Item> getItems() {      
javax.persistence.Query query = em.createNamedQuery("getItem");//the problem here
return query.getResultList();
}
}

and This is the error message: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property. How to resolve this problem?

like image 367
MineIsMine Avatar asked Jun 04 '11 14:06

MineIsMine


2 Answers

Used openjpa.ConnectionDriverName property is not needed if you are referring to data source by JNDI name.

One possible cause for this issue is that persistence.xml is in the wrong location. The file must be located at the [root of class context]/META-INF. For a .war file, contents should be something like:

(foo.war)
WEB-INF/classes/META-INF/persistence.xml
WEB-INF/classes/com/foo123/jpa/Project.class
WEB-INF/web.xml
index.jsp

and for a library .jar file packaged inside a .war file:

(foo.war)
WEB-INF/lib/my-library.jar
WEB-INF/web.xml
index.jsp

(my-library.jar)
META-INF/persistence.xml
com/foo123/jpa/Project.class
like image 116
eis Avatar answered Nov 13 '22 05:11

eis


the jpa message

A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property

is a misleading message. Doesn't help to understand the problem. It would be better something like:

the jta-data-source is jdbc/EJB3BANK is unavailable/unreachable

because it's what is happening. Maybe you have included a jpa project in a web or ejb project (or maybe not, you could had added the jpa facets directly to one of this kind of project) however, once you have created the jdbc connection on the webshpere console the best way to use it is:

  1. change your persistence.xml (AnyJpaProject/src/META-INF/persistence.xml)

    <jta-data-source>java:comp/env/jdbc/EJB3BANK</jta-data-source>
    
  2. ensure your web.xml/ejb-jar.xml has something like:

    <resource-ref>
        <description></description>
        <res-ref-name>jdbc/EJB3BANK</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref> 
    
  3. add in ibm-ejb-jar-bnd.xml/ibm-web-bnd.xml:

<resource-ref name="jdbc/EJB3BAN" binding-name="jdbc/EJB3BAN">

Hope this help.

like image 43
Helmar Curci Avatar answered Nov 13 '22 05:11

Helmar Curci