Reputation: 5427
My goal is to be able to create 'Isolated sessions' using Tomcat JDBC with Oracle VPD. How do I achieve concept similar to SessionEventAdapter in Eclipse Link but with more Tomcat Connection Pool. My current client code below:
InitialContext initCtx = new InitialContext();
Context jndi = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) jndi.lookup("jdbc/" + _jdbcResource);
_connection = ds.getConnection();
_statement = _connection.prepareStatement(sqlStatement);
Resource definition in Context.xml
<Resource defaultAutoCommit="true" defaultReadOnly="false"
driverClassName="oracle.jdbc.OracleDriver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
fairQueue="false" initialSize="10"
jdbcInterceptors="ConnectionState;" jmxEnabled="true"
logAbandoned="true" maxActive="100" maxIdle="100"
maxWait="30000" minEvictableIdleTimeMillis="5000"
minIdle="10" name="jdbc/OracleApps" password="APPS"
removeAbandoned="true" removeAbandonedTimeout="600"
testOnBorrow="true" testOnReturn="true" testWhileIdle="true" timeBetweenEvictionRunsMillis="5000"
type="javax.sql.DataSource" url="jdbc:oracle:thin:testmenot:1521:DEV"
useEquals="false" username="APPS" validationInterval="30000" validationQuery="SELECT 2+2 FROM DUAL"/>
Please do let me know if any information is required.
Thanks.
Upvotes: 0
Views: 269
Reputation: 5427
Only way to set client context by unwrapping connection when using Tomcat DBCP
DataSource ds = (DataSource)ctx.lookup(jndi);
Connection conn = ds.getConnection();
if (conn.isWrapperFor(oracle.jdbc.OracleConnection.class)) {
OracleConnection oraCon=conn.unwrap(oracle.jdbc.OracleConnection.class);
--Only Context, Parameter name, Parameter Value
oraCon.setApplicationContext("CLIENTCONTEXT", "ORACLE_USER_ID", userId);
Note: Oracle JDBC thin driver supports only one context i.e. CLIENTCONTEXT
Upvotes: 1