Setting roles on connection pools
Hi,
using OracleConnectionCacheImpl and OracleConnectionPoolDataSource,
how can I set a role on the pooled connections since the creation of the physical
connection is out of my hands ? Ideally, I would like to set the role only once
so that when I call getConnection() to get the logical connection I do not have
to set it again and again ...
We are using exclusively stored procedures which one can execute according to its role.
Typically, my client has a role and uses a well known ConnectionCache which should
set the role accordingly.
Is the only solution to set the role on each request ?
I hope not.
Is anybody using roles in their applications ?
Cheers
Arnaud
Hi,
using OracleConnectionCacheImpl and OracleConnectionPoolDataSource,
how can I set a role on the pooled connections since the creation of the physical
connection is out of my hands ? Ideally, I would like to set the role only once
so that when I call getConnection() to get the logical connection I do not have
to set it again and again ...
We are using exclusively stored procedures which one can execute according to its role.
Typically, my client has a role and uses a well known ConnectionCache which should
set the role accordingly.
Is the only solution to set the role on each request ?
I hope not.
Is anybody using roles in their applications ?
Cheers
Arnaud
Similar Messages
-
Issue in setting up a connection pool in Glassfish
Hello,
I'm having an issue in setting up a connection pool in Glassfish. Previously I did it succesfully when I installed Glassfish in a Windows Server machine, but now I'm trying to do the same thing on a Linux machine and it's not working.
Glassfish version is: Glassfish server open source edition 3.1.1 (build 12)
The machine is a AWS machine running Amazon Linux AMI
Oracle Database is Oracle 11g Release 11.1.0.6.0 - 64bit Production With the Real Application Clusters option
The Oracle client installed on the machine is Release 11.2.0.3.0 Production
Java version is: Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
I've created the pool with the following options:
Resource Type: javax.sql.DataSource
Datasource classname: oracle.jdbc.pool.OracleDataSource
And as additional properties (apart from User and Password) I put as URL jdbc:oracle:oci8:@EVOREAD
The TNS file is correct and I can connect without any problem using sqlplus. I already copied the ojdbc6.jar in the /opt/Glassfish3/Glassfish/lib folder and I already restarted Glassfish server. Basically I did all the same steps that I did in the Windows machine, but in the Linux machine I always receive the following error:
java.lang.UnsatisfiedLinkError: no ocijdbc11 in java.library.path no ocijdbc11 in java.library.path
I needed to create also a connection pool to a MySql Database and basically I did exactly the same steps (apart of course using all the parameters needed for MySql and the proper connector) and it worked immediately.
Anyone can help me?You are using an OCI driver? You can either revert to using a thin client, or install the SQL client binaries and add its lib directory to the LD_LIBRARY_PATH.
-
Unable to set-up sybase connection pool for wls6.1
Hi All,
I am trying to set-up sybase connection pool in wls6.1 using the supplied jConnect driver (don't know the version of the driver). In diff places I am seeing diff opinions about the settings. It is really frustrating because BEA doc shies away from documenting just the sybase details although it provides details about Oracle, informix and SQL Server.
I just want to know these
1. the xml string for the connection pool
2. which config file should have it (web.xml or config.xml or something else?)
thanks a ton in advance
~rakeshHi,
I've already solve the problem. I did the following:
set the Url to be: jdbc:oracle:thin:@hostname:port:SID
set username
set password
add oracle.jdbc.drivers.OracleDriver into the JVM options -Djdbc.drivers
restart the server
test the connection
it works :) -
Seting role on connection pool
Hi folks,
is it possible to set a role (oracle role) on a connection pool so that any
connection
will have the relevant role set before executing a stored procedure.
I do not really want to set the role after every getConnection() request.
Thanks
Arnaud
WLS 6.1 SP2, Oracle driver: oracle.jdbc.driver.OracleDriverHi folks,
is it possible to set a role (oracle role) on a connection pool so that any
connection
will have the relevant role set before executing a stored procedure.
I do not really want to set the role after every getConnection() request.
Thanks
Arnaud
WLS 6.1 SP2, Oracle driver: oracle.jdbc.driver.OracleDriver -
Setting up a connection pool to ms sql database
Hi
I am trying to create a connection pool to talk to an MSSQL database, and could not manage to ping the DB (Operation 'pingConnectionPool' failed in 'resources' Config Mbean.) .
What set of properties need to be included for connection pool to an MS SQL DB?
your help is very much appreciated,
Yhank you
orms2004package coreservlets;
import java.sql.*;
import java.util.*;
/** A class for preallocating, recycling, and managing
* JDBC connections.
* <P>
* Taken from Core Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
* http://www.coreservlets.com/.
* © 2000 Marty Hall; may be freely used or adapted.
public class ConnectionPool implements Runnable {
private String driver, url, username, password;
private int maxConnections;
private boolean waitIfBusy;
private Vector availableConnections, busyConnections;
private boolean connectionPending = false;
public ConnectionPool(String driver, String url,
String username, String password,
int initialConnections,
int maxConnections,
boolean waitIfBusy)
throws SQLException {
this.driver = driver;
this.url = url;
this.username = username;
this.password = password;
this.maxConnections = maxConnections;
this.waitIfBusy = waitIfBusy;
if (initialConnections > maxConnections) {
initialConnections = maxConnections;
availableConnections = new Vector(initialConnections);
busyConnections = new Vector();
for(int i=0; i<initialConnections; i++) {
availableConnections.addElement(makeNewConnection());
public synchronized Connection getConnection()
throws SQLException {
if (!availableConnections.isEmpty()) {
Connection existingConnection =
(Connection)availableConnections.lastElement();
int lastIndex = availableConnections.size() - 1;
availableConnections.removeElementAt(lastIndex);
// If connection on available list is closed (e.g.,
// it timed out), then remove it from available list
// and repeat the process of obtaining a connection.
// Also wake up threads that were waiting for a
// connection because maxConnection limit was reached.
if (existingConnection.isClosed()) {
notifyAll(); // Freed up a spot for anybody waiting
return(getConnection());
} else {
busyConnections.addElement(existingConnection);
return(existingConnection);
} else {
// Three possible cases:
// 1) You haven't reached maxConnections limit. So
// establish one in the background if there isn't
// already one pending, then wait for
// the next available connection (whether or not
// it was the newly established one).
// 2) You reached maxConnections limit and waitIfBusy
// flag is false. Throw SQLException in such a case.
// 3) You reached maxConnections limit and waitIfBusy
// flag is true. Then do the same thing as in second
// part of step 1: wait for next available connection.
if ((totalConnections() < maxConnections) &&
!connectionPending) {
makeBackgroundConnection();
} else if (!waitIfBusy) {
throw new SQLException("Connection limit reached");
// Wait for either a new connection to be established
// (if you called makeBackgroundConnection) or for
// an existing connection to be freed up.
try {
wait();
} catch(InterruptedException ie) {}
// Someone freed up a connection, so try again.
return(getConnection());
// You can't just make a new connection in the foreground
// when none are available, since this can take several
// seconds with a slow network connection. Instead,
// start a thread that establishes a new connection,
// then wait. You get woken up either when the new connection
// is established or if someone finishes with an existing
// connection.
private void makeBackgroundConnection() {
connectionPending = true;
try {
Thread connectThread = new Thread(this);
connectThread.start();
} catch(OutOfMemoryError oome) {
// Give up on new connection
public void run() {
try {
Connection connection = makeNewConnection();
synchronized(this) {
availableConnections.addElement(connection);
connectionPending = false;
notifyAll();
} catch(Exception e) { // SQLException or OutOfMemory
// Give up on new connection and wait for existing one
// to free up.
// This explicitly makes a new connection. Called in
// the foreground when initializing the ConnectionPool,
// and called in the background when running.
private Connection makeNewConnection()
throws SQLException {
try {
// Load database driver if not already loaded
Class.forName(driver);
// Establish network connection to database
Connection connection =
DriverManager.getConnection(url, username, password);
return(connection);
} catch(ClassNotFoundException cnfe) {
// Simplify try/catch blocks of people using this by
// throwing only one exception type.
throw new SQLException("Can't find class for driver: " +
driver);
public synchronized void free(Connection connection) {
busyConnections.removeElement(connection);
availableConnections.addElement(connection);
// Wake up threads that are waiting for a connection
notifyAll();
public synchronized int totalConnections() {
return(availableConnections.size() +
busyConnections.size());
/** Close all the connections. Use with caution:
* be sure no connections are in use before
* calling. Note that you are not <I>required</I> to
* call this when done with a ConnectionPool, since
* connections are guaranteed to be closed when
* garbage collected. But this method gives more control
* regarding when the connections are closed.
public synchronized void closeAllConnections() {
closeConnections(availableConnections);
availableConnections = new Vector();
closeConnections(busyConnections);
busyConnections = new Vector();
private void closeConnections(Vector connections) {
try {
for(int i=0; i<connections.size(); i++) {
Connection connection =
(Connection)connections.elementAt(i);
if (!connection.isClosed()) {
connection.close();
} catch(SQLException sqle) {
// Ignore errors; garbage collect anyhow
public synchronized String toString() {
String info =
"ConnectionPool(" + url + "," + username + ")" +
", available=" + availableConnections.size() +
", busy=" + busyConnections.size() +
", max=" + maxConnections;
return(info);
}taken from:
http://archive.coreservlets.com/Chapter18.html -
Set up DB Connection Pool for Oracle DataBase Using Java App Server8
Hi,
In the Admin Console of Java App Server 8, I tried to create a connection pool for the oracle database. I chose Resource Type to be "javax.sql.ConnectionPoolDataSource" and the Vendor is Oracle. So the Data Source Class Name is filled by the system to be "oracle.jdbc.pool.OracleConnectionPoolDataSource". Now, I set up the class path to point to the database driver class "sun.jdbc.odbc.JdbcOdbcDriver" and also the to the Data Source Class Name. Also I set up the JVM options in the console. Restart the server, and then try to ping to the database, but get the error:
Operation 'pingConnectionPool' failed in 'resources' Config Mbean. Target exception message: Connection could not be allocated because: No suitable driver
I don't understand what else I should do and why this error is coming?
Please help me out.
Thank you
Regards,
SarahHi,
I've already solve the problem. I did the following:
set the Url to be: jdbc:oracle:thin:@hostname:port:SID
set username
set password
add oracle.jdbc.drivers.OracleDriver into the JVM options -Djdbc.drivers
restart the server
test the connection
it works :) -
Setting up Connection Pool in sun app server 8.1 with SQL server 2000
Hello,
I am trying to set up a connection pool & data source for SQL server 2000 (MSDE 2000).
Here is what I attempted to do:
I have a pool data source in a jar file called poll.jar and I copied it to C:\sun\Appserver\lib (Install dir\lib)
com.microsoft.mspool.PoolDataSource is the pool data source class.
In the Admin console, JDBC>Connection pools. Selected NEW and made the following entries.
GENERAL SETTINGS
Name: MsPool
Datasource class name : com.microsoft.mspool.PoolDataSource
Resource type: javax.sql.DataSource
POOL SETTINGS: default values
CONNECTION VALIDATION: default values
TRANSACTION ISOLATION: default values
PROPERTIES:
DataSourceName:PoolDataSource
NetworkProtocol:tcp
DatabaseName: myDB
Password:User specific
user:User specific
server: localhost
PortNumber:1433
I get the following error when I ping:
Operation 'pingConnectionPool' failed in 'resources' Config Mbean. Target exception message: Class name is wrong or classpath is not set for : com.microsoft.mspool.PoolDataSource.
Can any one help me if have a solution?
Thanks in advance.
magYou need to copy your jar to ${AS_INSTALL}/domains/domain1/lib/ext (replace domain1 by your
domain). Another option is to leave the jar in ${AS_INSTALL}/lib and add a entry in the classpath-suffix element of your domain.xml.
thanks,
:aditya -
Setting up connection pool in MSSQL SERVER 2000
hi,
i m having too much trouble in setting up connection pool in TOMCAT 5.0.25 for MS SQL SERVER 2000...
......so plz guide me how to do that...
TIA
bhupsi m having too much trouble in setting up connection
pool in TOMCAT 5.0.25 for MS SQL SERVER 2000...Never done it for SQL Server, but setting up a connection pool in tomcat is basically the same no matter what DB you're using:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html
The two files you're interested in are server.xml and web.xml. You just need to look at the MYSQL and Oracle examples and "tweak" it ... -
Setting up connection pool for cloudscape 10 embedded database
I got problem with setting connection pool via admin console for cloudscape 10 embedded in j2ee 1.4 (Application server 8.1), what im doing is:
-in resources/jdbc/ConnectionPools i add a new pool
- datasource classname i set up as: "org.apache.derby.jdbc.EmbeddedXADataSource"
-resource type: "javax.sql.XADataSource"
-DatabaseName: "jdbc:derby:D:\\Programowanie\J2EE\domains\domain1\config\notesData"
-set no password and user, becouse i havet set this in database
and when i ping to that datebase i got error:"Operation 'pingConnectionPool' failed in 'resources' Config Mbean."
when i change Datasource Classname to: "org.apache.derby.jdbc.EmbeddedDataSource", this error occur:
Operation 'pingConnectionPool' failed in 'resources' Config Mbean. Target exception message: Connection object cannot be null
what im doing wrong? i look everywhere and i cant find solution to my problem...hope you can help me.
Thanks,
KrystianAmit wrote:
>
"whats are the settings (URL, driver, properties) required to set up a connection pool for DB2 on OS/390 ?I'm using "COM.ibm.db2.jdbc.app.DB2Driver" as DB2 driverHi. If you can successfully use that driver with one of it's simple
JDBC example programs, then show me that example, at least the
part that makes the connection, and I'll show you how to define a pool.
Joe
PS: Folks: BEA WebLogic is expanding rapidly, with both entry and advanced positions
for people who want to work with Java, XML, SOAP and E-Commerce infrastructure products.
We have jobs at Nashua NH, Liberty Corner NJ, San Francisco and San Jose CA.
Send resumes to [email protected] -
Setting up connection pool for DB2
"whats are the settings (URL, driver, properties) required to set up a connection pool for DB2 on OS/390 ?I'm using "COM.ibm.db2.jdbc.app.DB2Driver" as DB2 driver
Amit wrote:
>
"whats are the settings (URL, driver, properties) required to set up a connection pool for DB2 on OS/390 ?I'm using "COM.ibm.db2.jdbc.app.DB2Driver" as DB2 driverHi. If you can successfully use that driver with one of it's simple
JDBC example programs, then show me that example, at least the
part that makes the connection, and I'll show you how to define a pool.
Joe
PS: Folks: BEA WebLogic is expanding rapidly, with both entry and advanced positions
for people who want to work with Java, XML, SOAP and E-Commerce infrastructure products.
We have jobs at Nashua NH, Liberty Corner NJ, San Francisco and San Jose CA.
Send resumes to [email protected] -
Connection pool not re-establishing connections, throwing exception instead
Hello,
I've just set up a connection pool on the sun java system application server 8 for a MySQL database using the official mysql-connector/j 5.0. Everything is working great, except when the connections timeout (or i kill them all manually from the database server) and then request a page that needs to use the DataSource object, the following exception is thrown:
Exception thrown: com.mysql.jdbc.CommunicationsException -- Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.io.EOFException
STACKTRACE:
java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3118)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3047)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1166)
at com.mysql.jdbc.jdbc2.optional.StatementWrapper.executeQuery(StatementWrapper.java:705)
at beans.MySessionBean.businessMethod(MySessionBean.java:73)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:70)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:336)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:251)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257)
at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:185)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:653)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:534)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.doTask(ProcessorTask.java:403)
at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:55)
** END NESTED EXCEPTION **
Last packet sent to the server was 16 ms ago.What could be wrong?
Thank you.The code is here:
public String businessMethod() {
//TODO implement businessMethod
try
InitialContext ic = new InitialContext();
Object obj = ic.lookup("jdbc/MyDS");
System.out.println("Object is: " + obj + " | Class is: " + obj.getClass().getName());
DataSource ds = (DataSource)obj;
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a,b FROM test");
String ret = "";
while(rs.next())
ret += rs.getString(1) + " - " + rs.getString(2) + "<br/>";
conn.close();
return ret;
catch(Exception e)
return "Exception thrown: " + e.getClass().getName() + " -- " + e.getMessage();
}On the server, it is set up as XADataSource. I don't really have a big need for distributed transactions, but does it hurt badly to use it anyways? Could it be causing this problem? -
How to catch exception when have max connection pool
hi,
i have define in oracle user that i could have max 10 sessions at the same time.
I have jdbc datasource & connection pool defined at glassfish server(JSF application).
now, if in application is too many queries to the database then i have error: nullpointer exception - becouse when i try to do:
con = Database.createConnection(); - it generates nullpointer exception becouse there isn't free connection pool
i try to catch exception like this:
public List getrep_dws_wnioski_wstrzymane_graph() { int i = 0; try { con = Database.createConnection(); ps = (Statement) con.createStatement(); rs = ps.executeQuery("select data, klasa, ile_dni_wstrzymana, ile_wnioskow from stg1230.dwsww_wstrzymane_dws8 order by data, klasa, ile_dni_wstrzymana, ile_wnioskow"); while(rs.next()){ rep_dws_wnioski_wstrzymane_graph.add(i,new get_rep_dws_wnioski_wstrzymane_graph(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4))); i++; } } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); throw new NoConnectionException(); // catch null 1 } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); throw new NoConnectionException(); // catch null 2 } } return rep_dws_wnioski_wstrzymane_graph; }
but at line:
con.close();
i have nullpointerexception
and
at line
throw new NoConnectionException(); // catch null 2
i have: caused by exception.NoConnectionException
what's wrong with my exception class? how to resolve it?
public class NoConnectionException extends RuntimeException{ public NoConnectionException(String msg, Throwable cause){ super(msg, cause); } public NoConnectionException(){ super(); } }
at web.xml i have defined:
<error-page> <exception-type>exception.NoConnectionException</exception-type> <location>/NoConnectionExceptionPage.jsp</location> </error-page>thanks,
i did it and i have error:
java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:115)
at logic.Database.createConnection(Database.java:37): conn = ds.getConnection();
public class Database {
public static Connection createConnection() throws NamingException,
SQLException {
Connection conn = null;
try{
Context ctx = new InitialContext();
if (ctx == null) {
throw new NamingException("No initial context");
DataSource ds = (DataSource) ctx.lookup("jdbc/OracleReports");
if (ds == null) {
throw new NamingException("No data source");
conn = ds.getConnection(); // here's exception when max connections to database
if (conn == null) {
throw new SQLException("No database connection");
} catch (NamingException e) {
e.printStackTrace();
throw new NoConnectionException();
} catch (SQLException e) {
e.printStackTrace();
throw new NoConnectionException();
catch (NullPointerException e) {
e.printStackTrace();
throw new NoConnectionException(); // obsluga bledy na wypadek jesli braknie wolnych polaczen do bazy
return conn;
}and at my ealier code i have error:
at logic.GetDataOracle.getrep_dws_wnioski_wstrzymane_graph(GetDataOracle.java:192)
at line: con = Database.createConnection();
in code:
public List getrep_dws_wnioski_wstrzymane_graph() {
int i = 0;
try {
con = Database.createConnection();
ps = (Statement) con.createStatement();
rs = ps.executeQuery("select data, klasa, ile_dni_wstrzymana, ile_wnioskow from stg1230.dwsww_wstrzymane_dws8 order by data, klasa, ile_dni_wstrzymana, ile_wnioskow");
while(rs.next()){
rep_dws_wnioski_wstrzymane_graph.add(i,new get_rep_dws_wnioski_wstrzymane_graph(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4)));
i++;
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
throw new NoConnectionException();
} finally {
try {
if(con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
throw new NoConnectionException();
return rep_dws_wnioski_wstrzymane_graph;
}so what's wrong?
i have limit max sessions 10 at oracle so i set at my connection pool 5 connections as max. But when i get max 5 sesssins and try to execute next query then i can't catch exception.. -
Oc4j connection pool: too much INACTIVE connections
I am publishing an application - developed using Eclipse and previously published in Tomcat (where it works perfectly for a long time) - within corporate servers using Oc4j version 10.1.3. The database server is Oracle 9g.
After the deployment operation, the application seems to work, but that happens during the work by users, there are still many connections whith status "INACTIVE", until to complete all the available connections.
The datasource is set as follows:
<connection-pool name="ConnectionPoolRichiestaPubblicazione">
<connection-factory factory-class="oracle.jdbc.pool.OracleDataSource"
user="REDAZIONE"
password="password"
url="jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)
(ADDRESS_LIST=(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)
(HOST=10.146.2.86)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.146.2.86)(PORT=1521)))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=XE)
(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))">
</connection-factory>
</connection-pool>
<managed-data-source
jndi-name="jdbc/RichiestaPubblicazioneDS"
name="RichiestaPubblicazioneDS"
connection-pool-name="ConnectionPoolRichiestaPubblicazione" />
The java code to establish a connection is as follows:
private Connection creaConnessioneDataSource(String nomedatasource) throws ConnessioneException{
LOGGER.debug("START");
try {
InitialContext context = new InitialContext();
DataSource ds = (DataSource)context.lookup(nomedatasource);
LOGGER.debug("URL DATASOURCE : " + ds.getConnection().getMetaData().getURL());
LOGGER.debug("USERNAME : " + ds.getConnection().getMetaData().getUserName());
this.conn = ds.getConnection();
catch( Exception e ) {
LOGGER.error("Errore nella connessione tramite datasource : " + StringUtils.getCustomStackTrace(e));
LOGGER.debug("END");
return this.conn;
Connections and statements are closed using the following methods:
public boolean chiudi(Connection conn){
LOGGER.debug("START");
boolean esito = false;
if (conn != null){
try {
conn.close();
esito = true;
LOGGER.debug("Connessione chiusa");
catch (SQLException e) {
LOGGER.error("Eccezione nella chiusura della connessione : " + e);
LOGGER.debug("END");
return esito;
public boolean chiudi(Statement stmt){
LOGGER.debug("START");
boolean esito = false;
if (stmt != null){
try {
stmt.close();
esito = true;
LOGGER.debug("Statement chiuso");
} catch (SQLException e) {
LOGGER.error("Eccezione nella chiusura dello statement : " + e);
e.printStackTrace();
LOGGER.debug("END");
return esito;
Here are a couple of examples of code that interact with the database:
public List<StatoRichiestaSintesi> getElencoStatiRichieste() throws ConnessioneException{
LOGGER.debug("START");
List<StatoRichiestaSintesi> listaStati=new LinkedList<StatoRichiestaSintesi>();
LOGGER.debug("Apriamo connessione e statement");
Connection conn = databaseManager.creaConnessioneDataSource(datasource);
Statement stmt = databaseManager.creaStatement(conn, false);
String sql="SELECT * FROM STATORICHIESTA";
try {
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
StatoRichiestaSintesi temp=new StatoRichiestaSintesi();
temp.setIdStato(rs.getString(1));
temp.setDescrizioneStato(rs.getString(2));
listaStati.add(temp);
LOGGER.debug("Numero record trovati : " + listaStati.size());
} catch (SQLException e) {
LOGGER.error("Eccezione di tipo SQL : " + StringUtils.getCustomStackTrace(e));
finally{
LOGGER.debug("Chiusura di statement e connessione");
databaseManager.chiudi(stmt);
databaseManager.chiudi(conn);
LOGGER.debug("END");
return listaStati;
Below is another example using PreparedStatement:
private synchronized void aggiungiIndicazioneProgetto(String idprogetto, String idrichiesta) {
LOGGER.debug("START");
LOGGER.debug("Creo un oggetto di tipo connessione");
Connection conn = databaseManager.creaConnessioneDataSource(datasource);
LOGGER.debug("Definisco una query sql");
String sql = "INSERT INTO RICHIESTAPROGETTO (IDRICHIESTA,IDPROGETTO) VALUES (?,?)";
LOGGER.debug("Dichiaro un oggetto di tipo preparedstatement");
PreparedStatement stmt = null;
try {
LOGGER.debug("Istanzio l'oggetto statement");
stmt = conn.prepareStatement(sql);
LOGGER.debug("Imposto i segnalibri della query");
stmt.setString(1, idrichiesta);
stmt.setString(2, idprogetto);
LOGGER.debug("Eseguo la query di inserimento del progetto");
stmt.executeUpdate();
} catch (SQLException e) {
LOGGER.error("Eccezione di tipo SQL : " + StringUtils.getCustomStackTrace(e));
finally {
LOGGER.debug("Chiusura di statement e connessione");
databaseManager.chiudi(stmt);
databaseManager.chiudi(conn);
LOGGER.debug("END");
Which may be the cause for the described behavior?
I hope someone help me..My problem is the following.
If I deploy my application with the illustred datasource in my local OC4J (10.1.3 in a Standalone Environment) all work fine.
The application creates a reasonable number of connections (in ORACLE - 10g Enterprise Edition Release 10.2.0.4.0 - db I run the query verification "select count(*) from v$session where username='MYAPPLICATION'"), and overall performance is very good.
If, however, to deploy on the production machine of corporate (always 10.1.3, but obviously in Oracle Application Server Environment) the
number of connections (status 'INACTIVE') grows massively, and this is saturated in a short time.
The exception that at the end from the application is that:
java.sql.SQLException: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316)
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:277)
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)
oracle.jdbc.driver.T4CTTIoauthenticate.receiveOsesskey(T4CTTIoauthenticate.java:243)
oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:304)
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:430)
oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:151)
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:608)
oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:218)
oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java:114)
oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:77)
oracle.jdbc.pool.OracleImplicitConnectionCache.makeCacheConnection(OracleImplicitConnectionCache.java:1361)
oracle.jdbc.pool.OracleImplicitConnectionCache.getCacheConnection(OracleImplicitConnectionCache.java:441)
oracle.jdbc.pool.OracleImplicitConnectionCache.getConnection(OracleImplicitConnectionCache.java:336)
oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:286)
oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:179)
oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:159)
oracle.oc4j.sql.DataSourceConnectionPoolDataSource.getPooledConnection(DataSourceConnectionPoolDataSource.java:57)
oracle.oc4j.sql.xa.EmulatedXADataSource.getXAConnection(EmulatedXADataSource.java:92)
oracle.oc4j.sql.spi.ManagedConnectionFactoryImpl.createXAConnection(ManagedConnectionFactoryImpl.java:211)
oracle.oc4j.sql.spi.ManagedConnectionFactoryImpl.createManagedConnection(ManagedConnectionFactoryImpl.java:170)
com.evermind.server.connector.ApplicationConnectionManager.createManagedConnection(ApplicationConnectionManager.java:1377)
oracle.j2ee.connector.ConnectionPoolImpl.createManagedConnectionFromFactory(ConnectionPoolImpl.java:327)
oracle.j2ee.connector.ConnectionPoolImpl.access$800(ConnectionPoolImpl.java:98)
also I add the other attributes of Connection Pool of the Datasource:
Connections:
Initial size of Connection Cache = 0
Minimum Number of Connections = 0
Maximum Number of Connections = -1
Connection Retry Interval (seconds) = 1
Maximum Connection Attempts = 3
Maximum Number of Statements Cached = 0
Lower Threshold Limit On Pool (%)= 20
Validate Connection = False
What I can do?
many thanks.. -
Connection Pool Name Missing from Drop Down when Creating a New Datasource
Hi All,
I'm running Weblogic Server 8.1. I've successfully created a connection pool for DB2 using the Non-XA JDBC driver from IBM (Version 7.1). When I attempt to create a datasource for this pool and un-check the "Honor Global Transactions" checkbox, the connection pool is missing from the dropdown on the next page of the wizard. If I check the checkbox, the connection pool appears in the list.
I experience this behavior on one instance of Weblogic Server, but not on another (I can see the pool whether or not the check box is checked).
Is there some setting on the connection pool that could cause this behavior?
Any help would be appreciated.
Thanks,
SteveSteven Grant wrote:
Hi All,
I'm running Weblogic Server 8.1. I've successfully created a connection pool for DB2 using the Non-XA JDBC driver from IBM (Version 7.1). When I attempt to create a datasource for this pool and un-check the "Honor Global Transactions" checkbox, the connection pool is missing from the dropdown on the next page of the wizard. If I check the checkbox, the connection pool appears in the list.
I experience this behavior on one instance of Weblogic Server, but not on another (I can see the pool whether or not the check box is checked).
Is there some setting on the connection pool that could cause this behavior?
Any help would be appreciated.
Thanks,
SteveI can't reproduce this on 8.1sp5...
I would have you compare the JDBCConnectionPool entry
between the two instances. -
Read data using 2 diff connection pool for same DB folder in physical layer
Hi All,
i am using two connection pool which have different dsn connection information (both are directed to different database name or database server)..
so if i view the data of any table, a prompt will come asking for the connection pool, so how do i automize it....?
how do i set the different connection pool for different tables?
please let me know if u need further informtaion to understand my problem..
thnx...thnx Stijn..
yupe that i know...
actually i have total of around 300 tables in physical layer (in both the schemas..) , around 12 fact and 100 dimension tables in bmm and same in the presentation layer...
so i think u can guess how many joins and other stuff, i have made in my bmm layer..
if now i will start modifying all this it will take lot of time...
i am just wondering that there is no alternative for this...
as when i check my data from the physical layer then a prompt ask for the connection pool (i have already made two connection pool..) so there could be some alternative way to automize the default connection pool setting for the tables/schemas folders in case if more than one connection pool exits under the same database in the physical layer...
isn't it?
thnx again..
Maybe you are looking for
-
Net Value in QUOTATION is not coming
Hello, Net value is not coming at HEADER LEVEL and ITEM LEVEL. Done with the all customization in case of pricing. At Sales Org level, Doc pricing procedure, Customer pricing procedure everything has been properly Customized. (Here i am not facing an
-
Sales order some line items are showing not relavant
Hi SD Guys, In sales order some line items are showing not relavant. Why are they showing a status of not complete or "not relevant"? Thanks Sunny
-
Will apple TV effectively make my TV a wireless external monitor
Would I be able to use the Apple TV to to display anything my iMac screen shows? ie could I use it to show an Excel spreadsheet or a Keynote presentation? Ta
-
Vendor(Plant) Currency is different in PO
Dear ALL, I am creating one purchase order, vendor is another plant (I treated as vendor ) While creating the PO, system picking the Currency (SAR) of my supplying plant. Currency is AED for my plant. For this type of PO, they already created one Pri
-
Changes not seen in Basic pay infotype
Hi Experts, I have faced the following issue: Dearness Allowance component that was set as Rs. 500 for a particular period (say Mar2008 to Apr 2010) was changed to Rs.750 in between the period (say Aug 2009). The set of employees need to be assigned