【问题标题】:Connection Pooling and Oracle Seesion连接池和 Oracle 会话
【发布时间】:2015-01-03 21:10:48
【问题描述】:

在开始我的问题之前,我想澄清一下,我是一名数据库开发人员,对 Java/J2EE 方面的了解有限。

Ours 是一个 Web 应用程序(具有应用服务器/Web 服务器的 n 层)。我们正在使用连接池来管理与数据库的连接。我对连接池的理解有限 - 应用服务器管理应用程序的连接,让应用程序从池中获取连接,一旦连接完成就返回池。

Let's say that I follow these steps - 
1. Let's say that I log in the application
2. Application requests for a connection from connection pool to authenticate me
3. Once authentication is done, App server will return the connection back to pool
4. I browse to a page where I have to do some CRUD operation and let's say that I am updating some data on the page.
5. App Server will again request for a connection from Pool
6. Application will process the data using the connection.

这是我的问题陈述 -

假设我必须使用触发器(在正在更新的表上)捕获审计信息。我需要捕获的属性之一是 username (登录用户)。

我在登录时设置了一个全局包变量(步骤 1 - 3),它存储了登录的用户名。我的触发器将读取 username 的全局包变量。由于连接不会保持不变(连接池管理连接),当我处理触发器时,我的全局包变量是否可用?

当多个用户登录并访问应用程序时,变量会发生什么(显然取决于对第一个问题的回答)?

我试图环顾四周,但未能明确回答我的疑问。

如果我的问题不清楚,请原谅我。让我知道,我可以编辑以提供更多信息。

【问题讨论】:

    标签: java oracle oracle11g database-connection connection-pooling


    【解决方案1】:

    您可以使用 CLIENT_IDENTIFIER 属性来保留登录到应用程序的实际用户。

    请从以下 Oracle 文档中找到更多信息:

    使用客户端标识符支持应用程序用户模型

    许多应用程序使用会话池来设置多个会话以供多个应用程序用户重复使用。用户向中间层应用程序进行身份验证,该中间层应用程序使用单一身份登录数据库并维护所有用户连接。在此模型中,应用程序用户是通过了应用程序中间层身份验证但数据库不知道的用户。 Oracle 数据库支持使用 CLIENT_IDENTIFIER 属性,该属性类似于这些类型的应用程序的应用程序用户代理。

    在此模型中,中间层在会话建立时将客户端标识符传递给数据库。客户端标识符实际上可以是代表连接到中间层的客户端的任何内容,例如 cookie 或 IP 地址。代表应用程序用户的客户端标识符在用户会话信息中可用,也可以通过应用程序上下文访问(通过使用 USERENV 命名上下文)。通过这种方式,应用程序可以设置和重用会话,同时仍然能够跟踪会话中的应用程序用户。应用程序可以重置客户端标识符,从而为不同的用户重用会话,从而实现高性能。

    您可以在java中使用以下代码sn-p设置CLIENT_IDENTIFIER:

    public Connection prepare(Connection conn) throws SQLException { String prepSql = "{ call DBMS_SESSION.SET_IDENTIFIER('userName') }"; CallableStatement cs = conn.prepareCall(prepSql); cs.execute(); cs.close(); return conn; }

    【讨论】:

    • @Incognito - 上述解释对您解决问题有帮助吗?
    猜你喜欢
    • 2010-11-05
    • 2017-07-17
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多