0

ここ数日、ソフトウェアの最新バージョンをサーバーにアップロードした後、アプリケーションの 1 つが失敗し始めました。いくつかの共有テーブルにアクセスしますが、何か間違ったことをしているのか、それが私のせいなのかどうかを判断できません。

私のテスト環境ではすべてうまくいきましたが、メイン サーバーでテーブルを更新しているときに、操作がまだ保留中の場合のように、テーブルの一部がロックされているように見えることに気付きました。

アクティビティモニターでプロセスを強制終了した後、すべてが再び正常になりました。これは少し奇妙でした。私はプレーンな JDBC を使用しており、時には Hibernate を操作に使用しています。何度か確認しましたが、常に次のように JDBC 接続を処理します。

Connection c = null;
Statement s = null;//Sometimes PreparedStatement
ResultSet rs = null;
try{
//OPERATIONS
}
catch{
//Handling
}finally{
Mycon.disconnect(rs,ps,c);
}

Mycon-Class は、そのような基本的なものをサポートするだけの静的クラスです...

public static void disconnect(ResultSet resultSet, PreparedStatement ps, Connection connection) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
            } // nothing we can do
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
            } // nothing we can do
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
            } // nothing we can do
        }
    }

Hibernate の場合、通常はより簡単です。次に、単純なものを使用します:

try{
    SessionFactory factory = HibernateUtil.getSessionFactory();
    Session hsession = factory.openSession();
    Transaction tx = hsession.beginTransaction();
//Operations
tx.commit;
}catch(...){}
finally{
try{
hsession.close;
}catch(...){}
}

接続の処理には Apache Tomcat 7 を使用しているため、接続について心配する必要はないと考えました。

とにかく - たとえば、私の4つのプロセスがあります:

サーバー_モニター_ビュー

1 つ目と 2 つ目は、Server-Manager からのものです。

3 その詳細に表示されます:

SELECT W_ID, Comment, Date FROM Buran.dbo.Object WHERE right(convert(varchar, Date, 106), 8) like ''

私の意見では、そこにあるべきではありません。このステートメントを別のステートメントで数回使用しましたが、閉じました。

innerstat = null;
inners = null;
innerswert = "";
try {
    innerstat = c.createStatement();
    inners = innerstat.executeQuery("SELECT W_ID, Comment, Date FROM Buran.dbo.Object WHERE right(convert(varchar, Date, 106), 8) like '" + innerswert + "'");

    while (inners.next()) {
        innerswert = inners.getString(1);
        out.write("<option value='" + inners.getInt("W_ID") + "'>");
        out.write(innerswert);
        out.write("</option>");
    }
} catch (SQLException sqle2) {
    out.write(sqle2.toString());
    out.write(sqle2.getLocalizedMessage());
    sqle2.printStackTrace();

} finally {
    Mycon.disconnect(inners, innerstat);
}

そこにないものを解釈しているだけですか?サーバーログは問題なく、私のコードは例外をスローすることなく正常に動作します。何が間違いだと思いますか(もしあれば?)

4

0 に答える 0