使用EclipseLink JPA审核Oracle

时间:2010-06-10 15:28:05

标签: java oracle jpa eclipselink audit

我正在使用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); 
} 

它很好地执行合并,但不会将我想要的应用程序名称审核到数据库中。

您对如何解决此问题有任何想法。

1 个答案:

答案 0 :(得分:1)

我建议使用SessionEventListener,这样每次创建或从数据源获取JDBC连接时都可以获得回调。

public void postAcquireConnection(SessionEvent event) {
    Connection conn = ((DatabaseAccessor)event.getResult()).getConnection();

您可以在此处设置连接之前所需的任何值。

道格