私はデータベースバックエンドとしてhsqlを使用しています。認証/認可のためにJDBCRealmを設定したいと思います。私はこれが私のcontext.xml
で開発と展開とTomcatのために7Tomcat JDCBRealmがドライバクラスを見つけられない
をIntelliJのを使用しています:
<Context antiJARLocking="true">
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="org.hsqldb.jdbcDriver"
connectionURL="jdbc:hsqldb:hsql://localhost"
userTable="customers" userNameCol="username" userCredCol="password"
userRoleTable="roles" roleNameCol="role_name"/>
</Context>
と私はライブラリとしてHSQLDBを追加しました:
Iアプリケーションをデプロイすると、JDBCRealmは追加されたドライバを見つけられません。
Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:195)
at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:688)
しかしaformentionedクラスが適切にロードすることができることを確実にするために、私はこのスニペットを追加:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Class foo = Class.forName("org.hsqldb.jdbcDriver");
System.out.println("This is working!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
それが期待されているように、実行中のサーブレットをもたらす適切なURLを要求することによって、サーバプリントThis is working
ことを示しますJDBCRealm
が見つかりませんでしたが、正しく読み込まれました。
問題は何ですか? 私は可能性があります関連する2つだけの手がかり持っ
しかし、問題は次のとおりです:hsql
含めて私の追加したライブラリの一部はtarget/WEB-INF/lib
に追加されていない
- (またはおそらく無関係を!) :ターゲットにライブラリとして追加されていない場合は、以前のスニペットがどのように機能していたのですか?
回避策
私は
JDBCRealm
がHSQLDriver
を見つけるのではなく、負荷の瓶をカタリナ場所の一つです/var/lib/tomcat7/lib
にそのJARファイルをコピーすることによって、問題は解決してしまった理由はわかりませんが。しかし、標準的な方法で問題を解決する方法は私にとってはまだ謎です。