2010-06-10 8 views
1

Я использую EclipseLink, и мне нужно провести аудит в оракуле, чтобы я мог проводить аудит с использованием чистого JDBC с помощью V$session, и я могу проверять имя приложения в oracle таким образом, но здесь, в EclipseLink JPA, я не могу установить имя приложения, которое должно быть проверено, способ, которым я пытался, - динамически установить параметр сеанса, который я хочу использовать, с помощью SessionCustomizer, но он не выполняет то, что должен делать ... Ошибка не отображается, но не проверяет имя в оракула ... у меня есть время борется с этим и без результата, код я использую:Аудит для Oracle с EclipseLink 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 
    } 
} 

Используя один из комментируемых линий выше, которые должны работать, не работает ...

попытался также изменения этих линий в таких:

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

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

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

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

Doug

Смежные вопросы