3

ログインでシステムを構築しています。自分のコンピューターでテストしたところ、まったく問題なく動作しました。サーバーにアップロードすると、朝に数秒間ログインできないという問題が発生し始めました。残りの時間は正常に動作します。

私はこれに昨日と今日だけ出くわしただけで、毎朝一度しかテストできないので、まだ詳細を説明するのは難しい. セットアップは次のとおりです。

フロントページはjavascriptとangular jsを使ったhtmlページです。空のフレームを表示し、ページのコンテンツに対して ajax リクエストを行います。「不十分なアクセス権限」の戻り値を持つ失敗した ajax リクエストでは、div保持しているログイン フォームの非表示を解除します。そのログイン フォームは、ページを空白にし、送信ボタンを提供します。送信ボタンがクリックされると、Java サーバーに ajax ログイン要求が送信されます。そのリクエストが返されると、ページは再びログイン フォームを非表示にし、通常どおりに処理を進めます。

バックエンドでは、1.6 から 1.7 の間で何かを実行している Java サーバーがあります (はい、わかっています。もっとよく知っておく必要があります。サーバーは 1.7.001 であると報告しますが、文字列ベースの switch-case ステートメントのような 1.7 の機能は実行されません)。動作しないので、アップロード時に 1.6 Java 用にコンパイルします (これは既知の問題であり、現在取り組んでいます)。Stripes を使用して前面コードを実行しています。データベースは、同じサーバーにある mysql データベースです。

このエラーが発生するときは、常に朝の最初のログインです。ページを読み込んで、ユーザー/パスを入力し、[ログイン] をクリックします。ページが点滅し、ログイン画面に戻ります。まだテスト段階にあるため、ログイン後にユーザー/パスをクリアしていません。最終的にログインする前に、「ログイン」を何度も何度もクリックできます。この問題は昨日と今日、朝の最初のログインの 2 回だけ発生しました。

私の同僚は、以前のプロジェクト、同じサーバーで別の同様のセットアップで同様の問題を抱えていました。彼は、接続が閉じられたことをJavaサーバーが認識せずにSQLサーバーが接続を閉じることに問題があると考えているが、確信が持てず、それを修正する方法がわからない.

他にどのような情報を提供すればよいのか、どのコードを表示すればよいのか、そのようなことさえ知りません。私がどこでも見つけることができる最良の提案は、「数時間ごとに確実なデータベース要求を行うようにスケジュールされたイベントを設定する」ですが、これはとても... ぎこちないようです。誰かが私を助けてくれれば、より決定的な問題と解決策をテストできるようになりたいです。これを理解するためにどのコードを見たいか教えてくれる人がいれば、喜んで貼り付けます。詳しくは?ただ尋ねてください。範囲がとても...大きくて... どの部分が関連するかわかりません。

編集 1: エラー コード!

[ERROR] - Database Error 1 on verify
java.sql.SQLException: Already closed.
    at org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:114)
    at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:191)

編集 2: 接続コード

これは、すべての mysql データベース接続用に特別に保持しているオブジェクトからのものです。

private static ConnectionSource coreConnection = null;
private static DataSource coreDataSource = null;

public static ConnectionSource getCoreConnection() throws SQLException, NamingException {
    if (coreConnection == null || !coreConnection.isOpen()) {        
        Context env = (Context)new InitialContext().lookup("java:comp/env");        
        coreDataSource = (DataSource)env.lookup("webapps/test");
        coreConnection = new DataSourceConnectionSource(coreDataSource, new MysqlDatabaseType());
    }
    return coreConnection;
}
4

2 に答える 2