Pooled Connections and JNDI
Wondering where to find some sample code for using OracleConnectionPoolDataSource and register with JNDI.
Thanks in advance,
Michael
I think you can try this book.
Proffesional Java Server Programming - Wrox Publication.
Similar Messages
-
When Are Pooled Connections Freed?
Hi,
If I get a connection from a connection-pool while in a transaction, and if I never
explicitly free the connection via the connection.close() method, will the connection
ever be returned to the pool?
If I have a thread that starts a transaction, gets a pooled connection, and ends
the transaction without closing the connection, will or can the same thread get the
same connection when it again starts another transaction and starts the cycle all
over?
Thanks,
MarkMark Glatzer wrote:
Joseph,
We are inside a transaction, but the connection is from a non-transaction data
source. It is our practice to always close the connection as soon as we are done
with it. However, we forgot to close the connection in one place in the code.
MarkOk. For non-transactional data sources you are on your own, and should
definitely close them in a finally block so it gets back into the pool for sure.
Depending on the server version, there may be an RMI-related reference
to the connection which prevents it from being gc'ed and returned to the pool.
If you use the pool driver directly, the gc stuff will work.
>
>
Joseph Weinstein <[email protected]> wrote:
Hi. How are you obtaining your connection? If it's from a TxDataSource,
and if
the transaction is in-progress, and maintained by our transaction manager,
then
we will close the connection and return it to the pool when the tx ends,
whether
you're done or not. It is good practice nevertheless, to close all JDBC
objects
as soon as possible.
Mark Glatzer wrote:
Hi,
If I get a connection from a connection-pool while in a transaction,and if I never
explicitly free the connection via the connection.close() method, willthe connection
ever be returned to the pool?
If I have a thread that starts a transaction, gets a pooled connection,and ends
the transaction without closing the connection, will or can the same threadget the
same connection when it again starts another transaction and starts thecycle all
over?
Thanks,
Mark -
Problem with creating Connection pool and JNDI, driver is not detected
Hi,
I have an issue with creating Connection Pool and JNDI.
I'm using:
- JDK 1.6
- OS: Linux(ubuntu 8.10)
- Netbeans IDE 6.5.1
- Java EE 5.0
- Apache Tomcat 6.0.18 Its lib directory contains all necessary jar files for Oracle database driver
- Oracle 11g Enterprise
My problem is that the Oracle database driver is not detected when I want to create a pool (it works pretty well and is detected without any problem when I create ordinary connection by DriverManager)
Therefore after running:
InitialContext ic = new InitialContext();
Context context = (Context)ic.lookup("java:comp/env");
DataSource dataSource = (DataSource)context.lookup("jdbc/oracle11g");
Connection connection = dataSource.getConnection();and right after dataSource.getConnection() I have the following exception:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.OracleDriver'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at servlets.Servlet1.doPost(Servlet1.java:47)
at servlets.Servlet1.doGet(Servlet1.java:29)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130)
... 17 more
My application context file (context.xml) is:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/WebApplication3">
<Resource auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
maxActive="8"
maxIdle="4"
name="jdbc/oracle11g"
username="scott"
password="tiger"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@localhost:1521:database01" />
</Context>and my web.xml is:
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/oracle11g</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
...I found similar threads in different forums including sun, such as
http://forums.sun.com/thread.jspa?threadID=567630&start=0&tstart=0
http://forums.sun.com/thread.jspa?threadID=639243&tstart=0
http://forums.sun.com/thread.jspa?threadID=5312178&tstart=0
, but no solution.
As many suggest, I also tried to put context directly in the server.xml (instead of my application context) and referencing it by <ResourceLink /> inside my application context but it didn't work and instead it gave me the following message:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class ' ' for connect URL 'null'
Has anyone succeeded in creating a connection pool with JNDI by using Tomcat 6 or higher ? If yes, could kindly explain about the applied method.
Regards,Hello again,
Finally I managed to run my application also with Tomcat 6.0.18. There was only two lines that had to be modified
in the context.xml file (the context of my application project and not server's)
Instead of writing
<Context antiJARLocking="true" path="/WebApplication2">
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
</Context>we had to write:
<Context antiJARLocking="true" path="/WebApplication2">
type="oracle.jdbc.pool.OracleDataSource"
factory="oracle.jdbc.pool.OracleDataSourceFactory"
</Context>- No modification was needed to be done at server level (niether server.xml nor server context.xml)
- I just added the ojdbc6.jar in $CATALINA_HOME/lib (I didn't even need to add it in WEB-INF/lib of my project)
- The servlet used to do the test was the same that I presented in my precedent post.
For those who have encountered my problem and are interested in the format of the web.xml and context.xml
with Tomcat 6.0, you can find them below:
Oracle server: Oracle 11g Enterprise
Tomcat server version: 6.0.18
Oracle driver: ojdbc.jar
IDE: Netbeans 6.5.1
The context.xml file of the web application
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/WebApplication2">
<Resource name="jdbc/oracle11g"
type="oracle.jdbc.pool.OracleDataSource"
factory="oracle.jdbc.pool.OracleDataSourceFactory"
url="jdbc:oracle:thin:@localhost:1521:database01"
driverClassName="oracle.jdbc.OracleDriver"
userName="scott"
password="tiger"
auth="Container"
maxActive="100"
maxIdle="30"
maxWait="10000"
logAbandoned="true"
removeAbandoned="true"
removeAbandonedTimeout="60" />
</Context>The web.xml of my web application
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<resource-ref>
<description>Oracle Database 11g DataSource</description>
<res-type>oracle.jdbc.pool.OracleDataSource</res-type>
<res-auth>Container</res-auth>
<res-ref-name>jdbc/oracle11g</res-ref-name>
</resource-ref>
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>servlets.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/Servlet1</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>Ok, now I'm happy as the original problem is completely solved
Regards -
Getting Pooled Connection with username and password
hi,
I am facing problems in getting pooled connections to MYSQL
database.I am using Tomcat server.
I tried the example given in Tomcat doc "JNDI how to", it
works fine with one set of username and password which is
given in server.xml. Now can anybody guide me thru the steps
to get pooled connections to the same database with multiple
username and passwords.
Thankyou all in advanceNow can anybody guide me thru the steps to get pooled
connections to the same database with multiple
username and passwords.Nope. Can't be done -- at least not that I've seen yet.
Database/JDBC driver vendors seem unconcerned, or don't
care about this scenario. I ragged on Informix years
ago for this very feature. It should would make database
admins jobs a lot easier if they could know "who" that
connection belonged to that is running the outrageous
SQL query without having to divine it by way of tracing
socket/IP connections back thru the network to some machine.
The only way I've seen to do it is to create your own
connection pool code that handles user/password connections.
-- but then the problem becomes you have a collection of
mini-pools for each user. i.e. if you have 200 users, you
end up with 200 connection pools with a couple/few connections
in each sub-pool. Kinda defeats the purpse.
So, apparently, everybody just deals with the single
"generic" user/password connection pool. -
Hi,
I am Shanmugavel, SharePoint developer,
I am facing the below SharePoint 2013 deployment issue while deploying using VS2012.
If i will deploy the same wsp or existing wsp
(last build) using direct powershell deployment, the solution adding properly, but the same timeout exception coming while activation the features. Please find the below error.
I tried the below activists:
1. Restarted my dev server, DB server.
2. tried the same solution id different server
3. tried existing wsp file (last build version)
4. Deactivated all the features, including project Active deployment configuration.... but still i am facing the same issue.
I hope this is not coding level issue, because still my code is not start running, before that some problem coming.
Please help me any one..... Last two days i am struck because of this...What you need to understand is the installation of a WSP does not do much. It just makes sure that you relevant solution files are deployed to the SharePoint farm.
Next comes the point when you activate the features. It is when the code which you have written to "Activate" certain features for your custom solution.
Regarding the error you are getting, it typically means that you have more connections (default is I guess 100) open for a SQL database then you are allowed to.
If you have a custom database and you are opening a connection, make sure you close it as well.
Look at the similar discussion here:
The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool
size was reached[^]
I would suggest further to look at the
ULS logs[^] to get better insight.
Manas Bhardwaj's Stream : www.manasbhardwaj.net -
Hi,
BAM server is running on 7004 in our local system.
We need o connect to BAM server from OSB service.
We tried to use the BAM adapter in the pipeline in 12c, We received Failed to establish a connection to localhost at port 7004.Please verify the Bam server host and JNDI port.
Please let us know the resolution to this issue.
Also please provide some links/steps to connect from OSB service to BAM server in 12c.
Thanks,In BAM 12c, you can send data via JMS by configuring an EMS in BAM using the "self-described" payload. Make sure the date formats match correctly. You can configure an error queue which will show you any data parsing problems.
For example,
<msgRoot dataObjectName="Student" operationType="insert" keys="RequestId">
<RequestId>R1000</RequestId>
<StudentId>S12345</StudentId>
<RequestType>Admission</RequestType>
<RequestStatus>Open</RequestStatus>
<RequestMessage>Please Admin</RequestMessage>
<RequestCode>3</RequestCode>
<SubmitTime>2015-03-17 18:23:07</SubmitTime>
<ApprovalTime>2015-02-18 18:23:07</ApprovalTime>
</msgRoot> -
Closing pooled connections?? one at a time?
I've got an interesting need;
I've writen a custom UserManager for form based authentication.
class ValidateLoginManager extends AbstractUserManager
Authentication is to a legacy DB (Oracle) where all users have
been added as
Oracle users. So I've created a separate JNDI data source in
data-sources.xml
for pooling connections that I'll only use for authentication
(just a gut decission).
The container calls:
boolean checkPasswd (username, passwd) {
boolean authenticated = false;
try {
dbConnection = this.datasource.getConnection(username,
passwd);
authenticated = true;
} finally {
if (dbConnection != null)
dbConnection.close();
return authenticated;
This works great, since Oracle authenticates the connection
against it's user DB.
But the conn.close() does not close the session on the DB and
soon all MTS tasks are used up in idle sessions.
Any thoughts on forcing the connection to drop open sessions?
thanks, curtHi Curt,
For my custom usermanager I use a datasource specified in my data-sources.xml like this:
<data-source
class="com.evermind.sql.DriverManagerDataSource"
name="xyz"
location="jdbc/OracleSecurityDS"
xa-location="jdbc/xa/OracleXADS"
ejb-location="jdbc/OracleDS"
connection-driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.0:1521:xyz"
inactivity-timeout="30"
/>
When you lookup the datasource using JNDI, make sure you use the name bound to the location specified in the "location" attribute and not the "ejb-location" attribute (as you usually do in your Ejbs).
I hope this helps.
- nik.
I've got an interesting need;
I've writen a custom UserManager for form based authentication.
class ValidateLoginManager extends AbstractUserManager
Authentication is to a legacy DB (Oracle) where all users have
been added as
Oracle users. So I've created a separate JNDI data source in
data-sources.xml
for pooling connections that I'll only use for authentication
(just a gut decission).
The container calls:
boolean checkPasswd (username, passwd) {
boolean authenticated = false;
try {
dbConnection = this.datasource.getConnection(username,
passwd);
authenticated = true;
} finally {
if (dbConnection != null)
dbConnection.close();
return authenticated;
This works great, since Oracle authenticates the connection
against it's user DB.
But the conn.close() does not close the session on the DB and
soon all MTS tasks are used up in idle sessions.
Any thoughts on forcing the connection to drop open sessions?
thanks, curt -
File Adapter creating huge connections and not releasing.
Hi,
We see high no. of current connections in file adapter from weblogic console against eis/HAFileAdapter under deployments -> fileadapter -> monitoring -> Outbound Connection Pools and are concerned about the same. It seems like fileadapter is not releasing the connection and hence no. of connections are piling up over a days and depending upon the transactions. coz after a restart the values comes down from 36000 to 10 ( which is default initial connection).
But when i see at the datasource level i don't see that much number of active connections. Need to know why this is happening and is this behavior is expected?
We are using SOA 11g PS2
Below is the deployment plan for fileadpater in use:
<?xml version='1.0' encoding='UTF-8'?>
<deployment-plan xmlns="http://xmlns.oracle.com/weblogic/deployment-plan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/deployment-plan http://xmlns.oracle.com/weblogic/deployment-plan/1.0/deployment-plan.xsd" global-variables="false">
<application-name>connectors</application-name>
<variable-definition>
<variable>
<name>ConfigProperty_controlDir_Value_12732617703910</name>
<value>/var/opt/soa_nfs/data/SOA_PRD_DOMAIN/config/FileAdapter</value>
</variable>
<variable>
<name>ConfigProperty_outboundLockTypeForWrite_Value_12737938820080</name>
<value>oracle</value>
</variable>
<variable>
<name>ConnectionInstance_eis/HAFileAdapter1_JNDIName_13010279387490</name>
<value>eis/HAFileAdapter1</value>
</variable>
<variable>
<name>ConfigProperty_controlDir_Value_13010283495591</name>
<value>/var/opt/soa_nfs/data/SOA_PRD_DOMAIN/config/FileAdapter</value>
</variable>
<variable>
<name>ConfigProperty_inboundDataSource_Value_13010283655032</name>
<value>jdbc/SOADataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundDataSource_Value_13010283782973</name>
<value>jdbc/SOADataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundDataSourceLocal_Value_13010283877514</name>
<value>jdbc/SOALocalTxDataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundLockTypeForWrite_Value_13010283941445</name>
<value>oracle</value>
</variable>
<variable>
<name>ConfigProperty_inboundDataSource_Value_13081683627140</name>
<value>jdbc/SOADataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundDataSource_Value_13081683875571</name>
<value>jdbc/SOADataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundDataSourceLocal_Value_13081684137432</name>
<value>jdbc/SOALocalTxDataSource</value>
</variable>
<variable>
<name>ConnectionInstance_eis/HAFileAdapter_Wedb_JNDIName_13369118887880</name>
<value>eis/HAFileAdapter_Wedb</value>
</variable>
<variable>
<name>ConfigProperty_controlDir_Value_13369119117411</name>
<value>/var/opt/soa_nfs/data/SOA_PRD_DOMAIN/config/FileAdapter</value>
</variable>
<variable>
<name>ConfigProperty_inboundDataSource_Value_13369119237302</name>
<value>jdbc/SOADataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundDataSource_Value_13369119486683</name>
<value>jdbc/SOADataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundDataSourceLocal_Value_13369119703484</name>
<value>jdbc/SOALocalTxDataSource</value>
</variable>
<variable>
<name>ConfigProperty_outboundLockTypeForWrite_Value_13369119820485</name>
<value>oracle</value>
</variable>
</variable-definition>
<module-override>
<module-name>FileAdapter.rar</module-name>
<module-type>rar</module-type>
<module-descriptor external="false">
<root-element>weblogic-connector</root-element>
<uri>META-INF/weblogic-ra.xml</uri>
<variable-assignment>
<name>ConfigProperty_controlDir_Value_12732617703910</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter"]/connection-properties/properties/property/[name="controlDir"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundLockTypeForWrite_Value_12737938820080</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter"]/connection-properties/properties/property/[name="outboundLockTypeForWrite"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConnectionInstance_eis/HAFileAdapter1_JNDIName_13010279387490</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter1"]/jndi-name</xpath>
<origin>planbased</origin>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_controlDir_Value_13010283495591</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter1"]/connection-properties/properties/property/[name="controlDir"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_inboundDataSource_Value_13010283655032</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter1"]/connection-properties/properties/property/[name="inboundDataSource"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundDataSource_Value_13010283782973</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter1"]/connection-properties/properties/property/[name="outboundDataSource"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundDataSourceLocal_Value_13010283877514</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter1"]/connection-properties/properties/property/[name="outboundDataSourceLocal"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundLockTypeForWrite_Value_13010283941445</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter1"]/connection-properties/properties/property/[name="outboundLockTypeForWrite"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_inboundDataSource_Value_13081683627140</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter"]/connection-properties/properties/property/[name="inboundDataSource"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundDataSource_Value_13081683875571</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter"]/connection-properties/properties/property/[name="outboundDataSource"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundDataSourceLocal_Value_13081684137432</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter"]/connection-properties/properties/property/[name="outboundDataSourceLocal"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConnectionInstance_eis/HAFileAdapter_Wedb_JNDIName_13369118887880</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter_Wedb"]/jndi-name</xpath>
<origin>planbased</origin>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_controlDir_Value_13369119117411</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter_Wedb"]/connection-properties/properties/property/[name="controlDir"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_inboundDataSource_Value_13369119237302</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter_Wedb"]/connection-properties/properties/property/[name="inboundDataSource"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundDataSource_Value_13369119486683</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter_Wedb"]/connection-properties/properties/property/[name="outboundDataSource"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundDataSourceLocal_Value_13369119703484</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter_Wedb"]/connection-properties/properties/property/[name="outboundDataSourceLocal"]/value</xpath>
</variable-assignment>
<variable-assignment>
<name>ConfigProperty_outboundLockTypeForWrite_Value_13369119820485</name>
<xpath>/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="eis/HAFileAdapter_Wedb"]/connection-properties/properties/property/[name="outboundLockTypeForWrite"]/value</xpath>
</variable-assignment>
</module-descriptor>
<module-descriptor external="false">
<root-element>connector</root-element>
<uri>META-INF/ra.xml</uri>
</module-descriptor>
<module-descriptor external="true">
<root-element>wldf-resource</root-element>
<uri>META-INF/weblogic-diagnostics.xml</uri>
</module-descriptor>
</module-override>
<config-root>/opt/soauser/products/soa11.1/Oracle_SOA1/soa/connectors/plan</config-root>
</deployment-plan>
-RohitHi Arik,
To answer your questions :
You are using HAFileAdapter in your processes JNDI defenitions? --Yes
Check in your HAFileAdapter Connection Pool if Shrinking Enabled is set to true. --Its set to true
I would recomend also to change the properties Test Connections On Reserve to true, and Test Frequency Seconds(900 is the default). --These properties are also in place
-Rohit -
Hi all,
I need advice on managing transactions across multiple persistent objects. Currently we have a number of objects that can save their state to the database: they open a connection, perform insert/update, then close the connection:
class PersistentObject
public void store()
// get connection from pool
Connection conn = ConnectionMgr.getConnection();
// do insert/update
// Return connection to pool
conn.close();
We are using Tomcat's built-in connection pool, so ConnectionMgr simply encapsulates the JNDI lookup followed by a call to DataSource.getConnection().
Now we need to be able to store two or more objects in one transaction, something like this:
try {
// begin transaction
object1.store();
object2.store();
// commit
} catch( SQLException ex ) {
// rollback
Problem is that a transaction requires multiple SQL calls to use the same Connection.One way to do this, of course, is to open the connection externally and pass it to each object. However, ideally, it should be more implicit. Ideally, if the transaction is in progress when object2 tries to get connection, it should receive the same one that object1 used. Is there any way to do it? (Well, I can think of one: binding a connection to a session, but I also see a number of disadvatages of that approach).
thanks in advace,
CodeSlingerthis is what i know. Can you not use JTS? With weblogic app server you can use the weblogic.jdbc.jts.Driver to get a connection. Then you can start a transaction and have calls to multiple components say A, B and C. Each component closes the connection when done but the next component gets the same connection if in same execute thread. The connection is returned to pool only when you commit/rollback and all components are in the same transaction. I hope this helps. You should have similar thing with Tomcat.
-
NPE when using pooled connection
Hello. I have a client application connecting to an OC4J server running on a different machine. The OC4J server maintains a pool of connections to the Oracle database. My client is able to get the datasource from the server via jndi, and gets a non-null connection from the datasource. However, when I try to create a statement using the connection, I get a Null Pointer Exception. If I get a non-pooled connection from the datasource, everything works fine.
Here is the client code:
javax.naming.Context ic = getInitialContext();
javax.sql.DataSource dataSource = (javax.sql.DataSource)ic.lookup("jdbc/nanookDS"); //this gives you pooling
// javax.sql.DataSource dataSource = (javax.sql.DataSource)ic.lookup("jdbc/nanookCoreDS"); //this does not
for (int x=0; x<100; x++)
Connection conn = dataSource.getConnection();
if (conn == null)
System.out.println("null");
Statement stmt = conn.createStatement(); //fails here
ResultSet rs = stmt.executeQuery("select * from pmi.patient where patient# = 0");
rs.close();
stmt.close();
conn.close();
Can someone please tell me what's happening? I'm pulling my hair out...
BTW, the code above works fine when executed in a JSP on the OC4J server.
Thank you,
Brian Brownimport javax.naming.*;
import java.util.*;
import javax.sql.*;
import java.sql.*;
public class Lookup {
public static void main(String arg[]) throws Exception {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,"com.evermind.server.rmi.RMIInitialContextFactory");
props.put(Context.PROVIDER_URL, "ormi://localhost:23791");
props.put(Context.SECURITY_PRINCIPAL, "admin");
props.put(Context.SECURITY_CREDENTIALS, "welcome");
InitialContext ic = new InitialContext(props);
Lookup l = new Lookup();
l.testConn ( ( (DataSource) ic.lookup("jdbc/OracleCoreDS") ).getConnection( ) );
l.testConn( ( (DataSource) ic.lookup("jdbc/pool/OraclePoolDS") ).getConnection( ));
l.testConn ( ( (DataSource) ic.lookup("jdbc/OracleDS")).getConnection( ));
public void testConn( Connection conn ) throws Exception {
Statement s = conn.createStatement( );
ResultSet r = s.executeQuery(" Select 'Passed' from dual ");
if( r.next() )
System.out.println( r.getString(1) );
else
System.out.println( "Failed" );
r.close();
s.close();
conn.close();
Add oc4j.jar and classes12.jar to CLASSPATH.
Elango. -
How to pool connections to OID?
I am using oracle.ldap.util.jndi.ConnectionUtil to create context objects and could not find any information on how to pool connections using the oracle's API.
Any help will be highly appreciated.
-RamFor info, I raised an SR on this and it seems the bug was fixed in OVD v11.1.1.4.
-
Failure in ORACLE POOL connection
Hi friends,
I have worked as a developer, My platform front-end is .net and back end is oracle, this product live chat, My problem is I have receive a problem from server that’s is, mysql POOL connection is automatically cut from the connection, I have try to fix that bug but unexpectedly I cannot fix that, Anybody say some suggestion about that.
Thanks in advance for your help.
Regards,
Gilbertsavier.
Live chat By miootYou missed the following
1. Oracle Version
2. OS
3. Error Number
4. Error Message
Please Fill the above details.
Regards, -
Connection and Resultset opening and closing!!!
Hi Friends,
I have a query that returns results like this:
col1**********col2********col3*******col4
xx---------------- -----------yy------------zz
xx---------------- -----------yy------------zz
xx---------------- -----------yy------------zz
....I store these rows and columns in a array and close the resultset that returned me the first query.Now to get column 2 values,I run again a query which takes in col1,col3 and col4 values as parameters.So if the first query return 1000 rows,i got to run 1000 queries.So,I open a new connection each time and close that after it returns the result for each row,i.e i do this for 1000 tiimes.It gives me back the results but delays are increasing as rows increases.Is this a feasible way?Or do i've to have a single connection open,intil i get all the 1000 rows??But i think i can't run 2 resultsets at one time,please help me i'm pretty confused.
ThanksThanks Duffymo,
I am already using Tomcat's db connection pooling,Excellent.
and
I guess I knw enough SQL to run this program...Sorry, no insult intended. I can't tell how versed someone is in SQL when I read the question. I'll confess that I don't consider myself an expert. My first thought would be to consult one if I knew one.
However, I do know that excessive network roundtrips are usually the kiss of death for Java/DB interactions.
Maybe a stored proc is a better way to go. If your logic is that complex, and can't be reduced to a JOIN, then I'd write it in a stored proc and let the database do the work, returning the result in one roundtrip.
% -
Problem with OpenLDAP and JNDI
I'm having problem working with OpenLDAP and JNDI.
First I have changed LDAP's slapd.conf file:
suffix "dc=antipodes,dc=com"
rootdn cn=Manager,dc=antipodes,dc=com
directory "C:/Program Files/OpenLDAP/data"
rootpw secret
schemacheck offthan i used code below, to create root context:
package test;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NameAlreadyBoundException;
import javax.naming.directory.*;
import java.util.*;
public class MakeRoot {
final static String ldapServerName = "localhost";
final static String rootdn = "cn=Manager,dc=antipodes,dc=com";
final static String rootpass = "secret";
final static String rootContext = "dc=antipodes,dc=com";
public static void main( String[] args ) {
// set up environment to access the server
Properties env = new Properties();
env.put( Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.PROVIDER_URL, "ldap://" + ldapServerName + "/" );
env.put( Context.SECURITY_PRINCIPAL, rootdn );
env.put( Context.SECURITY_CREDENTIALS, rootpass );
try {
// obtain initial directory context using the environment
DirContext ctx = new InitialDirContext( env );
// now, create the root context, which is just a subcontext
// of this initial directory context.
ctx.createSubcontext( rootContext );
} catch ( NameAlreadyBoundException nabe ) {
System.err.println( rootContext + " has already been bound!" );
} catch ( Exception e ) {
System.err.println( e );
}this worked fine, I could see that by using "LDAP Browser/Editor".
and then I tried to create group with code:
package test;
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
public class MakeGroup
public static void main (String[] args)
Hashtable env = new Hashtable();
String adminName = "cn=Manager,dc=antipodes,dc=com";
String adminPassword = "secret";
String ldapURL = "ldap://127.0.0.1:389";
String groupName = "CN=Evolution,OU=Research,DC=antipodes,DC=com";
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,adminName);
env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//connect to my domain controller
env.put(Context.PROVIDER_URL,ldapURL);
try {
// Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
// Create attributes to be associated with the new group
Attributes attrs = new BasicAttributes(true);
attrs.put("objectClass","group");
attrs.put("samAccountName","Evolution");
attrs.put("cn","Evolution");
attrs.put("description","Evolutionary Theorists");
//group types from IAds.h
int ADS_GROUP_TYPE_GLOBAL_GROUP = 0x0002;
int ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP = 0x0004;
int ADS_GROUP_TYPE_LOCAL_GROUP = 0x0004;
int ADS_GROUP_TYPE_UNIVERSAL_GROUP = 0x0008;
int ADS_GROUP_TYPE_SECURITY_ENABLED = 0x80000000;
attrs.put("groupType",Integer.toString(ADS_GROUP_TYPE_UNIVERSAL_GROUP + ADS_GROUP_TYPE_SECURITY_ENABLED));
// Create the context
Context result = ctx.createSubcontext(groupName, attrs);
System.out.println("Created group: " + groupName);
ctx.close();
catch (NamingException e) {
System.err.println("Problem creating group: " + e);
}got the error code: Problem creating group: javax.naming.directory.InvalidAttributeIdentifierException: [LDAP: error code 17 - groupType: attribute type undefined]; remaining name 'CN=Evolution,OU=Research,DC=antipodes,DC=com'
I tried by creating organizational unit "ou=Research" from "LDAP Browser/Editor", and then running the same code -> same error.
also I have tried code for adding users:
package test;
import java.util.Hashtable;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import javax.naming.*;
import javax.net.ssl.*;
import java.io.*;
public class MakeUser
public static void main (String[] args)
Hashtable env = new Hashtable();
String adminName = "cn=Manager,dc=antipodes,dc=com";
String adminPassword = "secret";
String userName = "cn=Albert Einstein,ou=Research,dc=antipodes,dc=com";
String groupName = "cn=All Research,ou=Research,dc=antipodes,dc=com";
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,adminName);
env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//connect to my domain controller
env.put(Context.PROVIDER_URL, "ldap://127.0.0.1:389");
try {
// Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
// Create attributes to be associated with the new user
Attributes attrs = new BasicAttributes(true);
//These are the mandatory attributes for a user object
//Note that Win2K3 will automagically create a random
//samAccountName if it is not present. (Win2K does not)
attrs.put("objectClass","user");
attrs.put("samAccountName","AlbertE");
attrs.put("cn","Albert Einstein");
//These are some optional (but useful) attributes
attrs.put("giveName","Albert");
attrs.put("sn","Einstein");
attrs.put("displayName","Albert Einstein");
attrs.put("description","Research Scientist");
attrs.put("userPrincipalName","[email protected]");
attrs.put("mail","[email protected]");
attrs.put("telephoneNumber","999 123 4567");
//some useful constants from lmaccess.h
int UF_ACCOUNTDISABLE = 0x0002;
int UF_PASSWD_NOTREQD = 0x0020;
int UF_PASSWD_CANT_CHANGE = 0x0040;
int UF_NORMAL_ACCOUNT = 0x0200;
int UF_DONT_EXPIRE_PASSWD = 0x10000;
int UF_PASSWORD_EXPIRED = 0x800000;
//Note that you need to create the user object before you can
//set the password. Therefore as the user is created with no
//password, user AccountControl must be set to the following
//otherwise the Win2K3 password filter will return error 53
//unwilling to perform.
attrs.put("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWD_NOTREQD + UF_PASSWORD_EXPIRED+ UF_ACCOUNTDISABLE));
// Create the context
Context result = ctx.createSubcontext(userName, attrs);
System.out.println("Created disabled account for: " + userName);
//now that we've created the user object, we can set the
//password and change the userAccountControl
//and because password can only be set using SSL/TLS
//lets use StartTLS
StartTlsResponse tls = (StartTlsResponse)ctx.extendedOperation(new StartTlsRequest());
tls.negotiate();
//set password is a ldap modfy operation
//and we'll update the userAccountControl
//enabling the acount and force the user to update ther password
//the first time they login
ModificationItem[] mods = new ModificationItem[2];
//Replace the "unicdodePwd" attribute with a new value
//Password must be both Unicode and a quoted string
String newQuotedPassword = "\"Password2000\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));
mods[1] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWORD_EXPIRED)));
// Perform the update
ctx.modifyAttributes(userName, mods);
System.out.println("Set password & updated userccountControl");
//now add the user to a group.
try {
ModificationItem member[] = new ModificationItem[1];
member[0]= new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("member", userName));
ctx.modifyAttributes(groupName,member);
System.out.println("Added user to group: " + groupName);
catch (NamingException e) {
System.err.println("Problem adding user to group: " + e);
//Could have put tls.close() prior to the group modification
//but it seems to screw up the connection or context ?
tls.close();
ctx.close();
System.out.println("Successfully created User: " + userName);
catch (NamingException e) {
System.err.println("Problem creating object: " + e);
catch (IOException e) {
System.err.println("Problem creating object: " + e); }
}same error.
I haven't done any chages to any schema manually.
I know I'm missing something crucial but have no idea what. I have tried many other code from tutorials from net, but they are all very similar and throwing the same error I showed above.
thanks in advance for help.I've solved this.
The problem was that all codes were using classes from Microsoft Active Directory, and they are not supported in OpenLDAP (microsoft.schema in OpenLDAP is just for info). Due to this some fields are not the same in equivalent classes ("user" and "person").
so partial code for creating user in root would be:
import java.util.Hashtable;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import javax.naming.*;
import javax.net.ssl.*;
import java.io.*;
public class MakeUser
public static void main (String[] args)
Hashtable env = new Hashtable();
String adminName = "cn=Manager,dc=antipodes,dc=com";
String adminPassword = "secret";
String userName = "cn=Albert Einstein,ou=newgroup,dc=antipodes,dc=com";
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,adminName);
env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//connect to my domain controller
env.put(Context.PROVIDER_URL, "ldap://127.0.0.1:389");
try {
// Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
// Create attributes to be associated with the new user
Attributes attrs = new BasicAttributes(true);
attrs.put("objectClass","user");
attrs.put("cn","Albert Einstein");
attrs.put("userPassword","Nale");
attrs.put("sn","Einstein");
attrs.put("description","Research Scientist");
attrs.put("telephoneNumber","999 123 4567");
// Create the context
Context result = ctx.createSubcontext(userName, attrs);
System.out.println("Successfully created User: " + userName);
catch (NamingException e) {
System.err.println("Problem creating object: " + e);
}hope this will help anyone. -
What are the correct parameter names for a JDBC pool connection?
Looking in the admin console I notice the differences in the properties name (type casting) of PointBasePool and __TimerPool pool connections properties and the create wizard properties.
PointBasePool and __TimerPool uses this name parameters: User,Password, and DatabaseName.
Create wizard uses these: databaseName, user, password.
So, then, what is the standard names for a connection in SOA8? What is the standard for JDBC?
For example, Tomcat 4 uses username, password, url, driverClassName as parameters names.
Please help,
This is getting more and more confising,
Thanks,
Lorenzo JimenezThe properties that you specify when creating the connection pool are unique to the vendor.
Any or the properties that you specify user,password, url...etc we expect to have setters (setUser, setPassword, setUrl)
let me know if need more info
Maybe you are looking for
-
JRE.exe error in Oracle Forms 6i
Anyone who encountered this error before and managed to solved the problem please assist me. I'm using Oracle Forms 6i Release XP taken from OTN download page installed in a Pentium 4 computer with Windows XP as an OS. Thank you
-
Can I open the Iphone 5s only by the finger scan?
Finger Scan
-
Dear All, I am having a problem in the vendor advance payment. When I try to post the document containing sales tax using the T-Code F-58 in a JVA related company the system gives the following error: "Rounding Difference Too High". The system is abl
-
Hi, I have seen that all examples using iText and servlets send the pdf through the browser by using: response.setContentType("application/pdf"); PdfWriter.getInstance(document, response.getOutputStream()); I would need that besides send that info, t
-
It was working about a half an hour ago, then I changed outlets and now it's not working in any outlet I try.