我想为Eclipselink的每个会话设置一个数据库会话变量.我想要执行的SQL是这样的:
begin DBMS_SESSION.SET_IDENTIFIER('MyApplicationName'); end;
Run Code Online (Sandbox Code Playgroud)
如果我尝试创建一个将执行命令的SessionEvent侦听器,我似乎陷入无限递归.
myServer.getEventManager().addListener(new SessionEventAdapter() {
public void postConnect(SessionEvent evt) {
evt.getSession().executeNonSelectingCall(new SQLCall("begin DBMS_SESSION.SET_IDENTIFIER('MyApplicationName'); end;"));
}
});
Run Code Online (Sandbox Code Playgroud)
我是否以错误的方式使用事件监听器或者SQL命令是否需要以特殊方式执行?
您正在为会话执行查询,同时仍在为某个其他进程获取连接.触发postConnect事件的连接对于会话不可用,直到您的事件结束 - 这意味着会话上的任何查询都将被强制获取不同的连接.
您需要使用SessionEvent中的访问器来获取连接并使用它来直接执行JDBC语句.就像是
public void postConnect(SessionEvent evt) {
Connection connection = ((Accessor)event.getResult()).getConnection()
Statement statement = connection.createStatement();
statement.execute("begin DBMS_SESSION.SET_IDENTIFIER('MyApplicationName'); end;");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |