You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-user@tomcat.apache.org by Igor Dombrovan <ig...@chorus.ru> on 2003/12/29 18:54:36 UTC
Cannot access JNDI datasource from SQL JSTL
Hi everybody
I'm stuck and out of ideas. Maybe anybody could help me to get up on my
feet.
I've got tomcat-4.1.29 on WinXP Pro, j2sdk-1.4.2_01,
jakarta-taglibs-standard-current-1.0.4, Firebird 1.5 with FirebirdSQL-1.0.1
I've setup a JNDI datasource like this :
START OF server.xml PIECE
<Context path="/client" docBase="client" debug="10"
reloadable="true" crossContext="false">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_client_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/Client"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/Client">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>3</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>client</value>
</parameter>
<parameter>
<name>password</name>
<value>top_secret</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.firebirdsql.jdbc.FBDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:firebirdsql:localhost/3050:client</value>
</parameter>
</ResourceParams>
</Context>
END OF server.xml PIECE
START OF web.xml PIECE
<resource-ref>
<description>Client SQL DB Connection</description>
<res-ref-name>jdbc/Client</res-ref-name>
<res-type>javax.sql.dataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
END OF web.xml PIECE
JDBC driver and JSTL libs are in place.
Now if I try something like this :
String sql = "select ID,AMOUNT from ORDERS where CUST=?";
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/Client");
Connection conn = ds.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,custId.intValue());
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
...
}
Everything works fine. But if I try this :
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<sql:query var="currentOrders" scope="page" dataSource="jdbc/Client">
select ID,AMOUNT from ORDERS
</sql:query>
It gives me a mysterious error :
org.apache.jasper.JasperException:
select ID,NAME from CUST;
: The resultSet is closed
.....
root cause
javax.servlet.ServletException:
select ID,NAME from CUST;
: The resultSet is closed
So the java code works. But the JSTL SQL tags don't. Specifying
"java:comp/env/jdbc/Client" as dataSource doesn't help.
Anybody any ideas ? Please.
Igor
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
RE: Cannot access JNDI datasource from SQL JSTL
Posted by Igor Dombrovan <ig...@chorus.ru>.
Yes, the actual code is like this :
<sql:query var="currentOrders" scope="page" dataSource="jdbc/Client">
select ID,NAME from CUST;
</sql:query>
No nesting. This is the only SQL tag in the page. In fact there was another
SQL statement but I put the simplest one just to get going. No luck.
Any ideas ?
Igor
-----Original Message-----
From: Kris Schneider [mailto:kris@dotech.com]
Sent: Monday, December 29, 2003 9:24 PM
To: Tag Libraries Users List
Subject: Re: Cannot access JNDI datasource from SQL JSTL
In your JSTL example, you've got:
select ID,AMOUNT from ORDERS
but the exception message states:
select ID,NAME from CUST;
Is your <sql:query> element nested within some other tag(s)? If so, please
give a complete example of how it's being used.
Quoting Igor Dombrovan <ig...@chorus.ru>:
> Hi everybody
>
> I'm stuck and out of ideas. Maybe anybody could help me to get up on
> my feet.
>
> I've got tomcat-4.1.29 on WinXP Pro, j2sdk-1.4.2_01,
> jakarta-taglibs-standard-current-1.0.4, Firebird 1.5 with
> FirebirdSQL-1.0.1 I've setup a JNDI datasource like this :
>
> START OF server.xml PIECE
> <Context path="/client" docBase="client" debug="10"
> reloadable="true" crossContext="false">
> <Logger className="org.apache.catalina.logger.FileLogger"
> prefix="localhost_client_log." suffix=".txt"
> timestamp="true"/>
> <Resource name="jdbc/Client"
> auth="Container"
> type="javax.sql.DataSource"/>
> <ResourceParams name="jdbc/Client">
> <parameter>
> <name>factory</name>
>
> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
> </parameter>
> <parameter>
> <name>maxActive</name>
> <value>10</value>
> </parameter>
> <parameter>
> <name>maxIdle</name>
> <value>3</value>
> </parameter>
> <parameter>
> <name>maxWait</name>
> <value>10000</value>
> </parameter>
> <parameter>
> <name>username</name>
> <value>client</value>
> </parameter>
> <parameter>
> <name>password</name>
> <value>top_secret</value>
> </parameter>
> <parameter>
> <name>driverClassName</name>
> <value>org.firebirdsql.jdbc.FBDriver</value>
> </parameter>
> <parameter>
> <name>url</name>
> <value>jdbc:firebirdsql:localhost/3050:client</value>
> </parameter>
> </ResourceParams>
> </Context>
> END OF server.xml PIECE
>
> START OF web.xml PIECE
> <resource-ref>
> <description>Client SQL DB Connection</description>
> <res-ref-name>jdbc/Client</res-ref-name>
> <res-type>javax.sql.dataSource</res-type>
> <res-auth>Container</res-auth>
> </resource-ref>
> END OF web.xml PIECE
>
> JDBC driver and JSTL libs are in place.
> Now if I try something like this :
>
> String sql = "select ID,AMOUNT from ORDERS where CUST=?";
> Context ctx = new InitialContext();
> DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/Client");
> Connection conn = ds.getConnection();
> PreparedStatement pstmt = conn.prepareStatement(sql);
> pstmt.setInt(1,custId.intValue());
> ResultSet rs = pstmt.executeQuery();
>
> while (rs.next()) {
> ...
> }
>
> Everything works fine. But if I try this :
>
> <%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
> <sql:query var="currentOrders" scope="page" dataSource="jdbc/Client">
> select ID,AMOUNT from ORDERS
> </sql:query>
>
> It gives me a mysterious error :
> org.apache.jasper.JasperException:
> select ID,NAME from CUST;
> : The resultSet is closed
> .....
> root cause
>
> javax.servlet.ServletException:
> select ID,NAME from CUST;
> : The resultSet is closed
>
> So the java code works. But the JSTL SQL tags don't. Specifying
> "java:comp/env/jdbc/Client" as dataSource doesn't help.
>
> Anybody any ideas ? Please.
>
> Igor
--
Kris Schneider <ma...@dotech.com>
D.O.Tech <http://www.dotech.com/>
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
Re: Cannot access JNDI datasource from SQL JSTL
Posted by Kris Schneider <kr...@dotech.com>.
In your JSTL example, you've got:
select ID,AMOUNT from ORDERS
but the exception message states:
select ID,NAME from CUST;
Is your <sql:query> element nested within some other tag(s)? If so, please give
a complete example of how it's being used.
Quoting Igor Dombrovan <ig...@chorus.ru>:
> Hi everybody
>
> I'm stuck and out of ideas. Maybe anybody could help me to get up on my
> feet.
>
> I've got tomcat-4.1.29 on WinXP Pro, j2sdk-1.4.2_01,
> jakarta-taglibs-standard-current-1.0.4, Firebird 1.5 with FirebirdSQL-1.0.1
> I've setup a JNDI datasource like this :
>
> START OF server.xml PIECE
> <Context path="/client" docBase="client" debug="10"
> reloadable="true" crossContext="false">
> <Logger className="org.apache.catalina.logger.FileLogger"
> prefix="localhost_client_log." suffix=".txt"
> timestamp="true"/>
> <Resource name="jdbc/Client"
> auth="Container"
> type="javax.sql.DataSource"/>
> <ResourceParams name="jdbc/Client">
> <parameter>
> <name>factory</name>
>
> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
> </parameter>
> <parameter>
> <name>maxActive</name>
> <value>10</value>
> </parameter>
> <parameter>
> <name>maxIdle</name>
> <value>3</value>
> </parameter>
> <parameter>
> <name>maxWait</name>
> <value>10000</value>
> </parameter>
> <parameter>
> <name>username</name>
> <value>client</value>
> </parameter>
> <parameter>
> <name>password</name>
> <value>top_secret</value>
> </parameter>
> <parameter>
> <name>driverClassName</name>
> <value>org.firebirdsql.jdbc.FBDriver</value>
> </parameter>
> <parameter>
> <name>url</name>
> <value>jdbc:firebirdsql:localhost/3050:client</value>
> </parameter>
> </ResourceParams>
> </Context>
> END OF server.xml PIECE
>
> START OF web.xml PIECE
> <resource-ref>
> <description>Client SQL DB Connection</description>
> <res-ref-name>jdbc/Client</res-ref-name>
> <res-type>javax.sql.dataSource</res-type>
> <res-auth>Container</res-auth>
> </resource-ref>
> END OF web.xml PIECE
>
> JDBC driver and JSTL libs are in place.
> Now if I try something like this :
>
> String sql = "select ID,AMOUNT from ORDERS where CUST=?";
> Context ctx = new InitialContext();
> DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/Client");
> Connection conn = ds.getConnection();
> PreparedStatement pstmt = conn.prepareStatement(sql);
> pstmt.setInt(1,custId.intValue());
> ResultSet rs = pstmt.executeQuery();
>
> while (rs.next()) {
> ...
> }
>
> Everything works fine. But if I try this :
>
> <%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
> <sql:query var="currentOrders" scope="page" dataSource="jdbc/Client">
> select ID,AMOUNT from ORDERS
> </sql:query>
>
> It gives me a mysterious error :
> org.apache.jasper.JasperException:
> select ID,NAME from CUST;
> : The resultSet is closed
> .....
> root cause
>
> javax.servlet.ServletException:
> select ID,NAME from CUST;
> : The resultSet is closed
>
> So the java code works. But the JSTL SQL tags don't. Specifying
> "java:comp/env/jdbc/Client" as dataSource doesn't help.
>
> Anybody any ideas ? Please.
>
> Igor
--
Kris Schneider <ma...@dotech.com>
D.O.Tech <http://www.dotech.com/>
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
Re: Cannot access JNDI datasource from SQL JSTL
Posted by Hassan Schroeder <ha...@webtuitive.com>.
Dima Gutzeit wrote:
> You can use the JSTL way , not JNDI directly.
> put the following in the we.xml of your application
>
> <context-param>
> <param-name>
> javax.servlet.jsp.jstl.sql.dataSource
> </param-name>
> <param-value>
> jdbc:mysql://your.ip/dbname,driver.name,user,password
> </param-value>
> </context-param>
? I'm no expert here, but in my web.xml file I'm using:
<context-param>
<param-name>javax.servlet.jsp.jstl.sql.dataSource</param-name>
<param-value>jdbc/MyDBName</param-value>
</context-param>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/MyDBName</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
:: referring back to the DataSource defined in server.xml.
FWIW,
--
Hassan Schroeder ----------------------------- hassan@webtuitive.com
Webtuitive Design === (+1) 408-938-0567 === http://webtuitive.com
dream. code.
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
RE: Cannot access JNDI datasource from SQL JSTL
Posted by Igor Dombrovan <ig...@chorus.ru>.
But then there will be no connection pooling !
Igor
-----Original Message-----
From: Dima Gutzeit [mailto:dima@mailvision.net]
Sent: Tuesday, December 30, 2003 11:33 AM
To: Tag Libraries Users List
Subject: Re: Cannot access JNDI datasource from SQL JSTL
You can use the JSTL way , not JNDI directly.
put the following in the we.xml of your application
<context-param>
<param-name>
javax.servlet.jsp.jstl.sql.dataSource
</param-name>
<param-value>
jdbc:mysql://your.ip/dbname,driver.name,user,password
</param-value>
</context-param>
and then do :
<sql:query var="currentOrders" scope="page">
select ID,NAME from CUST;
</sql:query>
Hope it helps.
Regards ,
Dima Gutzeit.
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
Re: Cannot access JNDI datasource from SQL JSTL
Posted by Dima Gutzeit <di...@mailvision.net>.
You can use the JSTL way , not JNDI directly.
put the following in the we.xml of your application
<context-param>
<param-name>
javax.servlet.jsp.jstl.sql.dataSource
</param-name>
<param-value>
jdbc:mysql://your.ip/dbname,driver.name,user,password
</param-value>
</context-param>
and then do :
<sql:query var="currentOrders" scope="page">
select ID,NAME from CUST;
</sql:query>
Hope it helps.
Regards ,
Dima Gutzeit.
----- Original Message -----
From: "Igor Dombrovan" <ig...@chorus.ru>
To: "'Tag Libraries Users List'" <ta...@jakarta.apache.org>
Sent: Tuesday, December 30, 2003 10:26 AM
Subject: RE: Cannot access JNDI datasource from SQL JSTL
> Sorry to reply to my own post but I missed one interesting point.
> If I do it like this :
> <sql:query var="currentOrders" scope="page"
> dataSource="java:comp/env/jdbc/Client">
> select ID,NAME from CUST;
> </sql:query>
> Then the error message is different :
> org.apache.jasper.JasperException: Unable to get connection, DataSource
> invalid: "No suitable driver"
> The scriptlet code still works ok.
> I feel stupid but I can't get what's wrong.
>
> Igor
>
> -----Original Message-----
> From: Igor Dombrovan [mailto:igor@chorus.ru]
> Sent: Monday, December 29, 2003 8:55 PM
> To: taglibs-user@jakarta.apache.org
> Subject: Cannot access JNDI datasource from SQL JSTL
>
> Hi everybody
>
> I'm stuck and out of ideas. Maybe anybody could help me to get up on my
> feet.
>
> I've got tomcat-4.1.29 on WinXP Pro, j2sdk-1.4.2_01,
> jakarta-taglibs-standard-current-1.0.4, Firebird 1.5 with
FirebirdSQL-1.0.1
> I've setup a JNDI datasource like this :
>
> START OF server.xml PIECE
> <Context path="/client" docBase="client" debug="10"
> reloadable="true" crossContext="false">
> <Logger className="org.apache.catalina.logger.FileLogger"
> prefix="localhost_client_log." suffix=".txt"
> timestamp="true"/>
> <Resource name="jdbc/Client"
> auth="Container"
> type="javax.sql.DataSource"/>
> <ResourceParams name="jdbc/Client">
> <parameter>
> <name>factory</name>
>
> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
> </parameter>
> <parameter>
> <name>maxActive</name>
> <value>10</value>
> </parameter>
> <parameter>
> <name>maxIdle</name>
> <value>3</value>
> </parameter>
> <parameter>
> <name>maxWait</name>
> <value>10000</value>
> </parameter>
> <parameter>
> <name>username</name>
> <value>client</value>
> </parameter>
> <parameter>
> <name>password</name>
> <value>top_secret</value>
> </parameter>
> <parameter>
> <name>driverClassName</name>
> <value>org.firebirdsql.jdbc.FBDriver</value>
> </parameter>
> <parameter>
> <name>url</name>
> <value>jdbc:firebirdsql:localhost/3050:client</value>
> </parameter>
> </ResourceParams>
> </Context>
> END OF server.xml PIECE
>
> START OF web.xml PIECE
> <resource-ref>
> <description>Client SQL DB Connection</description>
> <res-ref-name>jdbc/Client</res-ref-name>
> <res-type>javax.sql.dataSource</res-type>
> <res-auth>Container</res-auth>
> </resource-ref>
> END OF web.xml PIECE
>
> JDBC driver and JSTL libs are in place.
> Now if I try something like this :
>
> String sql = "select ID,AMOUNT from ORDERS where CUST=?";
> Context ctx = new InitialContext();
> DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/Client");
> Connection conn = ds.getConnection();
> PreparedStatement pstmt = conn.prepareStatement(sql);
> pstmt.setInt(1,custId.intValue());
> ResultSet rs = pstmt.executeQuery();
>
> while (rs.next()) {
> ...
> }
>
> Everything works fine. But if I try this :
>
> <%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
> <sql:query var="currentOrders" scope="page" dataSource="jdbc/Client">
> select ID,AMOUNT from ORDERS
> </sql:query>
>
> It gives me a mysterious error :
> org.apache.jasper.JasperException:
> select ID,NAME from CUST;
> : The resultSet is closed
> .....
> root cause
>
> javax.servlet.ServletException:
> select ID,NAME from CUST;
> : The resultSet is closed
>
> So the java code works. But the JSTL SQL tags don't. Specifying
> "java:comp/env/jdbc/Client" as dataSource doesn't help.
>
> Anybody any ideas ? Please.
>
> Igor
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
RE: Cannot access JNDI datasource from SQL JSTL
Posted by Igor Dombrovan <ig...@chorus.ru>.
Sorry to reply to my own post but I missed one interesting point.
If I do it like this :
<sql:query var="currentOrders" scope="page"
dataSource="java:comp/env/jdbc/Client">
select ID,NAME from CUST;
</sql:query>
Then the error message is different :
org.apache.jasper.JasperException: Unable to get connection, DataSource
invalid: "No suitable driver"
The scriptlet code still works ok.
I feel stupid but I can't get what's wrong.
Igor
-----Original Message-----
From: Igor Dombrovan [mailto:igor@chorus.ru]
Sent: Monday, December 29, 2003 8:55 PM
To: taglibs-user@jakarta.apache.org
Subject: Cannot access JNDI datasource from SQL JSTL
Hi everybody
I'm stuck and out of ideas. Maybe anybody could help me to get up on my
feet.
I've got tomcat-4.1.29 on WinXP Pro, j2sdk-1.4.2_01,
jakarta-taglibs-standard-current-1.0.4, Firebird 1.5 with FirebirdSQL-1.0.1
I've setup a JNDI datasource like this :
START OF server.xml PIECE
<Context path="/client" docBase="client" debug="10"
reloadable="true" crossContext="false">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_client_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/Client"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/Client">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>3</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>client</value>
</parameter>
<parameter>
<name>password</name>
<value>top_secret</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.firebirdsql.jdbc.FBDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:firebirdsql:localhost/3050:client</value>
</parameter>
</ResourceParams>
</Context>
END OF server.xml PIECE
START OF web.xml PIECE
<resource-ref>
<description>Client SQL DB Connection</description>
<res-ref-name>jdbc/Client</res-ref-name>
<res-type>javax.sql.dataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
END OF web.xml PIECE
JDBC driver and JSTL libs are in place.
Now if I try something like this :
String sql = "select ID,AMOUNT from ORDERS where CUST=?";
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/Client");
Connection conn = ds.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,custId.intValue());
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
...
}
Everything works fine. But if I try this :
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<sql:query var="currentOrders" scope="page" dataSource="jdbc/Client">
select ID,AMOUNT from ORDERS
</sql:query>
It gives me a mysterious error :
org.apache.jasper.JasperException:
select ID,NAME from CUST;
: The resultSet is closed
.....
root cause
javax.servlet.ServletException:
select ID,NAME from CUST;
: The resultSet is closed
So the java code works. But the JSTL SQL tags don't. Specifying
"java:comp/env/jdbc/Client" as dataSource doesn't help.
Anybody any ideas ? Please.
Igor
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org