2010-06-10 22 views
1

J'utilise EclipseLink et je dois auditer en oracle pour que je puisse auditer en utilisant JDBC pur avec le V$session et je peux auditer le nom de l'application dans Oracle de cette manière mais ici dans EclipseLink JPA Je ne peux pas définir le nom de l'application à auditer, la façon dont j'ai essayé est en réglant dynamiquement le paramètre de session que je veux utiliser le SessionCustomizer mais il ne fait pas ce qu'il est supposé faire ... Aucune erreur n'est affichée mais n'audite pas le nom dans l'oracle ... J'ai le temps aux prises avec cela et aucun résultat, le code que je me sers est:Audit pour Oracle avec EclipseLink JPA

la classe Customizer est:

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

En utilisant l'une des lignes ci-dessus qui sont commentées censés travailler, ne fonctionnait pas ...

a également essayé de modifier ces lignes dans celles-ci:

DatabaseLogin login= (DatabaseLogin) s.getDatasourceLogin(); 
login.setProperty("v$session.program","Clients"); 

N'a pas travaillé aussi.

Je lisais le lien éclipse http://wiki.eclipse.org/Configuring_a_Session_(ELUG) et il est fait de cette façon ...

La méthode pour modifier est:

public void edit(Employee employee) { 
    emProperties.put(PersistenceUnitProperties.SESSION_CUSTOMIZER, "com.util.ProgramCustomizer"); 
    factory = Persistence.createEntityManagerFactory("EJBLocalPU", emProperties); 
    em = factory.createEntityManager(); 
    em.merge(employee); 
} 

Il effectue la fusion très bien, mais ne vérifie pas l'application nom que je veux dans la base de données.

Avez-vous une idée de la façon de résoudre ce problème?

Répondre

1

Je suggère d'utiliser un SessionEventListener afin que vous puissiez recevoir un rappel chaque fois qu'une connexion JDBC est créée ou acquise à partir d'une source de données.

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

Ici, vous pouvez définir toutes les valeurs dont vous avez besoin sur la connexion avant son utilisation.

Doug