2009-12-12 25 views
3

相關查詢我問什麼時候:How to configure & package a simple Java app to use JPAClassNotFoundException的:org.apache.derby.jdbc.EmbeddedDriver試圖使用JPA與德比

我有我可以連接到通過託管的EJB在WebLogic中一個簡單的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(); 
     } 
    } 
} 

的persistence.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:\ TEMP \ 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 

回答

2

ClassNotFoundException表示有問題的類(org.apache.derby.jdbc.EmbeddedDrive)不在您的類路徑中。把它(德比瓶)放在那裏,然後再試一次。

3

要使用未隨WebLogic Server一起安裝的第三方JDBC驅動程序,需要更新WebLogic Server的CLASSPATH以包含JDBC驅動程序類的位置。在WL_HOME/common/bin中編輯commEnv.cmd/sh腳本並預先安排您的課程。

這適用於Derby的JDBC驅動程序(請參閱third party driver)。如果您不知道將JAR放在哪裏,請將其與帶有Weblogic的其他JDBC驅動程序併入WL_HOME\server\lib。 PS:我想知道爲什麼你不使用作爲WebLogic的默認持久化引擎的Kodo,但這是另一回事。

相關問題