Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接池和Oracle Seesion_Java_Oracle_Oracle11g_Database Connection_Connection Pooling - Fatal编程技术网

Java 连接池和Oracle Seesion

Java 连接池和Oracle Seesion,java,oracle,oracle11g,database-connection,connection-pooling,Java,Oracle,Oracle11g,Database Connection,Connection Pooling,在开始我的问题之前,我想澄清一下,我是一名数据库开发人员,对Java/J2EE方面的知识了解有限 我们的是一个web应用程序(带有app server/web server的n层)。我们使用连接池来管理与数据库的连接。我对连接池的理解有限-App server管理应用程序的连接,让应用程序从池中获取连接,一旦连接完成返回池中 Let's say that I follow these steps - 1. Let's say that I log in the application 2. A

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

我们的是一个web应用程序(带有app server/web server的n层)。我们使用连接池来管理与数据库的连接。我对连接池的理解有限-App server管理应用程序的连接,让应用程序从池中获取连接,一旦连接完成返回池中

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),它存储登录的用户名。我的触发器将读取用户名的全局包变量。由于连接不会保持不变(连接池管理连接),因此在处理触发器时,我的全局包变量是否可用

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

我试着环顾四周,但未能对我的疑问得到明确的答案


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

您可以使用“客户端标识符”属性保留登录到应用程序的实际用户

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

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

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

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

您可以使用以下代码段在java中设置客户机_标识符:

公共连接准备(连接连接)引发SQLException{
String prepSql=“{call DBMS_SESSION.SET_IDENTIFIER('userName')}”;
CallableStatement cs=conn.prepareCall(prepSql);
cs.execute();
cs.close();
返回连接;

}

@Incognito-上述解释是否有助于您解决问题?