2010-06-10 82 views
1

我正在使用EclipseLink,因此我可以在oracle中進行審計,以便我可以使用純JDBC與V$session進行審計,並且我可以使用這種方式在oracle中審計應用程序名稱,但是在EclipseLink JPA中我無法設置要審覈的應用程序名稱,我一直在嘗試的方式是通過動態設置我想要使用SessionCustomizer的會話參數,但它不會執行應有的操作...沒有顯示錯誤,但不會審計名稱在Oracle ......我有時間這一點,並沒有結果掙扎,我使用的代碼是:使用EclipseLink對Oracle進行審計JPA

的定製類是:

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 
    } 
} 

通過使用註釋行以上,這是爲了工作,沒有工作的一個...

也試過這些線路將改變這些的:

​​

沒有工作過。

我讀日食鏈接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

我建議使用SessionEventListener,這樣每次從數據源創建或獲取JDBC連接時都可以獲得回調。

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

在這裏,您可以在連接使用之前設置連接上需要的值。

Doug