3

Eclipselink からのセッションごとにデータベース セッション変数を設定したいと考えています。実行したいSQLは次のようなものです:

begin DBMS_SESSION.SET_IDENTIFIER('MyApplicationName'); end;

コマンドを実行する SessionEvent リスナーを作成しようとすると、無限再帰に陥ってしまうようです。

myServer.getEventManager().addListener(new SessionEventAdapter() {
    public void postConnect(SessionEvent evt) {
        evt.getSession().executeNonSelectingCall(new SQLCall("begin DBMS_SESSION.SET_IDENTIFIER('MyApplicationName'); end;"));
    }
});

イベントリスナーでこれを間違った方法で行っているのでしょうか、それとも SQL コマンドを特別な方法で実行する必要がありますか?

4

1 に答える 1

5

他のプロセスへの接続をまだ取得している間に、セッションでクエリを実行しています。postConnect イベントがトリガーされる接続は、イベントが終了するまでセッションで使用できません。つまり、セッションのクエリは別の接続を取得する必要があります。

接続を取得し、それを使用して JDBC ステートメントを直接実行するには、SessionEvent 内でアクセサーを使用する必要があります。何かのようなもの

  public void postConnect(SessionEvent evt) {
    Connection connection = ((Accessor)event.getResult()).getConnection()
    Statement statement = connection.createStatement();
    statement.execute("begin DBMS_SESSION.SET_IDENTIFIER('MyApplicationName'); end;");
  }
于 2013-02-27T15:23:19.440 に答える