使用 EclipseLink JPA 审计 Oracle
我正在使用 EclipseLink,我必须在 oracle 中进行审核,这样我就可以使用带有 V$session
的纯 JDBC 进行审核,并且我可以通过这种方式审核 oracle 中的应用程序名称,但在 EclipseLink JPA 中我无法设置要审核的应用程序名称,我一直在尝试的方式是使用 SessionCustomizer 动态设置我想要的会话参数,但它没有执行应该执行的操作...没有错误显示但不审核 oracle 中的名称...我有时间为此苦苦挣扎,但没有结果,我使用的代码是:
定制器类是:
package com.util;
import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.sessions.Session;
public class ProgramCustomizer implements SessionCustomizer {
public void customize(Session s) throws Exception {
//s.getDatasourceLogin().setProperty("v$session.program","Employees"); //tried with this method
//s.getLogin().setProperty("v$session.program","Employees"); //tried with this one as well
}
}
通过使用上面应该起作用的注释行之一,没有工作...
还尝试将这些行更改为这些行:
DatabaseLogin login= (DatabaseLogin) s.getDatasourceLogin();
login.setProperty("v$session.program","Clients");
也不起作用。
我正在阅读 Eclipse 链接 http://wiki.eclipse.org/Configuring_a_Session_(ELUG) 是这样完成的...
编辑的方法是:
public void edit(Employee employee) {
emProperties.put(PersistenceUnitProperties.SESSION_CUSTOMIZER, "com.util.ProgramCustomizer");
factory = Persistence.createEntityManagerFactory("EJBLocalPU", emProperties);
em = factory.createEntityManager();
em.merge(employee);
}
它执行合并非常好,但不审核我想要存入数据库的应用程序名称。
您对如何解决这个问题有任何想法吗?
I am using EclipseLink and i have to audit in oracle so I can audit using pure JDBC with the V$session
and i can audit the application name in oracle in this way but here in EclipseLink JPA I cannot set the application name to be audited, the way in which I have been trying is by setting dynamically the session param I want using the SessionCustomizer
but it does not do what is supposed to do... No error is shown but does not audit the name in oracle... I have time struggling with this and no result, the code I am using is:
The customizer class is:
package com.util;
import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.sessions.Session;
public class ProgramCustomizer implements SessionCustomizer {
public void customize(Session s) throws Exception {
//s.getDatasourceLogin().setProperty("v$session.program","Employees"); //tried with this method
//s.getLogin().setProperty("v$session.program","Employees"); //tried with this one as well
}
}
By using one of the commented lines above which are supposed to work, did not work...
Also tried changing those lines into these ones:
DatabaseLogin login= (DatabaseLogin) s.getDatasourceLogin();
login.setProperty("v$session.program","Clients");
Did not work too.
I was reading the eclipse link http://wiki.eclipse.org/Configuring_a_Session_(ELUG) and it is done in this way ...
The method to edit is:
public void edit(Employee employee) {
emProperties.put(PersistenceUnitProperties.SESSION_CUSTOMIZER, "com.util.ProgramCustomizer");
factory = Persistence.createEntityManagerFactory("EJBLocalPU", emProperties);
em = factory.createEntityManager();
em.merge(employee);
}
It performs the merge very well but does not audit the application name I want into the database.
Do you have any idea on how to solve this issue.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我建议使用 SessionEventListener,这样每次创建 JDBC 连接或从数据源获取连接时您都可以获得回调。
您可以在使用连接之前在此处设置您需要的任何值。
道格
I would suggest using a SessionEventListener so you can get a callback each time a JDBC connection is created or acquired from a data source.
Here you can set whatever values you need on the connection prior to its use.
Doug