読み取り専用の組み込み Derby データベースにアクセスしようとしています。これは myDB.jar として入手できます。この jar には、Apache Derby データベースの 1 つのフォルダー、myDB (log フォルダーと seg0 フォルダー、および service.properties ファイル) があります。このコードは、main メソッドを使用してファイルから実行すると正常に機能します。しかし、それを EAR にパッケージ化してサーバーにデプロイすると、エラーが発生します。
このデータベースは EAR ファイルでパッケージ化され、JBoss 5.0.1 サーバーにデプロイされます。
EAR には次の内容があります。 • myWebApp.war • myEjbs.jar • myDB.jar • META-INF/MANIFEST.MF および META-INF/application.xml
MANIFEST.MF の内容: Manifest-Version: 1.0 Class-Path: myDB.jar
myDB.jar が application.xml に登録されていません
EJB-JAR、つまり myEjbs.jar には次の内容があります。 • derby.properties • META-INF/MANIFEST.MF およびその他の persistence.xml など。 .jar • データベースにアクセスする次のコードを含む com.xxx.common.DbUtility.class:
private static String dbURL = "jdbc:derby:jar:(myDB.jar)"; private static String dbName = "myDB"; プライベート静的文字列ユーザー = ""; プライベート静的文字列パスワード = "";接続 con = DriverManager.getConnection(dbURL+ dbName, user, password);
このクラスの出力は、com.xxx.ejbs パッケージ内の EJB によって使用されます。
以下は私が得るエラーです:
情報 読み込まれたデータベース ドライバー: org.apache.derby.jdbc.EmbeddedDriver
INFO SQLException: データベース 'jar:(myDB.jar)myDB' をクラス ローダー BaseClassLoader@127627{vfsfile:/C:/jboss-5.0.1.GA/server/default/conf/jboss-service.xml} で起動できませんでした詳細については、次の例外を参照してください。
情報 java.sql.SQLException: データベース 'jar:(myDB.jar)myDB' をクラス ローダー BaseClassLoader@127627{vfsfile:/C:/jboss-5.0.1.GA/server/default/conf/jboss- で起動できませんでした詳細については、次の例外を参照してください。
org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException の情報 (不明なソース)
INFO [STDOUT] (http-127.0.0.1-8080-1) org.apache.derby.impl.jdbc.Util.newEmbedSQLException (不明なソース) で
java.sql.DriverManager.getConnection の情報 (DriverManager.java:582)
java.sql.DriverManager.getConnection の情報 (DriverManager.java:185)
INFO 原因: java.sql.SQLException: Failed to start database 'jar:(myDB.jar)myDB' with class loader BaseClassLoader@127627{vfsfile:/C:/jboss-5.0.1.GA/server/default/conf /jboss-service.xml}、詳細については次の例外を参照してください。
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException の情報 (不明なソース)
org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA の情報 (不明なソース)
INFO 原因: java.sql.SQLException: Java 例外: 'myDB.jar (指定されたファイルが見つかりません): java.io.FileNotFoundException'.
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException の情報 (不明なソース)
org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException の情報 (不明なソース)
org.apache.derby.impl.jdbc.Util.newEmbedSQLException の情報 (不明なソース)
org.apache.derby.impl.jdbc.Util.javaException の情報 (不明なソース)
INFO 原因: java.io.FileNotFoundException: myDB.jar (指定されたファイルが見つかりません)
java.util.zip.ZipFile.open(ネイティブ メソッド) の情報
INFO at java.util.zip.ZipFile.<init>(ZipFile.java:114)
INFO at java.util.zip.ZipFile.<init>(ZipFile.java:131)
org.apache.derby.impl.io.JarStorageFactory.doInit の情報 (不明なソース)
org.apache.derby.impl.io.BaseStorageFactory.init の情報 (不明なソース)
お返事ありがとうございます。私は今、次のことを試しました:
(私)
文字列パス = getClass().getClassLoader().getResource("myDB.jar").getPath(); System.out.println("見つかったパス = " + パス); private static String dbURL = "jdbc:derby:jar:" + "(" + パス + ")"; private static String dbName = "myDB"; プライベート静的文字列ユーザー = ""; プライベート静的文字列パスワード = "";接続 con = DriverManager.getConnection(dbURL+dbName, user, password);
それでも同じエラーが発生します。以下はサーバーログです。
INFO パスが見つかりました = /C:/jboss-5.0.1.GA/server/default/deploy/Main.ear/myDB.jar/
情報 読み込まれたデータベース ドライバー: org.apache.derby.jdbc.EmbeddedDriver
INFO SQLException: データベース 'jar:(/C:/jboss-5.0.1.GA/server/default/deploy/Main.ear/myDB.jar/)myDB' をクラスローダー BaseClassLoader@e6c6d7{vfsfile:/ で起動できませんでした詳細については、次の例外を参照してください。
org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException の情報 (不明なソース)
INFO 原因: java.sql.SQLException: Java 例外: 'C:\jboss-5.0.1.GA\server\default\deploy\Main.ear\ myDB.jar (指定されたパスが見つかりません): java. io.FileNotFoundException'.
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException の情報 (不明なソース)
INFO 原因: java.io.FileNotFoundException: C:\jboss-5.0.1.GA\server\default\deploy\Main.ear\ myDB.jar (指定されたパスが見つかりません)
java.util.zip.ZipFile.open(ネイティブ メソッド) の情報
java.util.zip.ZipFile の情報 (ZipFile.java:114)
java.util.zip.ZipFile の情報 (ZipFile.java:131)
org.apache.derby.impl.io.JarStorageFactory.doInit の情報 (不明なソース)
以下は、クラスが最初に JBoss によってロードされたときの出力です。
BaseClassLoader@a75818{vfszip:/C:/jboss-5.0.1.GA/server/default/deploy/Main.ear/} ポリシー VFSClassLoaderPolicy@88a588{name=vfszip:/C:/jboss-5.0.1.GA /server/default/deploy/Main.ear/ domain=null roots=[MemoryContextHandler@19639558[path= context=vfsmemory://ak42v-bfhwq-ger46v84-1-ger477uj-20 real=vfsmemory://ak42v-bfhwq- ger46v84-1-ger477uj-20]、DelegatingHandler@7111491[path=Main.ear context=file:/C:/jboss-5.0.1.GA/server/default/deploy/real=file:/C:/jboss- 5.0.1.GA/server/default/deploy/Main.ear]、DelegatingHandler@1948811[パス=Main.ear/myEJBs.jar コンテキスト=ファイル:/C:/jboss-5.0.1.GA/server/default/ deploy/ real=file:/C:/jboss-5.0.1.GA/server/default/deploy/Main.ear/myEJBs.jar], DelegatingHandler@4545587[path=Main.ear/ myDB.jar context=file: /C:/jboss-5.0.1.GA/server/default/deploy/real=file:/C:/jboss-5.0.1.GA/server/default/deploy/Main.ear/myDB.jar]、com.xxx.common、com.xxx.ejb、myDB、myDB.seg0、META-INF、myDB.log、…
したがって、myDB.jar がクラスパスにあり、データベース フォルダー myDB も読み込まれているようです。
(Ⅱ)
次に、次のことを試しました。
private static String dbURL_nfdc = "jdbc:derby:/"; private static String dbName = "myDB"; プライベート静的文字列ユーザー = ""; プライベート静的文字列パスワード = "";接続 con = DriverManager.getConnection(dbURL+dbName, user, password);
再びエラーが発生しますが、今は FileNotFoundException を取得しません。
INFO java.sql.SQLException: データベース '/myDB' が見つかりません。
INFO 原因: java.sql.SQLException: データベース '/myDB' が見つかりません。
あなたは私を正しい方向に向けたように見えますが、このエラーの理由を見つけることができません.
(三)
私も次のことを試しました:
private static String dbURL_nfdc = "jdbc:derby:"; (いいえ / ) private static String dbName = "myDB"; プライベート静的文字列ユーザー = ""; プライベート静的文字列パスワード = "";接続 con = DriverManager.getConnection(dbURL+dbName, user, password);
しかし、同じ SQLException を取得します。
JBoss が myDB を単純なファイル フォルダーではなく Java パッケージとして扱っている可能性はありますか?
以下が機能しました:
private static String dbURL_nfdc = "jdbc:derby:classpath:/"; private static String dbName = "myDB"; プライベート静的文字列ユーザー = ""; プライベート静的文字列パスワード = "";接続 con = DriverManager.getConnection(dbURL+dbName, user, password);
私を正しい方向に導いてくれて本当にありがとう。あなたの助けに感謝!!!