Имя драйвера JDBC или класса DataSource должно быть указано в свойстве ConnectionDriverName «Как это решить?» - PullRequest
7 голосов
/ 04 июня 2011

обзор: это мое первое руководство от Websphere 7 Server & JPA 1.0 и EJB & Derby Database.

Первое: мое имя источника данных - EJB3BANK, а моя целевая база данных - SHOP.

Второе: этот persistence.xml файл

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

Третье: этот частичный код Элемент Класс сущности

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

Четвертый: вот бизнес-класс CartBean вот начало проблемы

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

и это сообщение об ошибке: Имя драйвера JDBC или класса DataSource должнобыть указано в свойстве ConnectionDriverName .Как решить эту проблему?

Ответы [ 7 ]

9 голосов
/ 12 октября 2011

Используемое свойство openjpa.ConnectionDriverName не требуется, если вы ссылаетесь на источник данных по имени JNDI.

Одна из возможных причин этой проблемы - файл persistence.xml находится не в том месте. Файл должен находиться в [корне контекста класса] / META-INF. Для файла .war содержимое должно быть примерно таким:

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

и для файла библиотеки .jar, упакованного в файл .war:

(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
3 голосов
/ 19 апреля 2016

сообщение jpa

Имя свойства драйвера JDBC или класса DataSource должно быть указано в свойстве ConnectionDriverName

является вводящим в заблуждение сообщением.Не помогает понять проблему.Было бы лучше что-то вроде:

jta-data-source - jdbc / EJB3BANK недоступен / недоступен

, потому что это то, что происходит.Возможно, вы включили проект jpa в проект web или ejb (или, может быть, нет, вы могли бы добавить фасеты jpa непосредственно в один из проектов такого типа), однако, как только вы создали соединение jdbc на консоли webshpere наилучшим образомиспользовать его:

  1. изменить ваш файл persistence.xml (AnyJpaProject / src / META-INF / persistence.xml)

    <jta-data-source>java:comp/env/jdbc/EJB3BANK</jta-data-source>
    
  2. убедитесь, что ваш web.xml / ejb-jar.xml имеет что-то вроде:

    <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 в ibm-ejb-jar-bnd.xml / ibm-web-bnd.xml:

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

Надеюсь, эта помощь.

2 голосов
/ 01 июля 2013

Просто, чтобы добавить к ответу eis (извинения, не хватает представителя, чтобы комментировать):

Используя Eclipse, мой файл persistence.xml изначально находился в корневой папке src ЦСИ / persistence.xml

Перемещение к SRC / META-INF / persistence.xml исправил мою проблему, так как Eclipse автоматически перемещает его в каталог сборки.

Не все API-интерфейсы ORM (объектно-реляционное сопоставление) работают так, хотя, я вполне уверен, что при использовании Hibernate мой hibernate.cfg.xml (persistence.xml) всегда находился непосредственно в папке "src".

2 голосов
/ 10 ноября 2011

Я думаю, что это ошибка реализации JPA-провайдера. Я получаю похожую ошибку, но в моем случае я фактически не указывал имя источника данных. Причина в том, что стандарты допускают концепцию источника данных по умолчанию. К сожалению, он плохо работает с WebSphere Application Server 8.0.0.1 и RSA 8.0. Не уверен, был ли подан PMR.

1 голос
/ 22 января 2016

Ошибка в том, что нельзя использовать имя источника данных в файле persistence.xml после добавления источника данных на сервер приложений.Однако это будет работать, если вы добавите свойства в файл persistence.xml, как показано ниже.

    <property name="openjpa.ConnectionURL" value="DB URL"/>
    <property name="openjpa.ConnectionDriverName" value="Driver Name"/>
    <property name="openjpa.ConnectionUserName" value="userid"/>
    <property name="openjpa.ConnectionPassword" value="password"/>
0 голосов
/ 19 августа 2014

попробуйте эти люди:

 <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>
     <class>jdbc/EJB3BANK</class>
     <properties>
         <property name="openjpa.jdbc.Schema" value="SHOP" />
     </properties>
 </persistence-unit>
 </persistence> 

Я не знаю, должно ли быть "JDBC / EJB3BANK" или только "EJB3BANK" в классе узла, попробуйте два варианта.= D Это работает для моего

0 голосов
/ 17 июня 2011

Я думаю, что вы пытаетесь определить новый источник данных, объявив его в файле persistence.xml, и в нем отсутствует свойство типа <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" />

Однако, поскольку вы используете Websphere,Предлагаем вам создать источник данных через Консоль администрирования Webspheres (Webinterface).В Resources-> JDBC вы сначала создадите JDBC-провайдер и скажете ему использовать драйвер Derby.И после этого вы создадите новый источник данных с помощью этого провайдера.Там вы можете определить JNDI-привязку.Установите значение jdbc / EJB3BANK .И ваш текущий файл persistence.xml должен работать как положено.

...