Adwait Chitaley
asked on
connection pooling in struts using oracle DataSource
Hi,
I configure data source in struts-config.xml using oracle JDBC driver my prbm is that,i want to use DataSource in my action class , so i did like this
OracleDataSource ds=new OracleDataSource() and try to get connection by using
Connection con=ds.getConnection() but it return null
after that i tried this way
ds.setUrl("jdbc:oracle:thi n:@localho st:1521:OR CL")
ds.setUser("system");
ds.setPassword("system");
and get connection using ds.getConnection()
this time it work fine but i want to use connection pooling from struts-config.xml file
I configure data source in struts-config.xml using oracle JDBC driver my prbm is that,i want to use DataSource in my action class , so i did like this
OracleDataSource ds=new OracleDataSource() and try to get connection by using
Connection con=ds.getConnection() but it return null
after that i tried this way
ds.setUrl("jdbc:oracle:thi
ds.setUser("system");
ds.setPassword("system");
and get connection using ds.getConnection()
this time it work fine but i want to use connection pooling from struts-config.xml file
<data-source type="oracle.jdbc.pool.OracleDataSource" key="dataSourceOracle">
<set-property property="autoCommit" value="false"/>
<set-property property="description" value="Configuration"/>
<set-property property="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<set-property property="factory" value="oracle.jdbc.pool.OracleDataSourceFactory" />
<set-property property="maxCount" value="4"/>
<set-property property="minCount" value="2"/>
<set-property property="password" value="system"/>
<set-property property="URL" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
<set-property property="user" value="system"/>
</data-source>
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.Connection;
public class Check extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ResultSet rs =null;
DBConnection dbcon=new DBConnection();
PreparedStatement stmt=null;
Connection con=null;
try{
System.out.println("##################Connection Successfull");
rs=dbcon.executeQuery("SELECT SYSDATE FROM DUAL");
}catch(Exception e){
e.printStackTrace();
}finally{
rs.close();
dbcon.closeConnection();
}
return mapping.findForward("success");
}
}
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.Connection;
import oracle.jdbc.pool.OracleDataSource;
public class DBConnection {
private OracleDataSource ds;
private Connection con;
private ResultSet rs;
private PreparedStatement stmt;
public DBConnection() {
ds=null;
con=null;
rs=null;
stmt=null;
}
public Connection getDBConnection(){
try{
ds=new OracleDataSource();
ds.setURL("jdbc:oracle:thin:@localhost:1521:ORCL");
ds.setUser("system");
ds.setPassword("system");
con=ds.getConnection();
}catch(Exception sqle){
System.err.print(sqle);
}finally{
return con;
}
}
public void closeConnection(){
try{
con.close();
rs.close();
}catch(Exception e){
System.out.println("Connection Close");
}finally{
}
}
public ResultSet executeQuery(String sql){
try{
stmt=getDBConnection().prepareStatement(sql);
rs=stmt.executeQuery();
}catch(Exception e){
System.err.print(e);
}finally{
return rs;
}
}
}
what version of struts?
We don't use struts anymore but it used to be in the application context
http://helpdesk.objects.com.au/java/how-to-access-struts-datasource
http://helpdesk.objects.com.au/java/how-to-access-struts-datasource
ASKER
Hi
Thank for solution..but still prbm is not resolve ,i used JNDI for connection pooling
http://www.microdeveloper.com/html/JNDI_Orcl_Tomcat1p.html
as guided by this link .. but i`m getting following error which says that name java: is not bound in this context
javax.naming.NameNotFoundE xception: Name java: is not bound in this Context
at org.apache.naming.NamingCo ntext.look up(NamingC ontext.jav a:769)
at org.apache.naming.NamingCo ntext.look up(NamingC ontext.jav a:152)
at javax.naming.InitialContex t.lookup(I nitialCont ext.java:3 51)
at com.vaannila.DBConnection. getDBConne ctionJNDI( DBConnecti on.java:81 )
at com.vaannila.DBConnection. executeQue ry(DBConne ction.java :64)
at com.vaannila.ActorData.loa dDataDB(Ac torData.ja va:76)
at com.vaannila.UserAction.ex ecute(User Action.jav a:53)
at org.apache.struts.action.R equestProc essor.proc essActionP erform(Req uestProces sor.java:4 31)
at org.apache.struts.action.R equestProc essor.proc ess(Reques tProcessor .java:236)
at org.apache.struts.action.A ctionServl et.process (ActionSer vlet.java: 1196)
at org.apache.struts.action.A ctionServl et.doGet(A ctionServl et.java:41 4)
at javax.servlet.http.HttpSer vlet.servi ce(HttpSer vlet.java: 617)
at javax.servlet.http.HttpSer vlet.servi ce(HttpSer vlet.java: 717)
at org.apache.catalina.core.A pplication FilterChai n.internal DoFilter(A pplication FilterChai n.java:290 )
at org.apache.catalina.core.A pplication FilterChai n.doFilter (Applicati onFilterCh ain.java:2 06)
at org.netbeans.modules.web.m onitor.ser ver.Monito rFilter.do Filter(Mon itorFilter .java:390)
at org.apache.catalina.core.A pplication FilterChai n.internal DoFilter(A pplication FilterChai n.java:235 )
at org.apache.catalina.core.A pplication FilterChai n.doFilter (Applicati onFilterCh ain.java:2 06)
at org.apache.catalina.core.A pplication Dispatcher .invoke(Ap plicationD ispatcher. java:630)
at org.apache.catalina.core.A pplication Dispatcher .processRe quest(Appl icationDis patcher.ja va:436)
at org.apache.catalina.core.A pplication Dispatcher .doForward (Applicati onDispatch er.java:37 4)
at org.apache.catalina.core.A pplication Dispatcher .forward(A pplication Dispatcher .java:302)
at org.apache.jasper.runtime. PageContex tImpl.doFo rward(Page ContextImp l.java:696 )
at org.apache.jasper.runtime. PageContex tImpl.forw ard(PageCo ntextImpl. java:667)
at org.apache.jsp.index_jsp._ jspService (index_jsp .java:57)
at org.apache.jasper.runtime. HttpJspBas e.service( HttpJspBas e.java:70)
at javax.servlet.http.HttpSer vlet.servi ce(HttpSer vlet.java: 717)
at org.apache.jasper.servlet. JspServlet Wrapper.se rvice(JspS ervletWrap per.java:3 74)
at org.apache.jasper.servlet. JspServlet .serviceJs pFile(JspS ervlet.jav a:342)
at org.apache.jasper.servlet. JspServlet .service(J spServlet. java:267)
at javax.servlet.http.HttpSer vlet.servi ce(HttpSer vlet.java: 717)
at org.apache.catalina.core.A pplication FilterChai n.internal DoFilter(A pplication FilterChai n.java:290 )
at org.apache.catalina.core.A pplication FilterChai n.doFilter (Applicati onFilterCh ain.java:2 06)
at org.netbeans.modules.web.m onitor.ser ver.Monito rFilter.do Filter(Mon itorFilter .java:390)
at org.apache.catalina.core.A pplication FilterChai n.internal DoFilter(A pplication FilterChai n.java:235 )
at org.apache.catalina.core.A pplication FilterChai n.doFilter (Applicati onFilterCh ain.java:2 06)
at org.apache.catalina.core.S tandardWra pperValve. invoke(Sta ndardWrapp erValve.ja va:233)
at org.apache.catalina.core.S tandardCon textValve. invoke(Sta ndardConte xtValve.ja va:191)
at org.apache.catalina.core.S tandardHos tValve.inv oke(Standa rdHostValv e.java:128 )
at org.apache.catalina.valves .ErrorRepo rtValve.in voke(Error ReportValv e.java:102 )
at org.apache.catalina.core.S tandardEng ineValve.i nvoke(Stan dardEngine Valve.java :109)
at org.apache.catalina.connec tor.Coyote Adapter.se rvice(Coyo teAdapter. java:286)
at org.apache.coyote.http11.H ttp11Proce ssor.proce ss(Http11P rocessor.j ava:845)
at org.apache.coyote.http11.H ttp11Proto col$Http11 Connection Handler.pr ocess(Http 11Protocol .java:583)
at org.apache.tomcat.util.net .JIoEndpoi nt$Worker. run(JIoEnd point.java :447)
at java.lang.Thread.run(Threa d.java:595 )
java.lang.NullPointerExcep tionConnec tion Close
my database connection code
public Connection getDBConnectionJNDI(){
System.out.println("Inside JNDI::::::::");
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/ comp/env") ;
OracleDataSource ds1 = (OracleDataSource) envContext.lookup("jdbc/db 1");
if (envContext == null) throw new Exception("Error: No Context");
if (ds1 == null) throw new Exception("Error: No DataSource");
if (ds1 != null) con = ds1.getConnection();
/*if (con != null) {
message = "Got Connection " + con.toString() + ", ";
stmt = con.prepareStatement(URL);
//rst = stmt.executeQuery("SELECT 'Success obtaining connection' FROM DUAL");
}*/
}catch(Exception e){
e.printStackTrace();
}finally{
return con;
}
Thank for solution..but still prbm is not resolve ,i used JNDI for connection pooling
http://www.microdeveloper.com/html/JNDI_Orcl_Tomcat1p.html
as guided by this link .. but i`m getting following error which says that name java: is not bound in this context
javax.naming.NameNotFoundE
at org.apache.naming.NamingCo
at org.apache.naming.NamingCo
at javax.naming.InitialContex
at com.vaannila.DBConnection.
at com.vaannila.DBConnection.
at com.vaannila.ActorData.loa
at com.vaannila.UserAction.ex
at org.apache.struts.action.R
at org.apache.struts.action.R
at org.apache.struts.action.A
at org.apache.struts.action.A
at javax.servlet.http.HttpSer
at javax.servlet.http.HttpSer
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.netbeans.modules.web.m
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.apache.jasper.runtime.
at org.apache.jasper.runtime.
at org.apache.jsp.index_jsp._
at org.apache.jasper.runtime.
at javax.servlet.http.HttpSer
at org.apache.jasper.servlet.
at org.apache.jasper.servlet.
at org.apache.jasper.servlet.
at javax.servlet.http.HttpSer
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.netbeans.modules.web.m
at org.apache.catalina.core.A
at org.apache.catalina.core.A
at org.apache.catalina.core.S
at org.apache.catalina.core.S
at org.apache.catalina.core.S
at org.apache.catalina.valves
at org.apache.catalina.core.S
at org.apache.catalina.connec
at org.apache.coyote.http11.H
at org.apache.coyote.http11.H
at org.apache.tomcat.util.net
at java.lang.Thread.run(Threa
java.lang.NullPointerExcep
my database connection code
public Connection getDBConnectionJNDI(){
System.out.println("Inside
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/
OracleDataSource ds1 = (OracleDataSource) envContext.lookup("jdbc/db
if (envContext == null) throw new Exception("Error: No Context");
if (ds1 == null) throw new Exception("Error: No DataSource");
if (ds1 != null) con = ds1.getConnection();
/*if (con != null) {
message = "Got Connection " + con.toString() + ", ";
stmt = con.prepareStatement(URL);
//rst = stmt.executeQuery("SELECT 'Success obtaining connection' FROM DUAL");
}*/
}catch(Exception e){
e.printStackTrace();
}finally{
return con;
}
you don't need to use JNDI, you can access the struts datasource directly from the struts config (regardless of where it is specified).
ASKER
can u pls givemme detail of strutconfig connection pooling for oracle database
you're already using a connection pool.
I thought your problem was how to access the struts data source from your action
I thought your problem was how to access the struts data source from your action
ASKER
no my prbm is how to configure data source in struts-config.xml and then how to get datasource for oracle in action class
I already posted how to get your datasource in my first comment, have you tried that?
ASKER
i jus tried ur posted code ,so what wl be DATA_SOURCE_KEY value;
Thats a static variable in the Action class, just use the code as posted
ASKER
i`m using strut 1.2.9 and Action.DATA_SOURCE_KEY is deprecated any solution for that
Globals.DATA_SOURCE_KEY
ASKER
java.sql.SQLException: Invalid Oracle URL specified: OracleDataSource.makeURLCo
my strut-config.xml file
<data-sources>
<data-source type="oracle.jdbc.pool.Ora
<set-property property="driverClass" value="oracle.jdbc.OracleD
<set-property property="url" value="jdbc:oracle:thin:@l
<set-property property="maxCount" value="5" />
<set-property property="minCount" value="1" />
<set-property property="autoCommit" value="false" />
<set-property property="user" value="sandeep" />
<set-property property="password" value="kolhe" />
</data-source>
</data-sources>
should that be:
ASKER
thanks ...Its been great help, my problem is now resolved
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
hi sorry to trouble u again.....i`m facing some problem in connection pooling
dsource.getConnection() returns null, ..behavior is inconsistence some time i get connection object some time null can u pls help me regarding asap
java.lang.NullPointerExcep tion
datasource connection return nulll
<data-sources>
<data-source type="oracle.jdbc.pool.Ora cleDataSou rce">
<set-property property="autoCommit" value="false"/>
<set-property property="description" value="Configuration"/>
<set-property property="driverClass" value="oracle.jdbc.OracleD river"/>
<set-property property="factory" value="org.apache.commons. dbcp.Basic DataSource Factory" />
<set-property property="URL" value="jdbc:oracle:thin:@1 28.127.50. 122:1521:a irsanchay" />
<set-property property="user" value="airuser"/>
<set-property property="password" value="airsample"/>
<set-property property="maxCount" value="20"/>
<set-property property="minCount" value="2"/>
</data-source>
</data-sources>
ServletContext application=servlet.getSer vletContex t();
DataSource datasource = (DataSource) application.getAttribute(G lobals.DAT A_SOURCE_K EY);
ConnectionPool.dsource=dat asource;
return mapping.findForward(SUCCES S);
public static Connection openConnection() throws Exception{
Connection con = null;
con = dsource.getConnection();
message = "Successful Connection.";
System.out.println("-----c onOpenedCo unt---->>" +(++conOpe nedCount)) ;
return con;
}
dsource.getConnection() returns null, ..behavior is inconsistence some time i get connection object some time null can u pls help me regarding asap
java.lang.NullPointerExcep
datasource connection return nulll
<data-sources>
<data-source type="oracle.jdbc.pool.Ora
<set-property property="autoCommit" value="false"/>
<set-property property="description" value="Configuration"/>
<set-property property="driverClass" value="oracle.jdbc.OracleD
<set-property property="factory" value="org.apache.commons.
<set-property property="URL" value="jdbc:oracle:thin:@1
<set-property property="user" value="airuser"/>
<set-property property="password" value="airsample"/>
<set-property property="maxCount" value="20"/>
<set-property property="minCount" value="2"/>
</data-source>
</data-sources>
ServletContext application=servlet.getSer
DataSource datasource = (DataSource) application.getAttribute(G
ConnectionPool.dsource=dat
return mapping.findForward(SUCCES
public static Connection openConnection() throws Exception{
Connection con = null;
con = dsource.getConnection();
message = "Successful Connection.";
System.out.println("-----c
return con;
}
http://www.microdeveloper.com/html/JNDI_Orcl_Tomcat1p.html