Аудит для Oracle с EclipseLink JPA - PullRequest
1 голос
/ 10 июня 2010

Я использую EclipseLink, и мне нужно провести аудит в oracle, чтобы я мог проводить аудит, используя чистый JDBC с V$session, и таким образом я могу проверять имя приложения в oracle, но здесь, в EclipseLink JPA, я не могу установить имя приложения в быть проверенным, способ, которым я пытался, состоит в динамической установке параметра сеанса, который я хочу использовать SessionCustomizer, но он не делает то, что должен делать ... Ошибка не отображается, но не проверяет имя в оракуле ... у меня есть время, чтобы бороться с этим, и нет результата, код, который я использую:

Класс настройщика:

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"); 

тоже не сработало.

Я читал ссылку на затмение 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 Ответ

1 голос
/ 29 июля 2010

Я бы предложил использовать SessionEventListener, чтобы вы могли получать обратный вызов каждый раз, когда JDBC-соединение создается или получается из источника данных.

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

Здесь вы можете установить любые необходимые вам значения для соединения док его использованию.

Дуг

...