如何更改 EclipseLink 中的连接

发布于 2024-08-05 14:43:01 字数 253 浏览 6 评论 0原文

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

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

我不想每次从池中获取连接时都执行此操作,只有在创建连接时才执行此操作。

我该怎么做呢?

I use EclipseLink in my application. EclipseLink uses some connection pool. I use EclipseLink internal one. Connection pool creates connection when it is needed and then keeps it for future use.

I need to make one specific SQL call on each connection when it is created, but only once. What I need to do is to grant user specific role on oracle. For security this user has this role, but disabled, and needs to enable it.

I don't want to do it each time connection is taken from the pool, only when it is created.

How can I do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

美人如玉 2024-08-12 14:43:01

EclipseLink 无法开箱即用地执行此操作。您必须创建一个扩展 org.eclipse.persistence.sessions.server.ConnectionPool 的新类并重写方法 buildConnection()。当创建新连接时将调用此方法。

EclipseLink can't do this out of the box. You must create a new class that extends org.eclipse.persistence.sessions.server.ConnectionPool and override the method buildConnection(). This method will be called when a new connection is created.

行雁书 2024-08-12 14:43:01

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

我使用自己的 SessionCustomizer。其中我有:

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

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

所以有我自己的ConnectorWrapper,它反过来包装原始的Connector,并在创建Connection时,使用原始的Connector来创建它,然后对其调用SQL查询,然后返回它。

I found better solution. I'll put it here in case anybody in future looks for this.

I use my own SessionCustomizer. In which I have:

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

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

So there is my own ConnectorWrapper, which in turn wraps original Connector and when creating Connection, uses original one to create it, then calls SQL query on it, then returns it.

彼岸花似海 2024-08-12 14:43:01

首先:创建连接时需要做什么?我问这个问题是因为可能有针对您问题的具体解决方案。

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

然而,如果没有有关您的设置的更多详细信息,很难进一步回答。

Firstly: what do you need to do on creating a connection? I ask because there might be a specific solution to your problem.

As for how to do this, it depends entirely on what connection pool you're using and how you've set it up. Certain connect pools will allow you to provide or define a connection factory for creating new connections. In that case you can initialize them however you want to and that's the approach I'd suggest if possible.

It's hard to answer further without more detail about your setup however.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文