我在我的应用程序中使用EclipseLink。 EclipseLink使用一些连接池。我使用EclipseLink内部版本。连接池在需要时创建连接,然后保留以供将来使用。
我需要在创建每个连接时对其进行一次特定的SQL调用,但只需要一次。我需要做的是在oracle上授予用户特定的角色。为了安全起见,此用户具有此角色,但已禁用,需要启用它。
每次从池中获取连接时,我都不想这样做,只有在创建它时才会这样做。
我该怎么做?
答案 0 :(得分:1)
EclipseLink无法开箱即用。您必须创建一个扩展org.eclipse.persistence.sessions.server.ConnectionPool
的新类并覆盖方法buildConnection()
。创建新连接时将调用此方法。
答案 1 :(得分:1)
我找到了更好的解决方案。我会把它放在这里以防将来有人看这个。
我使用自己的SessionCustomizer。我有:
public void customize(Session session) throws Exception {
DatabaseLogin login = session.getLogin();
Connector connector = login.getConnector();
login.setConnector(new ConnectorWrapper(connector, m_onCreationQuery));
}
所以有我自己的ConnectorWrapper,它依次包装原始连接器,在创建Connection时,使用原始连接器创建它,然后在其上调用SQL查询,然后返回它。
答案 2 :(得分:0)
首先:您在创建连接时需要做什么?我问,因为你的问题可能有一个特定的解决方案。
至于如何执行此操作,它完全取决于您正在使用的连接池以及如何设置它。某些连接池将允许您提供或定义用于创建新连接的连接工厂。在这种情况下,您可以根据需要初始化它们,如果可能的话,这就是我建议的方法。
如果没有关于你的设置的更多细节,很难回答。