2

アプリケーションが DB との接続を確立しようとすると、通信リンク障害が発生します。

[#|2010-04-08T20:09:57.825+0300|SEVERE|glassfish3.0|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=24;_ThreadName=Thread-1;|Cannot connect to database server = com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.|#]

正確にはこの文字列で:

Statement s = conn.createStatement();

ここで、connは次のように定義されます。

private static java.sql.Connection conn;

このアプリでは、デフォルトのパラメーターで接続プールを設定しました。現在、(アプリ) は JPA クエリと直接 JDBC クエリの両方を使用しています。接続プールを再作成しても何も返されず、接続プールの ping で次のメッセージが表示されました。

Ping Connection Pool for pool is Failed. Ping failed Exce
ption - Connection could not be allocated because: Communications lin
k failure%%%EOL%%%%%%EOL%%%The last packet sent successfully to the s
erver was 0 milliseconds ago. The driver has not received any packets
from the server. Please check the server.log for more details.%%%EOL
%%%Ping failed Exception - Connection could not be allocated because:
Communications link failure

接続プールをフラッシュすると、次のようになりました。

com.sun.enterprise.admin.cli.CommandException: remote failure: Failed to flush connection pool ...

ただし、端末からデータベースに接続できます。さらに、同じ接続プール設定を使用して、ローカルマシンで同じアプリを動作させています。

何が起こっているのか、または問題を解決する方法について考えている人はいますか?

4

3 に答える 3

3

このような問題は、同じホストにmysqlサーバーとglassfishサーバーがあり、mysql構成で、ユーザーを使用して単純なjdbc/jpaで正常に動作するパブリックアドレス(eth0インターフェイスの192.168.0.1など)にバインドするオプションがある場合に発生する可能性があります@localhost ですが、glassfish JTA の場合はそうではなく、代わりにローカル アドレスの一部にバインドしてリンク エラーが発生します。原則として、パブリック アドレスが提示されている場合、そのような mysql ホストのローカル (localhost/127.0.0.1) アドレスにバインドすることはできません。

例:

my.cnf

バインドアドレス = 127.0.0.1

バインドアドレス = 192.168.0.1

127.0.0.1 - lo インターフェイスに割り当てます

192.168.0.1 - eth0 インターフェイスに割り当てます

これは、glassfish-mysql のバグです。

現在、JTA を使用するには、mysql をそのようなアドレスにバインドしないでください。(my.cnf から "bind-address=192.168.0.1" を削除します)。または、安全性の低い user@192.168.0.1 を使用します。

于 2010-04-10T11:35:37.810 に答える
0

さらに、同じ接続プール設定を使用して、ローカルマシンで同じアプリを動作させています。

同じデータベースに接続していますか? はいの場合は、同じ JDBC ドライバーを使用していることを確認してください。

于 2010-04-10T04:36:31.700 に答える