我在我的应用程序中使用EclipseLink。 EclipseLink使用一些连接池。我使用EclipseLink内部版本。连接池在需要时创建连接,然后保留以供将来使用。

我需要在创建每个连接时对其进行一次特定的SQL调用,但只需要一次。我需要做的是在oracle上授予用户特定的角色。为了安全起见,此用户具有此角色,但已禁用,需要启用它。

每次从池中获取连接时,我都不想这样做,只有在创建它时才会这样做。

我该怎么做?

有帮助吗?

解决方案 2

我找到了更好的解决方案。我会把它放在这里以防将来有人看这个。

我使用自己的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查询,然后返回它。

其他提示

EclipseLink无法开箱即用。您必须创建一个扩展org.eclipse.persistence.sessions.server.ConnectionPool并覆盖方法buildConnection()的新类。创建新连接时将调用此方法。

首先:您在创建连接时需要做什么?我问,因为你的问题可能有一个特定的解决方案。

至于如何执行此操作,它完全取决于您正在使用的连接池以及如何设置它。某些连接池将允许您提供或定义用于创建新连接的连接工厂。在这种情况下,您可以根据需要初始化它们,如果可能的话,这就是我建议的方法。

如果没有关于你的设置的更多细节,很难回答。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top