2009-09-17 8 views
1

J'utilise EclipseLink dans mon application. EclipseLink utilise un pool de connexions. J'utilise un interne EclipseLink. Le pool de connexions crée une connexion lorsque cela est nécessaire, puis le conserve pour une utilisation future.Comment modifier la connexion dans EclipseLink

Je dois effectuer un appel SQL spécifique sur chaque connexion lors de sa création, mais seulement une fois. Ce que je dois faire est d'accorder un rôle spécifique à l'utilisateur sur Oracle. Pour des raisons de sécurité, cet utilisateur a ce rôle, mais il est désactivé et doit l'activer.

Je ne veux pas le faire chaque fois que la connexion est prise du pool, seulement quand elle est créée.

Comment puis-je le faire?

+0

Si vous n'avez à faire qu'une seule requête SQL en création, pourquoi ne pas le faire manuellement? – twolfe18

Répondre

1

J'ai trouvé une meilleure solution. Je vais le mettre ici au cas où quelqu'un à l'avenir chercherait cela. J'utilise mon propre SessionCustomizer. Où je:

public void customize(Session session) throws Exception { 
    DatabaseLogin login = session.getLogin(); 
    Connector connector = login.getConnector(); 

    login.setConnector(new ConnectorWrapper(connector, m_onCreationQuery)); 
} 

Donc, il est mon propre ConnectorWrapper, ce qui enveloppe connecteur d'origine et lors de la création de connexion, utilise l'original pour créer, puis appelle requête SQL sur elle, puis le renvoie.

0

Premièrement: que devez-vous faire lors de la création d'une connexion? Je demande parce qu'il pourrait y avoir une solution spécifique à votre problème. Pour ce faire, cela dépend entièrement du pool de connexions que vous utilisez et de la façon dont vous l'avez configuré. Certains pools de connexion vous permettront de fournir ou de définir une fabrique de connexions pour la création de nouvelles connexions. Dans ce cas, vous pouvez les initialiser comme vous le souhaitez et c'est l'approche que je suggérerais si possible.

Cependant, il est difficile de répondre davantage sans plus de détails sur votre configuration.

+0

J'ai ajouté des détails à la question. – amorfis

1

EclipseLink ne peut pas faire cela hors de la boîte. Vous devez créer une nouvelle classe qui étend org.eclipse.persistence.sessions.server.ConnectionPool et remplacer la méthode buildConnection(). Cette méthode sera appelée lors de la création d'une nouvelle connexion.

Questions connexes