クラスが見つかりません例外:Derby で JPA を使用しようとする場合の org.apache.derby.jdbc.EmbeddedDriver

StackOverflow https://stackoverflow.com/questions/1894594

質問

私が尋ねた関連する質問: JPA を使用するように単純な Java アプリを構成およびパッケージ化する方法

WebLogic でホストされている EJB 経由で接続できる単純な Derby データベースがあります。次に、JPA を使用してコマンドライン Java アプリから接続したいと思います。

これまでのところ、この Java コード +persistence.xml ファイルは以下のエラーをスローしています。私の何が間違っているのでしょうか?

私のディレクトリレイアウト:

C:.
│   Registrar.class
│   Registrar.java
│   TxnClient.class
│   TxnClient.java
│
└───META-INF
        persistence.xml

スタンドアロンクライアント:

import javax.persistence.*;

public class TxnClient {
   public static void main(String[] args) throws Exception {
      EntityManagerFactory factory = Persistence.createEntityManagerFactory("SRS-EM");
      EntityManager manager = factory.createEntityManager( );
      try {

      } finally {
         manager.close( );
         factory.close( );
      }
   }
}

永続性.xml

<?xml version="1.0" encoding="windows-1252" ?>
    <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" xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="SRS-EM" transaction-type="JTA">
        <class>Registrar</class>
        <properties>
            <property name="openjpa.ConnectionDriverName" 
                          value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="openjpa.ConnectionURL"
                          value="jdbc:derby:C:\derby-db-files\MyDB" />
        </properties>
     </persistence-unit>
    </persistence>

C: emp\jpa>java TxnClient

 80  SRS-EM  INFO   [main] openjpa.Runtime - Starting BEA Kodo 4.2.0load03
221  SRS-EM  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary".
    Exception in thread "main" <openjpa-1.1.0-r422266:657916 nonfatal general error>
     org.apache.openjpa.persistence.PersistenceException: There were errors initializing your configuration: <openjpa-1.1.0-r422266:657916 fatal store error> org.apache.openjpa.util.StoreException: org.apache.derby.jdbc.EmbeddedDriver
            at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:123)
            at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:776)
            at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:683)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.openjpa.lib.conf.ConfigurationImpl.instantiateAll(ConfigurationImpl.java:288)
            at org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(OpenJPAConfigurationImpl.java:1409)
            at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:646)
            at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:183)
            at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
            at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
            at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
            at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
            at TxnClient.main(TxnClient.java:7)
    Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
            at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Class.java:169)
            at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:85)
            ... 15 more 
役に立ちましたか?

解決

ClassNotFoundException質問(org.apache.derby.jdbc.EmbeddedDrive)内のクラスがクラスパス上にないことを示しています。そこ(ダービージャー)を入れて、もう一度試してます。

他のヒント

WebLogic Server とともにインストールされていないサードパーティの JDBC ドライバを使用するには、WebLogic Server の CLASSPATH JDBC ドライバー クラスの場所を含めます。を編集します commEnv.cmd/sh スクリプトイン WL_HOME/common/bin そしてクラスを先頭に追加します。

これは、Derby の JDBC ドライバーに適用されます (「 サードパーティ製ドライバー)。JAR をどこに置くかわからない場合は、JAR を入れてください。 WL_HOME\server\lib Weblogic にバンドルされている他の JDBC ドライバを使用します。

追伸:なぜ WebLogic のデフォルトの永続化エンジンである Kodo を使用しないのか不思議ですが、これはまた別の話です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top