1

アプリケーションサーバーとしてJBossAS7.1.1.Finalを使用しています。

JBoss Communityユーザーフォーラムに質問を投稿しました:question-here

以下に再現:


MacBookProにAS7.1.1.Finalをインストールしました。

クイックスタートの例をダウンロードしました。helloworld、jboss-as-greeterwarsのデプロイとテストに成功しました。

次に、postgresqlデータベースエンジンをセットアップして、jboss-as-cmtの例を試します。コンパイルしてデプロイすることができました。

1つを除いて、すべてがうまく機能します。アプリケーションサーバーに付属しているh2consoleWebアプリからpostgresqlデータベースに接続できません。

jboss-as-cmt戦争は完全に機能します。つまり、請求書に顧客を追加できます。私はdbエンジンにpsqlすることができ、すべてのレコードを見ることができます。私の唯一の問題は、h2consolewebappを使用して作成したjboss-as-cmtpostgresデータベースにアクセスできないことです。

ドライバークラスフィールドに「org.postgresql.Driver」を使用しています。JDBC URLの場合は「jdbc:postgresql://127.0.0.1:5432/jboss-as-cmt」。これは、standalone-full.xml構成ファイルで設定したconnection-url値と同じです。ユーザー名とパスワードは「sa」。

h2consoleアプリの[接続のテスト]ボタンを押すと、残念ながら次のように表示されます-

Class "org.postgresql.Driver" not found [90086-161]
org.h2.message.DbException: Class "org.postgresql.Driver" not found [90086-161]
    at org.h2.message.DbException.get(DbException.java:158)
    at org.h2.util.Utils.loadUserClass(Utils.java:429)
    at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:146)
    at org.h2.server.web.WebServer.getConnection(WebServer.java:653)
    at org.h2.server.web.WebApp.test(WebApp.java:839)
    at org.h2.server.web.WebApp.process(WebApp.java:215)
    at org.h2.server.web.WebApp.processRequest(WebApp.java:164)
    at org.h2.server.web.WebServlet.doGet(WebServlet.java:118)
    at org.h2.server.web.WebServlet.doPost(WebServlet.java:153)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
    at java.lang.Thread.run(Thread.java:680)
Caused by: org.h2.jdbc.JdbcSQLException: Class "org.postgresql.Driver" not found [90086-161]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    ... 24 more
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver from [Module "com.h2database.h2:main" from local module loader @b4e29b (roots: /Users/avyayatek/Downloads/jboss-as-7.1.1.Final/modules)]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.h2.util.Utils.loadUserClass(Utils.java:424)
    ... 22 more

jboss管理管理コンソール(http:// localhost:9990 / console)からデータソースへの正常な接続を確立できます。データソースプロファイルパネルで、データソースの名前を「postgresDS」に設定し、jndiを「java:jboss/postgresDS」に設定しています。接続URLは、h2consoleで使用しているものと同じです-"jdbc:postgresql://127.0.0.1:5432 / jboss-as-cmt"

h2consoleがpostgresqlデータベースエンジンに接続していない理由がわかりません。これにより、jboss-as-greeterの例で使用されているh2インメモリデータベースへの接続が成功します。

JDBCドライバーを$JBOSS_HOME/ modules / org / postgresql/mainフォルダーに配置しました。そこでmodule.xmlを作成しました。jar内の〜/ org /postgresql/フォルダーにDriver.classファイルがあります。$ JBOSS_HOME / Standalone / configuration / Standalone-full.xmlを変更して、postgresql関連のデータソースとドライバーのセクションを追加しました。

私が言ったように、jboss-as-cmtをビルドしてデプロイすることができ、期待どおりに機能します。h2consoleをこのpostgresqlデータベースに接続させることができれば、ある程度の安心感が得られます。

私は一般的にJBossとサーバーサイドのものの初心者です。

参考までに写真を添付し​​ました。

御時間ありがとうございます。


どんな考えでも大歓迎です。あなたの洞察と時間をありがとう。

4

2 に答える 2

1

まず、@ThomasMueller に感謝します。そのコメントにより、さらに掘り下げて機能的なソリューションにたどり着くことができました。また、JBoss コミュニティ ページの Wolf-Dieter にも、正しい方向性を示していただきありがとうございます。したがって、@MarkRotteveel への私の心からの提案は、信頼できるフォーラムに投稿することは害ではなく、解決策が見つかれば全員が恩恵を受けるということです。

これが私にとってうまくいったことです:ソースへのリンクをありがとう、ソースからh2consoleを作成し、今回はpostgres JDBCドライバーjarファイルをWEB-INF/libフォルダーに配置しました。これで、h2console を使用して postgresql データベースに接続できるようになりました。

クイックスタートに同梱されている h2console アプリには、WEB-INF/lib フォルダーにライブラリ jar がありません。代わりに、META-INF/MANIFEST.mf ファイルで依存関係を指定します。JBoss の起動中に h2 ドライバーと postgres ドライバーの両方がロードされていることは確かです。ログを確認できます。しかし、何らかの理由で、このアプリは h2 ドライバーしか認識せず、postgres ドライバーを認識できません。ソースファイルを見ると、どこにも「ハードコーディング」がないことは確かです。だから、私にはまだ謎です。

h2console ツールの代替 - SQUIrrel

皆さんありがとう。SOだけに限らず、これが誰かの役に立てば幸いです。

于 2012-11-21T05:03:30.070 に答える
0

ドライバーは、複数の JDBC プロトコルのハンドラーとして自身を登録できます。変更された可能性がありますが、ある時点で、H2 は jdbc:postgresql のハンドラーとして自身を登録します。H2 は PostgreSQL エミュレーション モードで実行できるため、完全に不合理というわけではありません。DriverManager を直接使用した場合 (URL のみが必要なため) は問題ありませんが、ドライバーが org.postgresql.Driver ではないため、(ドライバーのクラスパスが必要な) 接続マネージャーを使用した場合に問題が発生します。

これは、クラスパスに h2 ドライバーと postgresql ドライバーの両方がある場合にも問題を引き起こしました。「最初に登録されたもの」か「最後に登録されたもの」かは覚えていませんが、DriverManager から取得したドライバーは、jar がロードされた順序によって異なります。それは多くの悲しみを引き起こし、使用するクラスパスを明示的に指定した DataSource を常に定義する習慣に陥った理由の 1 つです。接続が 1 つしか必要ない 1 回限りのアプリでは少しやり過ぎですが、あいまいさが解消されます。

特定の問題については、jar を Java クラスパスに追加するだけです。クラスパスに約12個のjarを配置する小さなbashシェルスクリプトがあり、問題なく多数のデータベースに接続できます。ドライバーの 1 つを更新する必要があるたびに h2 jar を再構築する必要がなくなります。

于 2017-07-13T02:57:44.357 に答える