Automatic Reset of Connection Pools
Is there a way to have connection pools reset when the database they are pointing to restarts?
We are currently using these two options :
Test Reserved Connections
When this feature is set to true, WebLogic Server tests a connection before giving it to the client
Test Frequency
The number of seconds (between 0 and a positive 32-bit integer) between when WebLogic Server tests unused database connections
Nik
Message was edited by krisnik at Oct 27, 2004 8:42 AM
Similar Messages
-
BEA-001156 - connection pool reset failed on WLS 8.1.6
Hi,
I run WLS 8.1.6 on Linux and JRockit 1.4.2_12. I got the following error when I tried to reset a connection pool manually from the console. This does not happen all the time, so it is hard to reproduce. There is no change to database login credential. Any suggestions are appreciated. Thanks in advance.
BEA-141132
Dynamic invocation while executing action reset on etg:Locat
ion=nyclrwp_14654_2,Name=testPool,ServerRuntime=mycluster,
Type=JDBCConnectionPoolRuntime MBean instance
failed. The method reset with signature [] was invoked with
parameters as [].
weblogic.common.ResourceException: Refresh operation was partially successful, (1)
out of (1) resources could not be refreshed.
at weblogic.common.resourcepool.ResourcePoolImpl.refresh(ResourcePoolImpl.java:669)
at weblogic.jdbc.common.internal.ConnectionPool.reset(ConnectionPool.java:789)
at weblogic.jdbc.common.internal.ConnectionPoolRuntimeMBeanImpl.reset(ConnectionPoolRuntimeMBeanImpl.java:420)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:755)
at weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:734)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)
at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:990)
at weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:948)
at weblogic.management.internal.RemoteMBeanServerImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:491)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:434)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:429)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
BEA-001156
Stack trace associated with message 001129 follows:
java.sql.SQLException: JZ00L: Login failed. Examine the SQLWarnings chained to
this exception for the reason(s).
at com.sybase.jdbc2.jdbc.ErrorMessage.raiseError(ErrorMessage.java:506)
at com.sybase.jdbc2.tds.Tds.processLoginAckToken(Tds.java:3224)
at com.sybase.jdbc2.tds.Tds.doLogin(Tds.java:483)
at com.sybase.jdbc2.tds.Tds.login(Tds.java:405)
at com.sybase.jdbc2.jdbc.SybConnection.tryLogin(SybConnection.java:218)
at com.sybase.jdbc2.jdbc.SybConnection.regularConnect(SybConnection.java:195)
at com.sybase.jdbc2.jdbc.SybConnection.<init>(SybConnection.java:174)
at com.sybase.jdbc2.jdbc.SybConnection.<init>(SybConnection.java:126)
at com.sybase.jdbc2.jdbc.SybDriver.connect(SybDriver.java:179)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.makeConnection(ConnectionEnvFactory.java:251)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.refreshResource(ConnectionEnvFactory.java:330)
at weblogic.common.resourcepool.ResourcePoolImpl.refreshResource(ResourcePoolImpl.java:1694)
at weblogic.common.resourcepool.ResourcePoolImpl.refreshAvlResources(ResourcePoolImpl.java:1982)
at weblogic.common.resourcepool.ResourcePoolImpl.refresh(ResourcePoolImpl.java:664)
at weblogic.jdbc.common.internal.ConnectionPool.reset(ConnectionPool.java:789)
at weblogic.jdbc.common.internal.ConnectionPoolRuntimeMBeanImpl.reset(ConnectionPoolRuntimeMBeanImpl.java:420)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:755)
at weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:734)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)
at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:990)
BEA-001129
Received exception while creating connection for pool "cpl1C
onnectionPool": JZ00L: Login failed. Examine the SQLWarnings
chained to this exception for the reason(s).
BEA-001128 Connection for pool "testPool" closed.
BEA-001099 Connection pool "testPool" reset by "system"lei wang wrote:
Hi,
I run WLS 8.1.6 on Linux and JRockit 1.4.2_12. I got the following error when I tried to reset a connection pool manually from the console. This does not happen all the time, so it is hard to reproduce. There is no change to database login credential. Any suggestions are appreciated. Thanks in advance.
Please tell me why you are resetting the pool. The reason may have something
to do with the failure messages below. The root cause of these messages is
that the pool is trying to make a new JDBC connection to Sybase, in exactly
the same way it does all the time, but for whatever reason, the DBMS is
refusing the connection request. The pool should be OK anyway, ongoing,
as long as/when the DBMS is back up and accepting connection requests.
Joe
>
BEA-141132
Dynamic invocation while executing action reset on etg:Locat
ion=nyclrwp_14654_2,Name=testPool,ServerRuntime=mycluster,
Type=JDBCConnectionPoolRuntime MBean instance
failed. The method reset with signature [] was invoked with
parameters as [].
weblogic.common.ResourceException: Refresh operation was partially successful, (1)
out of (1) resources could not be refreshed.
at weblogic.common.resourcepool.ResourcePoolImpl.refresh(ResourcePoolImpl.java:669)
at weblogic.jdbc.common.internal.ConnectionPool.reset(ConnectionPool.java:789)
at weblogic.jdbc.common.internal.ConnectionPoolRuntimeMBeanImpl.reset(ConnectionPoolRuntimeMBeanImpl.java:420)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:755)
at weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:734)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)
at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:990)
at weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:948)
at weblogic.management.internal.RemoteMBeanServerImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:491)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:434)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:429)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
BEA-001156
Stack trace associated with message 001129 follows:
java.sql.SQLException: JZ00L: Login failed. Examine the SQLWarnings chained to
this exception for the reason(s).
at com.sybase.jdbc2.jdbc.ErrorMessage.raiseError(ErrorMessage.java:506)
at com.sybase.jdbc2.tds.Tds.processLoginAckToken(Tds.java:3224)
at com.sybase.jdbc2.tds.Tds.doLogin(Tds.java:483)
at com.sybase.jdbc2.tds.Tds.login(Tds.java:405)
at com.sybase.jdbc2.jdbc.SybConnection.tryLogin(SybConnection.java:218)
at com.sybase.jdbc2.jdbc.SybConnection.regularConnect(SybConnection.java:195)
at com.sybase.jdbc2.jdbc.SybConnection.<init>(SybConnection.java:174)
at com.sybase.jdbc2.jdbc.SybConnection.<init>(SybConnection.java:126)
at com.sybase.jdbc2.jdbc.SybDriver.connect(SybDriver.java:179)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.makeConnection(ConnectionEnvFactory.java:251)
at weblogic.jdbc.common.internal.ConnectionEnvFactory.refreshResource(ConnectionEnvFactory.java:330)
at weblogic.common.resourcepool.ResourcePoolImpl.refreshResource(ResourcePoolImpl.java:1694)
at weblogic.common.resourcepool.ResourcePoolImpl.refreshAvlResources(ResourcePoolImpl.java:1982)
at weblogic.common.resourcepool.ResourcePoolImpl.refresh(ResourcePoolImpl.java:664)
at weblogic.jdbc.common.internal.ConnectionPool.reset(ConnectionPool.java:789)
at weblogic.jdbc.common.internal.ConnectionPoolRuntimeMBeanImpl.reset(ConnectionPoolRuntimeMBeanImpl.java:420)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:755)
at weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:734)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)
at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:990)
BEA-001129
Received exception while creating connection for pool "cpl1C
onnectionPool": JZ00L: Login failed. Examine the SQLWarnings
chained to this exception for the reason(s).
BEA-001128 Connection for pool "testPool" closed.
BEA-001099 Connection pool "testPool" reset by "system" -
What's the difference between using a connection pool and a datasource
Howdy. I figure this is a newbie question, but I can't seem to find an
answer.
In the docs at bea, the datasource docs say
"DataSource objects provide a way for JDBC clients to obtain a DBMS
connection. A DataSource is an interface between the client program and the
connection pool. Each data source requires a separate DataSource object,
which may be implemented as a DataSource class that supports either
connection pooling or distributed transactions."
In there it says the datasource uses the connection pool, but other than
that, what is the difference between a connection pool and a datasource?Thanks for the info. I think it makes some sense. But it's a bit greek.
I'm sure it'll make more sense the more I work with it. Thanks.
"Chuck Nelson" <[email protected]> wrote in message
news:3dcac1f5$[email protected]..
>
Peter,
Here is a more formal definition of a DataSource from the Sun site
"A factory for connections to the physical data source that thisDataSource object
represents. An alternative to the DriverManager facility, a DataSourceobject
is the preferred means of getting a connection. An object that implementsthe
DataSource interface will typically be registered with a naming servicebased
on the JavaTM Naming and Directory (JNDI) API.
The DataSource interface is implemented by a driver vendor. There arethree types
of implementations:
Basic implementation -- produces a standard Connection object
Connection pooling implementation -- produces a Connection object thatwill automatically
participate in connection pooling. This implementation works with amiddle-tier
connection pooling manager.
Distributed transaction implementation -- produces a Connection objectthat may
be used for distributed transactions and almost always participates inconnection
pooling. This implementation works with a middle-tier transaction managerand
almost always with a connection pooling manager.
Does that help clarify the distinction?
Chuck Nelson
DRE
BEA Technical Support -
Reset connections in connection pool
Hi,
After DB restart (or connection failure) I try to recover the server. In order to do this, I want to tell to container connection pool to reset (clear) all available connections.
Does anybody knows how I can tell to container connection pool to reset (clear) all its connections (in standard way, or at least in Jboss)?
Thanks,
Igor.Am not sure in JBoss....but as far as my knowledge with WL gies...you don't have to do anything....The WL container continuosly tries to sync the connection with the DB....there is a Retry interval if the Connections to the DB fails....Better the Check out the Official Docs
-
Resetting a JDBC connection pool
I can write a cron job that calls RESET_POOL for periodic resets.
I wanted to confirm that there is no setting in the weblogic console that allows me to specify a time and weblogic perform the reset at that interval. Basically do the cron for me.
Thanks,
patJDBC->Connection Pools->Name of Pool->Connections
->Advanced options
Test Frequency
The number of seconds (between 0 and a positive 32-bit integer) between when WebLogic Server tests unused database connections
Nik -
Error after resetting connection pool
FYI on the fix--
I moved back from sp9 to sp8 and the bug went away. Can't wait for sp10...
--tka
"tracya" <[email protected]> wrote in message
news:3b44bdb5$[email protected]..
I am having a problem with connection pools using 5.1.0, jdk 1.2.2, andthe
oracle 8.1.7 thin drivers.
WL starts up fine and will happily service db transactions until I resetthe
connection pool. The connection pool seems to reset fine, but then all
future db connections are corrupt. Has anyone else seen anything likethis?
>
Thanks!
I am using the following code to reset the pool:
Hashtable htEnv = new Hashtable();
htEnv.put(InitialContext.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");// URL for the WebLogic Server
htEnv.put(InitialContext.PROVIDER_URL, "t3://localhost:" +
GetAppServerListenPortNum());
htEnv.put(InitialContext.SECURITY_PRINCIPAL, sAppUser); //system
htEnv.put(InitialContext.SECURITY_CREDENTIALS, sAppUserPassword);
InitialContext icContext = new InitialContext(htEnv);
JdbcServices jdbc =
(JdbcServices)icContext.lookup("weblogic.jdbc.JdbcServices");
jdbc.getPool(sPoolName).reset();
Here is the code from the props file:
weblogic.jdbc.connectionPool.DBPool_1=\
url=jdbc:oracle:thin:@niledev:1521:niledev,\
driver=oracle.jdbc.driver.OracleDriver,\
loginDelaySecs=1,\
initialCapacity=1,\
maxCapacity=10,\
capacityIncrement=1,\
allowShrinking=true,\
shrinkPeriodMins=15,\
testTable=DUAL,\
refreshMinutes=5,\
testConnsOnReserve=true,\
props=user=XXXX;password=XXXXX
weblogic.allow.reserve.weblogic.jdbc.connectionPool.DBPool_1=guest -
RCA Connection Pool idle Time-Out takes no effect !
My question description goes here.
According to JCA specification, I developed my 'ManagedConnectionImpl' class from the interface 'ManagedConnection'. I realize the 'destroy()' function to send out logout request to the EIS.
Then I deployed the connector in Sun Java System Application Server, I noticed there are two parameters in Connection Pool part, they are:
1. Idle Timeout. It said it's the maximum time that a connection can remain idle in the pool. I assume the connection will be removed after the specific time expired and before it's removed it will call the recallable function, 'destroy()', in my concrete class, 'ManagedConnectionImpl'.
2. Pool Resize Quantity. it said it's number of connections to be removed when pool idle time expired.
I am weird about it. I think EIS had itself session control strategy, if the specific session time-out expired, it will invalidate this session. So I think we will set 'Idle Timeout' in application server to be shorter than the EIS session time-out. If the 'Idle Timeout' in application server expired, it should remove all connections inside otherwise maybe the connection with invalid session will exist! (the background knowledge is our system will return back soap fault when it meets invalid session, so the invalid connections will not be removed by switching on your configuration item, 'On Any Failure')
So I set "inital and minimum pool size" to 8, "maximum pool size" to 32 and "Pool Resize Quantity" to 32. (I expect AS to remove all when pool idle time expired)
After deploying, I send out requests at the first round and wait for the time expired but I can't see the desired logout requests from pool automatically even one. Firstly I guess if my recallable function definition is wrong but when I shut down the Application Server, the desired logout requests are sent out from pool automatically. So I think my recallable function definition is workable.
What's your comments on it?
P.S.
I am using Sun Java System Application Server 8.1.
Thanks in advance!
BRs
/LeoI have had following test to ensure I sent out notification to listener.
[#|2005-08-23T16:14:25.061+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
It's in managed env!|#]
[#|2005-08-23T16:14:25.062+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
enter matchManagedConnections() !|#]
[#|2005-08-23T16:14:25.062+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
try to find a matching and existing one, reuse it!|#]
[#|2005-08-23T16:14:25.062+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
Found a matching and existing one, reuse it!|#]
[#|2005-08-23T16:14:25.495+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
tearDown() is called, the application-level connection is released!|#]
[#|2005-08-23T16:14:25.496+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
enter calling close() of managed connection.|#]
[#|2005-08-23T16:14:25.496+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
Start calling close() of managed connection.|#]
[#|2005-08-23T16:14:25.496+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
start to notify the listener the completeness of connection.|#]
[#|2005-08-23T16:14:25.496+0800|INFO|sun-appserver-pe8.1_01|javax.enterprise.system.stream.out|_ThreadID=12;|
notify the listener the completeness of connection successfully.|#]
Whether it's related with the initial and minimum number parameter? Although I found it will not be created during AS start-up and will be created at the first request.
Whether it shall be kept to meet the minimum requirement? I have failed to set it to 0. -
WL Connection Pool bad behaviour
My WebLogic server is configurated with two connection pools towards an Oracle
and a Sql db servers.
Unfortunately, when a DB server goes down the WebLogic connection pool is not
refreshed until I RE-START the WebLogic server.
In particular, it seesms that a db failure causes WebLogic connection pool to
have bad connections ("connection CLOSED", in jdbc log...) that are not good to
execute Stored Procedures.
Have anyone find this problem?
Could someone recommend me a solution to face to this problem?
Thank you very much in advance!
MauroMauro,
Could you post text of the exception and the source code where it happens?
Slava
Hi Slava,
yes of course, I tried!
With TestOnReserve/Release turned ON WebLogic understands that the poolconnections
are "closed" and when I ask a connection the exception "No ResourcesAvailable"
is thrown.
On the contrary, with TestOnReserve turned OFF, WebLogic does not test thepool
and grants the connection on demand, but the stored procedures (only thestored
procedures!!??) executed on this connection throw the exception("connection closed").
>
I tried also to catch the failure and to refresh the connection poolthrough the
weblogic.jdbc.JdbcServices (please see the attached file), but the reset()method
has no effects...
My configuration is WebLogic6.0 server with Service Pack 2 installed. Maybe that
the JdbcServices are deprecated in this version.
Thank you very much!
Mauro
"Slava Imeshev" <[email protected]> wrote:
Hi Mauro,
Have you turned TestOnReserve on?
Regards,
Slava Imeshev
"Mauro De Santis" <[email protected]> wrote in message
news:3b2e2557$[email protected]..
My WebLogic server is configurated with two connection pools towardsan
Oracle
and a Sql db servers.
Unfortunately, when a DB server goes down the WebLogic connection poolis
not
refreshed until I RE-START the WebLogic server.
In particular, it seesms that a db failure causes WebLogic connectionpool
to
have bad connections ("connection CLOSED", in jdbc log...) that arenot
good to
execute Stored Procedures.
Have anyone find this problem?
Could someone recommend me a solution to face to this problem?
Thank you very much in advance!
Mauro -
Doubts concerning External Connection Pool
A few questions:
1. How can I set up an external connection pool with toplink? or in another words, assuming that I have successfully configured a connection pool (and a datasource) on my weblogic app-server, how do I configure Toplink to use the same?
2. I am trying to achieve the above (refer point 1), by defining my custom connector (by extending TOPLink.Public.Sessions.DefaultConnector). The custom connector provides connections using the dataSource.getConnection(). Now, the question is
- Where will the pooling happen in this case? i.e. Will Toplink use its own connection pool (populate its own connection pool with container managed data source), and issue connections (container managed) from there or will it make use of the container managed pooling (and ask for connections from the container managed pool, as and when required)? The subtle difference being, weblogic will not be able to validate a connection before issue in the former case.
3. This question is similar to point 2, but talks in terms of a practical example. Assuming that if I am using the custom connector successfully in my code, then if I pull out the network cord and reconnect again, I expect the container to provide me with a valid connection (as weblogic can be configured to perform a validity check on a connection before issuing). I am getting a 'connection reset by peer' error in my application (indicating that either the container fails to provide a valid connection, or toplink does not use the container managed pool effectively). I guess, Toplink still uses its own pool but this time it is pooling container managed dataSources. Since the connections are issued from Toplink and not container, here is no validation/reconnection happening for the connection, before issue. Please comment if I am thinking in the right direction or not. If not, how you can explain the above failure?
4. My aim is to utilise the container's connection pool, and Toplink's ability to perform the rest of the things (including transactions). Is that possible?Vikas,
TopLink can easily be configured to use the external connection pool of an server. This can be accomplished with API but more commonly using the sessions.xml configuration file for the SessionManager. In the product we ship examples for WLS that make use of data sources configured in the server. The portion of the sessions.XML file in question is:
<login>
<user-name>weblogic</user-name>
<password>weblogic</password>
<datasource>java:comp/env/jdbc/ejbJTSDataSource</datasource>
<non-jts-datasource>java:comp/env/jdbc/ejbNonJTSDataSource</non-jts-datasource>
<uses-external-transaction-controller>true</uses-external-transaction-controller>
<uses-external-connection-pool>true</uses-external-connection-pool>
</login>
<external-transaction-controller-class>oracle.toplink.jts.wls.WebLogicJTSExternalTransactionController</external-transaction-controller-class>
This sets TopLink up with both data source access to the JTA and non-JTA connection pools. The full example also includes a domain where the data source is configured.
When TopLink is using the connection pool of the server (external connection pooling) it will not pool its own connections. TopLink will request a connection from the pool each time one is required and release it back when done. This leaves the server responsible for the number of connections available and also for supporting database re-connection.
Doug -
How to use JDBC Connection Pools in a standalone application?
Hi, there,
I have a question about how to use JDBC Connection Pools in an application. I know well about connection pool itself, but I am not quite sure how to keep the pool management object alive all the time to avoid being destroyed by garbage collection.
for example, at the website: http://www.developer.com/java/other/article.php/626291, there is a simple connection pool implementation. there are three classes:JDBCConnection, the application's gateway to the database; JDBCConnectionImpl, the real class/object to provide connection; and JDBCPool, the management class to manage connection pool composed by JDBCConnectionImpl. JDBCPool is designed by Singleton pattern to make sure only one instance. supposing there is only one client to use connection for many times, I guess it's ok because this client first needs instantiate JDBCPool and JDBCConnectionImpl and then will hold the reference to JDBCPool all the time. but how about many clients want to use this JDBCPool? supposing client1 finishes using JDBCPool and quits, then JDBCPool will be destroyed by garbage collection since there is no reference to it, also all the connections of JDBCConnectionImpl in this pool will be destroyed too. that means the next client needs recreate pool and connections! so my question is that if there is a way to keep pool management instance alive all the time to provide connection to any client at any time. I guess maybe I can set the pool management class as daemon thread to solve this problem, but I am not quite sure. besides, there is some other problems about daemon thread, for example, how to make sure there is only one daemon instance? how to quit it gracefully? because once the whole application quits, the daemon thread also quits by force. in that case, all the connections in the pool won't get chance to close.
I know there is another solution by JNDI if we develop servlet application. Tomcat provides an easy way to setup JNDI database pooling source that is available to JSP and Servlet. but how about a standalone application? I mean there is no JNDI service provider. it seems a good solution to combine Commons DBCP with JNID or Apache's Naming (http://jakarta.apache.org/commons/dbcp/index.html). but still, I don't know how to keep pool management instance alive all the time. once we create a JNDI enviroment or naming, if it will save in the memory automatically all the time? or we must implement it as a daemon thread?
any hint will be great apprieciated!
SamTo my knoledge the pool management instance stays alive as long as the pool is alive. What you have to figure out is how to keep a reference to it if you need to later access it.
-
Has anyone run the connection pooling for mysql & tomcat successfully?
I'm trying to set up connection pooling. I'm following the how-to page at
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html
But when i test the DBTest/test.jsp file, tomcat displays an error =
could not load jdbc driver class 'null'(msdos)
i have placed all the required .jar files in the tomcat lib.
below is the cofiguration i did to the server.xml file
<!-- Example Server Configuration File -->
<!-- Note that component elements are nested corresponding to their
parent-child relationships with each other -->
<!-- A "Server" is a singleton element that represents the entire JVM,
which may contain one or more "Service" instances. The Server
listens for a shutdown command on the indicated port.
Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" or "Loggers" at this level.
-->
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<!-- Uncomment these entries to enable JMX MBeans support -->
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
debug="0"/>
<!-- Global JNDI resources -->
<GlobalNamingResources>
<!-- Test entry for demonstration purposes -->
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved">
</Resource>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" (and therefore the web applications visible
within that Container). Normally, that Container is an "Engine",
but this is not required.
Note: A "Service" is not itself a "Container", so you may not
define subcomponents such as "Valves" or "Loggers" at this level.
-->
<!-- Define the Tomcat Stand-Alone Service -->
<Service name="Tomcat-Standalone">
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Each Connector passes requests on to the
associated "Container" (normally an Engine) for processing.
By default, a non-SSL HTTP/1.1 Connector is established on port 8080.
You can also enable an SSL HTTP/1.1 Connector on port 8443 by
following the instructions below and uncommenting the second Connector
entry. SSL support requires the following steps (see the SSL Config
HOWTO in the Tomcat 4.0 documentation bundle for more detailed
instructions):
* Download and install JSSE 1.0.2 or later, and put the JAR files
into "$JAVA_HOME/jre/lib/ext".
* Execute:
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (Unix)
with a password value of "changeit" for both the certificate and
the keystore itself.
By default, DNS lookups are enabled when a web application calls
request.getRemoteHost(). This can have an adverse impact on
performance, so you can disable it by setting the
"enableLookups" attribute to "false". When DNS lookups are disabled,
request.getRemoteHost() will return the String version of the
IP address of the remote client.
-->
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8081 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />
<!-- Note : To disable connection timeouts, set connectionTimeout value
to -1 -->
<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<!--
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="100" debug="0" scheme="https" secure="true"
useURIValidationHack="false" disableUploadTimeout="true">
<Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
clientAuth="false" protocol="TLS" />
</Connector>
-->
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8009" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="20000"
useURIValidationHack="false"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--
<Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
port="8009" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0"/>
-->
<!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
<!-- See proxy documentation for more information about using this. -->
<!--
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8082" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" connectionTimeout="20000"
proxyPort="80" useURIValidationHack="false" />
-->
<!-- Define a non-SSL legacy HTTP/1.1 Test Connector on port 8083 -->
<!--
<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8083" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" />
-->
<!-- Define a non-SSL HTTP/1.0 Test Connector on port 8084 -->
<!--
<Connector className="org.apache.catalina.connector.http10.HttpConnector"
port="8084" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" />
-->
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host). -->
<!-- Define the top level container in our container hierarchy -->
<Engine name="Standalone" defaultHost="localhost" debug="0">
<!-- The request dumper valve dumps useful debugging information about
the request headers and cookies that were received, and the response
headers and cookies that were sent, for all requests received by
this instance of Tomcat. If you care only about requests to a
particular virtual host, or a particular application, nest this
element inside the corresponding <Host> or <Context> entry instead.
For a similar mechanism that is portable to all Servlet 2.3
containers, check out the "RequestDumperFilter" Filter in the
example application (the source for this filter may be found in
"$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters").
Request dumping is disabled by default. Uncomment the following
element to enable it. -->
<!--
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
-->
<!-- Global logger unless overridden at lower levels -->
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="catalina_log." suffix=".txt"
timestamp="true"/>
<!-- Because this Realm is here, an instance will be shared globally -->
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
<!-- Comment out the old realm but leave here for now in case we
need to go back quickly -->
<!--
<Realm className="org.apache.catalina.realm.MemoryRealm" />
-->
<!-- Replace the above Realm with one of the following to get a Realm
stored in a database and accessed via JDBC -->
<!--
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="org.gjt.mm.mysql.Driver"
connectionURL="jdbc:mysql://localhost/authority"
connectionName="test" connectionPassword="test"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" />
-->
<!--
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
connectionName="scott" connectionPassword="tiger"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" />
-->
<!--
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="sun.jdbc.odbc.JdbcOdbcDriver"
connectionURL="jdbc:odbc:CATALINA"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" />
-->
<!-- Define the default virtual host -->
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/my-jsp" docBase="c:\JSP-Files" debug="0"
privileged="true" reloadable="true" />
<Context path="" docBase="c:\Inetpub\wwwroot" debug="0" privileged="true" />
<Context path="/sharon" docBase="C:\Tomcat 4.1\webapps\sharon" debug="0" privileged="true" />
<!-- Normally, users must authenticate themselves to each web app
individually. Uncomment the following entry if you would like
a user to be authenticated the first time they encounter a
resource protected by a security constraint, and then have that
user identity maintained across all web applications contained
in this virtual host. -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>
-->
<!-- Access log processes all requests for this virtual host. By
default, log files are created in the "logs" directory relative to
$CATALINA_HOME. If you wish, you can specify a different
directory with the "directory" attribute. Specify either a relative
(to $CATALINA_HOME) or absolute path to the desired directory.
-->
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
-->
<!-- Logger shared by all Contexts related to this virtual host. By
default (when using FileLogger), log files are created in the "logs"
directory relative to $CATALINA_HOME. If you wish, you can specify
a different directory with the "directory" attribute. Specify either a
relative (to $CATALINA_HOME) or absolute path to the desired
directory.-->
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>
<!-- Define properties for each web application. This is only needed
if you want to set non-default properties, or have web application
document roots in places other than the virtual host's appBase
directory. -->
<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0"/>
-->
<!-- Tomcat Examples Context -->
<Context path="/examples" docBase="examples" debug="0"
reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>
<Ejb name="ejb/EmplRecord" type="Entity"
home="com.wombat.empl.EmployeeRecordHome"
remote="com.wombat.empl.EmployeeRecord"/>
<!-- If you wanted the examples app to be able to edit the
user database, you would uncomment the following entry.
Of course, you would want to enable security on the
application as well, so this is not done by default!
The database object could be accessed like this:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
UserDatabase database =
(UserDatabase) envCtx.lookup("userDatabase");
-->
<!--
<ResourceLink name="userDatabase" global="UserDatabase"
type="org.apache.catalina.UserDatabase"/>
-->
<!-- PersistentManager: Uncomment the section below to test Persistent
Sessions.
saveOnRestart: If true, all active sessions will be saved
to the Store when Catalina is shutdown, regardless of
other settings. All Sessions found in the Store will be
loaded on startup. Sessions past their expiration are
ignored in both cases.
maxActiveSessions: If 0 or greater, having too many active
sessions will result in some being swapped out. minIdleSwap
limits this. -1 means unlimited sessions are allowed.
0 means sessions will almost always be swapped out after
use - this will be noticeably slow for your users.
minIdleSwap: Sessions must be idle for at least this long
(in seconds) before they will be swapped out due to
maxActiveSessions. This avoids thrashing when the site is
highly active. -1 or 0 means there is no minimum - sessions
can be swapped out at any time.
maxIdleSwap: Sessions will be swapped out if idle for this
long (in seconds). If minIdleSwap is higher, then it will
override this. This isn't exact: it is checked periodically.
-1 means sessions won't be swapped out for this reason,
although they may be swapped out for maxActiveSessions.
If set to >= 0, guarantees that all sessions found in the
Store will be loaded on startup.
maxIdleBackup: Sessions will be backed up (saved to the Store,
but left in active memory) if idle for this long (in seconds),
and all sessions found in the Store will be loaded on startup.
If set to -1 sessions will not be backed up, 0 means they
should be backed up shortly after being used.
To clear sessions from the Store, set maxActiveSessions, maxIdleSwap,
and minIdleBackup all to -1, saveOnRestart to false, then restart
Catalina.
-->
<!--
<Manager className="org.apache.catalina.session.PersistentManager"
debug="0"
saveOnRestart="true"
maxActiveSessions="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
-->
<Environment name="maxExemptions" type="java.lang.Integer"
value="15"/>
<Parameter name="context.param.name" value="context.param.value"
override="false"/>
<Resource name="jdbc/EmployeeAppDb" auth="SERVLET"
type="javax.sql.DataSource"/>
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>user</name>
<value>javauser</value>
</parameter>
<parameter>
<name>password</name>
<value>javadude</value>
</parameter>
<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
</parameter>
</ResourceParams>
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"/>
<ResourceParams name="mail/Session">
<parameter>
<name>mail.smtp.host</name>
<value>localhost</value>
</parameter>
</ResourceParams>
<ResourceLink name="linkToGlobalResource"
global="simpleValue"
type="java.lang.Integer"/>
</Context>
</Host>
</Engine>
</Service>
<!-- The MOD_WEBAPP connector is used to connect Apache 1.3 with Tomcat 4.0
as its servlet container. Please read the README.txt file coming with
the WebApp Module distribution on how to build it.
(Or check out the "jakarta-tomcat-connectors/webapp" CVS repository)
To configure the Apache side, you must ensure that you have the
"ServerName" and "Port" directives defined in "httpd.conf". Then,
lines like these to the bottom of your "httpd.conf" file:
LoadModule webapp_module libexec/mod_webapp.so
WebAppConnection warpConnection warp localhost:8008
WebAppDeploy examples warpConnection /examples/
The next time you restart Apache (after restarting Tomcat, if needed)
the connection will be established, and all applications you make
visible via "WebAppDeploy" directives can be accessed through Apache.
-->
<!-- Define an Apache-Connector Service -->
<!--
<Service name="Tomcat-Apache">
<Connector className="org.apache.catalina.connector.warp.WarpConnector"
port="8008" minProcessors="5" maxProcessors="75"
enableLookups="true" appBase="webapps"
acceptCount="10" debug="0"/>
<Engine className="org.apache.catalina.connector.warp.WarpEngine"
name="Apache" debug="0">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="apache_log." suffix=".txt"
timestamp="true"/>
<Realm className="org.apache.catalina.realm.MemoryRealm" />
</Engine>
</Service>
-->
</Server>
Pleas4 help!!!you have your driver jar in Tomcat\common\lib?
if so, check your classpath, it could be that. -
Unable to get the expected results with connection pooling
Hi All,
I have been trying to create JDBC connection pooling provided by the Apache Tomcat 4.0 with MySQL 4.0.16-nt at http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html and my configuration is as follows
server.xml
<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>javauser</value>
</parameter>
<parameter>
<name>password</name>
<value>javadude</value>
</parameter>
<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
test.jsp
<jsp:useBean id="foo" class="foo.DBTest" scope="page" />
<html>
<head>
<title>DB Test</title>
</head>
<body>
<%
foo.DBTest tst = new foo.DBTest();
tst.init();
%>
<h2>Results</h2>
Foo <%= tst.getFoo() %>
Bar <%= tst.getBar() %>
</body>
</html>
DBTest.java package
package foo;
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class DBTest {
String foo = "Not Connected";
int bar = -1;
public void init() {
try{
Context ctx = new InitialContext();
if(ctx == null )
throw new Exception("Boom - No Context");
DataSource ds =
(DataSource)ctx.lookup(
"java:comp/env/jdbc/TestDB");
if (ds != null) {
Connection conn = ds.getConnection();
if(conn != null) {
foo = "Got Connection "+conn.toString();
Statement stmt = conn.createStatement();
ResultSet rst =
stmt.executeQuery(
"select id, foo, bar from testdata");
if(rst.next()) {
foo=rst.getString(2);
bar=rst.getInt(3);
conn.close();
}catch(Exception e) {
e.printStackTrace();
public String getFoo() { return foo; }
public int getBar() { return bar;}
Now when I am trying to run this on browser, everything goes fine except it doesn't show the expected results, instead of that it shows following in the browser:-
Results
Foo Not Connected
Bar -1
Can anybody help me out as to why I am getting such result while everything is right from my side. Is the program unable to connect to the database or it is not supporting the JDBC version that I am using.
Thanks in advance
Regards
VikasOh, I think this is not the right place to post this message. I have placed the same in other place of this forum. please ignore this post here!!
MJ, by the way the link that you suggested is not useful to me.
Thank you -
Unable to get Results using Connection Pool
Hi All,
I have been trying to create JDBC connection pooling provided by the Apache Tomcat 4.0 with MySQL 4.0.16-nt at http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html and my configuration is as follows
server.xml
<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>javauser</value>
</parameter>
<parameter>
<name>password</name>
<value>javadude</value>
</parameter>
<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
test.jsp
<jsp:useBean id="foo" class="foo.DBTest" scope="page" />
<html>
<head>
<title>DB Test</title>
</head>
<body>
<%
foo.DBTest tst = new foo.DBTest();
tst.init();
%>
<h2>Results</h2>
Foo <%= tst.getFoo() %>
Bar <%= tst.getBar() %>
</body>
</html>
DBTest.java package
package foo;
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class DBTest {
String foo = "Not Connected";
int bar = -1;
public void init() {
try{
Context ctx = new InitialContext();
if(ctx == null )
throw new Exception("Boom - No Context");
DataSource ds =
(DataSource)ctx.lookup(
"java:comp/env/jdbc/TestDB");
if (ds != null) {
Connection conn = ds.getConnection();
if(conn != null) {
foo = "Got Connection "+conn.toString();
Statement stmt = conn.createStatement();
ResultSet rst =
stmt.executeQuery(
"select id, foo, bar from testdata");
if(rst.next()) {
foo=rst.getString(2);
bar=rst.getInt(3);
conn.close();
}catch(Exception e) {
e.printStackTrace();
public String getFoo() { return foo; }
public int getBar() { return bar;}
Now when I am trying to run this on browser, everything goes fine except it doesn't show the expected results, instead of that it shows following in the browser:-
Results
Foo Not Connected
Bar -1
Can anybody help me out as to why I am getting such result while everything is right from my side. Is the program unable to connect to the database or it is not supporting the JDBC version that I am using.
Thanks in advance
Regards
VikasI've seen cases where NOT using the ResourceParams section, and instead using attributes in the Resource section will fix this. Don't know why.
i.e.
Instead of using:
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>use the driver attribute of the Resource tag:
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
driver="org.gjt.mm.mysql.Driver"/>Also note...I don't use the org.gjt.mm.mysql.Driver class (which is in the distribution), I use com.mysql.jdbc.Driver. Any reason you don't? This could be part of it. I don't really know. -
Can't create connection pool using weblogic 6.1 with Oracle thin driver
Hi !
I have tried to create a connection pool from adminconsole. My CLASSPATH setting
is as follows :
F:\SOAP\soap-2_2\lib;F:\SOAP\soap-2_2;
D:\Oracle\Ora81\jdbc\lib\classes12.zip;
D:\Oracle\Ora81\jdbc\lib\nls_charset12.zip;
D:\Oracle\Ora81\jdbc\lib\classes111.zip;
F:\SOAP\soap-2_2\lib\jaf-1.0.1\activation.jar;
D:\Oracle\Ora8\Apache\Jsdk\src\javax\servlet\http;
D:\Oracle\Ora81\Apache\Jsdk\src\javax\servlet;
D:\Oracle\Ora81\lib;
F:\ant\jakarta-ant1.\bin;
E:\weblogic\oci\classes;
E:\weblogic\oci\classes\weblogic\xml\license;
E:\weblogic\oci\license;
E:\bea\wlserver6.1\lib;
E:\PetStoreHome\petstore1.3;
Following is the configuration.
#Oracle thin driver Method #2
weblogic.jdbc.connectionPool.thin=\
url=jdbc:oracle:thin:@test:1521:PROJECT,\
driver=oracle.jdbc.driver.OracleDriver,\
initialCapacity=4,\
maxCapacity=10,\
capacityIncrement=1,\
props=user=xxx;password=xxx;server=test
#Add a TXDataSource for the connection pool:
weblogic.jdbc.TXDataSource.weblogic.jdbc.jts.thin=thin
# Add an ACL for the connection pool:
weblogic.allow.reserve.weblogic.jdbc.connectionPool.thin=everyone
I did append the file weblogic.properties with the above config. Now when I start
the Weblogic server I get the following error :
Starting WebLogic Server ....
<Nov 29, 2001 2:24:16 PM EST> <Notice> <Management> <Loading configuration file
.\config\petstore\config.xml ...>
<Nov 29, 2001 2:24:22 PM EST> <Notice> <WebLogicServer> <Starting WebLogic Admin
Server "petstoreServer" for domain "petstore">
<Nov 29, 2001 2:24:26 PM EST> <Notice> <Management> <Starting discovery of Manag
ed Server... This feature is on by default, you may turn this off by passing -Dw
eblogic.management.discover=false>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data Source creation:
weblogic.common.ResourceException: DataSource(jdbcthin.SignOnDB) can't be creat
ed with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data Source creation:
weblogic.common.ResourceException: DataSource(jdbcthin.EstoreDB) can't be creat
ed with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data Source creation:
weblogic.common.ResourceException: DataSource(jdbcthin.InventoryDB) can't be
cr
eated with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data Source creation:
weblogic.common.ResourceException: DataSource(weblogic.jdbc.jts.thin) can't be
created with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:41 PM EST> <Notice> <Management> <Application Poller not star
ted for production server.>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After the server has booted, your browser should
automatically launch and point to the WebLogic Server
Tour running on this server. If your browser fails to
launch, point your browser to the URL
"http://burtsun:7001"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<Nov 29, 2001 2:24:41 PM EST> <Notice> <WebLogicServer> <ListenThread listening
on port 7001>
<Nov 29, 2001 2:24:41 PM EST> <Notice> <WebLogicServer> <SSLListenThread listeni
ng on port 7002>
<Nov 29, 2001 2:24:42 PM EST> <Notice> <WebLogicServer> <Started WebLogic Admin
Server "petstoreServer" for domain "petstore" running in Production Mode>
Could anyone please help me ?
Thanks
..MadhuriMadhuri wrote:
>
Hi Joe !
I didn't get what you would like to point out. Actully, I am using same config.,
but not to disclose the info. I gave you @test and username/password xxx/xxx.Ok. Now, assuming your pool looks like what I showed, the issue is probably
that there are multiple Oracle driver zips around, and your standlaone program
is using a different, newer, better one than the server. Our weblogic jar files
include a classes12.zip Oracle thin driver, but there are multiple versions of
classes12.zip, and the latest from oracle is better than the one we sealed into
our packaging. Please use jave -verbose to identify exactly which Oracle sip file
you are using in the successful case, then make sure this zip file comes before
any weblogic stuff in your weblogic server's classpath, so we'll use the same
driver. This should work. Edit the script you sue to start weblogic to verify
the classpath does end up with the oracle driver ahead of all weblogic stuff.
Joe
>
Please let me know.
Thanks
.Madhuri
Joseph Weinstein <[email protected]> wrote:
Madhuri wrote:
Hi Joe !
Here is the sample java code. Please let me know how I can test thisin weblogic
6.1.
Thanks
.MadhuriWell fine! That was easy. Your pool definition didn't have the same URL
or
user or password as this code. Try this for your pool definition:
weblogic.jdbc.connectionPool.thin=\
url=jdbc:oracle:thin:@adl-gbsdevel:1521:PROJECT,\
driver=oracle.jdbc.driver.OracleDriver,\
initialCapacity=10,\
maxCapacity=10,\
capacityIncrement=1,\
testConnsOnReserve=true,\
testTable=dual,\
props=user=mkelkar;password=mkelkar
Let me know,,,
Joe
Joseph Weinstein <[email protected]> wrote:
The key is in the log:
Could not create pool connection.
The DBMS driver exception was:
java.sql.SQLException: invalid arguments in call
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
Now we need to simplify the problem. Please make a simple 15-line
standalone
Java program like you'd find with the Oracle driver's examples, with
no
weblogic code in the picture. Just make a JDBC connection using Oracle's
driver, and show me that code. Then I can translate that into a pool
definition.
Joe
Madhuri wrote:
Hi Joe !
Thanks for your prompt reply. I tried the way you suggested but
it
still it gives
me the same error. I am attching here the weblogic.log file.
Thanks again
..Madhuri
Joseph Weinstein <[email protected]> wrote:
We'd want to see the log during booting, where the pool
is being created to see why that failed. Try a pool
definition with no blank lines, no whitespace at the
end of lines, and no server property. The thin driver
doesn't like that:
weblogic.jdbc.connectionPool.thin=\
url=jdbc:oracle:thin:@test:1521:PROJECT,\
driver=oracle.jdbc.driver.OracleDriver,\
initialCapacity=4,\
maxCapacity=10,\
capacityIncrement=1,\
props=user=xxx;password=xxx
Joe
Madhuri wrote:
Hi !
I have tried to create a connection pool from adminconsole. My
CLASSPATH
setting
is as follows :
F:\SOAP\soap-2_2\lib;F:\SOAP\soap-2_2;
D:\Oracle\Ora81\jdbc\lib\classes12.zip;
D:\Oracle\Ora81\jdbc\lib\nls_charset12.zip;
D:\Oracle\Ora81\jdbc\lib\classes111.zip;
F:\SOAP\soap-2_2\lib\jaf-1.0.1\activation.jar;
D:\Oracle\Ora8\Apache\Jsdk\src\javax\servlet\http;
D:\Oracle\Ora81\Apache\Jsdk\src\javax\servlet;
D:\Oracle\Ora81\lib;
F:\ant\jakarta-ant1.\bin;
E:\weblogic\oci\classes;
E:\weblogic\oci\classes\weblogic\xml\license;
E:\weblogic\oci\license;
E:\bea\wlserver6.1\lib;
E:\PetStoreHome\petstore1.3;
Following is the configuration.
#Oracle thin driver Method #2
weblogic.jdbc.connectionPool.thin=\
url=jdbc:oracle:thin:@test:1521:PROJECT,\
driver=oracle.jdbc.driver.OracleDriver,\
initialCapacity=4,\
maxCapacity=10,\
capacityIncrement=1,\
props=user=xxx;password=xxx;server=test
#Add a TXDataSource for the connection pool:
weblogic.jdbc.TXDataSource.weblogic.jdbc.jts.thin=thin
# Add an ACL for the connection pool:
weblogic.allow.reserve.weblogic.jdbc.connectionPool.thin=everyone
I did append the file weblogic.properties with the above config.
Now
when I start
the Weblogic server I get the following error :
Starting WebLogic Server ....
<Nov 29, 2001 2:24:16 PM EST> <Notice> <Management> <Loading
configuration
file
\config\petstore\config.xml ...>
<Nov 29, 2001 2:24:22 PM EST> <Notice> <WebLogicServer> <Starting
WebLogic
Admin
Server "petstoreServer" for domain "petstore">
<Nov 29, 2001 2:24:26 PM EST> <Notice> <Management> <Starting
discovery
of Manag
ed Server... This feature is on by default, you may turn this
off
by
passing -Dw
eblogic.management.discover=false>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data
Source
creation:
weblogic.common.ResourceException: DataSource(jdbcthin.SignOnDB)
can't
be creat
ed with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data
Source
creation:
weblogic.common.ResourceException: DataSource(jdbcthin.EstoreDB)
can't
be creat
ed with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data
Source
creation:
weblogic.common.ResourceException: DataSource(jdbcthin.InventoryDB)can't be
cr
eated with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:35 PM EST> <Error> <JDBC> <Error during Data
Source
creation:
weblogic.common.ResourceException: DataSource(weblogic.jdbc.jts.thin)can't be
created with non-existent Pool (connection or multi) (thin)>
<Nov 29, 2001 2:24:41 PM EST> <Notice> <Management> <Application
Poller
not star
ted for production server.>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After the server has booted, your browser should
automatically launch and point to the WebLogic Server
Tour running on this server. If your browser fails to
launch, point your browser to the URL
"http://burtsun:7001"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<Nov 29, 2001 2:24:41 PM EST> <Notice> <WebLogicServer> <ListenThreadlistening
on port 7001>
<Nov 29, 2001 2:24:41 PM EST> <Notice> <WebLogicServer> <SSLListenThreadlisteni
ng on port 7002>
<Nov 29, 2001 2:24:42 PM EST> <Notice> <WebLogicServer> <Started
WebLogic
Admin
Server "petstoreServer" for domain "petstore" running in ProductionMode>
Could anyone please help me ?
Thanks
..Madhuri
Name: weblogic.log
weblogic.log Type: Text Document (application/x-unknown-content-type-txtfile)
Encoding: base64
Name: PrintColumns.java
PrintColumns.java Type: Visual Cafe File (application/x-unknown-content-type-VisualCafeFile.Document)
Encoding: base64 -
How can I use the Connection Pool with DB2
Hi All,
I am facing the problem with the usage for the Connection Pool.
I want to use DB2 via JNDI lookup.
But when starting the Weblogic server, Error occured with the following message.
<Error> <JDBC> <Cannot startup connection pool "MyJDBCPool" Cannot load driver class : com.ibm.db2.jdbc.app.DB2Driver>
DB2 and Weblogic are on the same machine.
In case of the use of remote DB2 database, I also encountered the same error.
Configurations are as follows.
<JDBCConnectionPool DriverName="com.ibm.db2.jdbc.app.DB2Driver"
MaxCapacity="10" Name="MyJDBCPool"
Password="{3DES}gCGsOfD9M6iwOtgL2v/NpA==" Targets="myserver"
TestConnectionsOnReserve="false" TestTableName="test" URL="jdbc:db2://localhost:6789/yongjoo"/>
<SNMPAgent Name="mydomain"/>
<JDBCDataSource JNDIName="acsdb" Name="acsdb" PoolName="MyJDBCPool" Targets="myserver"/>
Could you please give some information about this problem? I will appreciate your kindness.Hi Joe,
Thanks your help.
Perhaps It's my fault for Weblogic console's setting.
After I reset the target server in console, Error message disappeared.
But, when I call the TestCode, I encountered another error message. The error
is NameNotFoundException.
When lookingup the JNDI name, NameNotFoundException errer occured. I tried to
change my setting and JNDI name, but the results are the same.
Would you please give me some information about this one more time? I will be
appreciated for your help.
Follows are Config.xml
<JDBCConnectionPool DriverName="com.ibm.db2.jdbc.app.DB2Driver" MaxCapacity="10"
Name="MyJDBCPool" Password="{3DES}gCGsOfD9M6iwOtgL2v/NpA==" Targets="myserver"
TestConnectionsOnReserve="false" TestTableName="test"
URL="jdbc:db2://localhost:6789/yongjoo"/> <SNMPAgent Name="mydomain"/>
<JDBCDataSource JNDIName="acsdb" Name="acsdb" PoolName="MyJDBCPool"
Targets="myserver"/>
and follows are TestCode,
url = "t3://localhost:7001"; //default URL
datasource = "jdbc/acsdb";
Context ctx = null;
Hashtable p = new Hashtable();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, url);
try{
ctx = new InitialContext(p);
System.err.println("initialContext(p)"+ctx); <-- success
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/acsdb");
}catch(NameNotFoundException ne){
throw new ConnectionException(); .
}catch(NamingException ne){
throw new ConnectionException();
Maybe you are looking for
-
Installation problem with windows server 2003 64 bit
I downloaded all hyperion components from e-deleivery for windows server 2003 64 bit when i tried to install it a message said that some component are not compatible when i removed stratigic finance and FDM components the installation started and com
-
Problems with connecting to internet
maybe i won't have internet for long so i have to make this quick: 1. I use bcm43xx kernel module to connect to internet and this has been going OK(sometimes iv'e had to disconnect and reconnect to still get internet however) nut completely died this
-
In my application, I am attempting to print a document that has both buttons with text and buttons with images, along with plain text. When I print, the buttons with the images are larger than they ought to be (i.e. they don't fit within the area the
-
Target Yield in Material Master
Is it possible to enter target yield in material master so that we are able to get variance between target yield and actual yield. Pl. help me if any such filed is available in FERT master or any other way. Regards, Ganesh
-
How do I match with an error of 4001?
I purchased "Match" and have tried several times to get it to run. I keep getting error message of 4001. Yes, I reinstalled itunes today and still have the same error message. Any help would be greatly appreciated. Thank you.