我正在使用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);
}
它很好地执行合并,但不会将我想要的应用程序名称审核到数据库中。
您对如何解决此问题有任何想法。
答案 0 :(得分:1)
我建议使用SessionEventListener,这样每次创建或从数据源获取JDBC连接时都可以获得回调。
public void postAcquireConnection(SessionEvent event) {
Connection conn = ((DatabaseAccessor)event.getResult()).getConnection();
您可以在此处设置连接之前所需的任何值。
道格