Обсуждение: a little disillusioned
well, my ploy failed. having never got a decent answer from any technical forum, i had to try. so back to the tried and tested method: can anyone explain to me why tomcat 5 will not find org.postgresql.Driver when it is definitely there? i know this is a very broad question but i have covered the obvious things like class path and such (which, i might add, is the worst part of Java invented). the only thing that seems to work for me is to extract the contents of the .JAR file into my $JAVAHOME. surely this is NOT the way to do it - otherwise the package wouldn't even come as a JAR. in fact, i've got plenty of other JARs working, such as the SmartUploader, SOAP handlers and the like. So what's the difference between me directly instantiating a class (which it seems i can do) and calling Class.forName()/createInstance() (or whatever it is) in terms of where Java looks for classes? as i said, the classpath for my system, for java, and for tomcat are all pointed to the place where I have put the JAR. i'm running debian, if that helps. Shelley Pants Web Developer PS: i will go elsewhere if i am in the wrong place too. is there a forum more related to my topic? _________________________________________________________________ Protect your inbox from harmful viruses with new ninemsn Premium. Click here http://ninemsn.com.au/premium/landing.asp
Frequency UnKnown wrote:
> well, my ploy failed. having never got a decent answer from any
> technical forum, i had to try.
I'm not sure what you mean here. To get a decent answer it helps to ask
a clear question.
> so back to the tried and tested method:
>
> can anyone explain to me why tomcat 5 will not find
> org.postgresql.Driver when it is definitely there?
Have you tried the Tomcat lists? Does whatever you're doing work with
other JDBC drivers if you change org.postgresql.Driver to their driver
implementation class?
> So what's the difference between me directly instantiating a class
> (which it seems i can do) and calling Class.forName()/createInstance()
> (or whatever it is) in terms of where Java looks for classes? as i said,
> the classpath for my system, for java, and for tomcat are all pointed to
> the place where I have put the JAR.
In theory there should be no difference between 'new foo()' and
'Class.forName("foo").newInstance()' other than in how exceptions are
reported (however note that the class you execute these code fragments
in becomes significant). However you haven't given us enough information
to go on here. At a minimum, what are the exact exceptions & stack
traces you see? Can you provide the code that does work vs. the code
that doesn't?
You mentioned an InstantiationException (or InstantiationError?) in your
previous mail. You should only get this if trying to instantiate an
abstract class or interface. This might happen if you're using a driver
jar that's built for an older JDBC version than the actual version being
used -- as the newer JDBC methods will have no implementation. (or do
you get an IncompatibleClassChangeError or AbstractMethodError in this
case? I forget..). But this shouldn't happen on instantiation of
org.postgresql.Driver itself, since that doesn't actually build any
version-dependent objects until connect() is called.
BTW, you shouldn't have to instantiate org.postgresql.Driver yourself --
just ensure the class is loaded (Class.forName("org.postgresql.Driver"))
and it'll be available via java.sql.DriverManager. Or is this
instantiation happening in the guts of Tomcat?
> i'm running debian, if that helps.
Check that you don't have a different version of the driver sitting
around somewhere elsewhere in the classpath, IIRC debian likes to
install jars into /usr/share/java, perhaps you have an older version there?
-O
i haven't used tomcat 5, but i know some stuff about tomcat 4, and it sounds like it could pertain. you have to place a jar high enough up in your tomcat directories so that any class which uses it (and, more importantly, whichever class calls the Class.forName method) will be in directories at that level or lower (for instance, $CATALINA_HOME/common/libs). perhaps you aren't doing this, and you have it too low (do you have different webapps using postgres? if so, you can't have separate instances of the driver in .../yourWebApp/WEB-INF/lib). for more, see the tomcat docs (ClassLoader howto) and the tomcat lists for more specifics. jon On Wed, 21 Jan 2004, Frequency UnKnown wrote: > well, my ploy failed. having never got a decent answer from any technical > forum, i had to try. > > so back to the tried and tested method: > > can anyone explain to me why tomcat 5 will not find org.postgresql.Driver > when it is definitely there? > > i know this is a very broad question but i have covered the obvious things > like class path and such (which, i might add, is the worst part of Java > invented). the only thing that seems to work for me is to extract the > contents of the .JAR file into my $JAVAHOME. surely this is NOT the way to > do it - otherwise the package wouldn't even come as a JAR. in fact, i've got > plenty of other JARs working, such as the SmartUploader, SOAP handlers and > the like. > > So what's the difference between me directly instantiating a class (which it > seems i can do) and calling Class.forName()/createInstance() (or whatever it > is) in terms of where Java looks for classes? as i said, the classpath for > my system, for java, and for tomcat are all pointed to the place where I > have put the JAR. > > i'm running debian, if that helps. > > Shelley Pants > Web Developer > > PS: i will go elsewhere if i am in the wrong place too. is there a forum > more related to my topic? > > _________________________________________________________________ > Protect your inbox from harmful viruses with new ninemsn Premium. Click here > http://ninemsn.com.au/premium/landing.asp > > > ---------------------------(end of broadcast)--------------------------- > TIP 7: don't forget to increase your free space map settings >
On 21/01/2004 05:12 Frequency UnKnown wrote: > well, my ploy failed. having never got a decent answer from any > technical forum, i had to try. > > so back to the tried and tested method: > > can anyone explain to me why tomcat 5 will not find > org.postgresql.Driver when it is definitely there? > > i know this is a very broad question but i have covered the obvious > things like class path and such (which, i might add, is the worst part > of Java invented). the only thing that seems to work for me is to > extract the contents of the .JAR file into my $JAVAHOME. surely this is > NOT the way to do it - otherwise the package wouldn't even come as a > JAR. in fact, i've got plenty of other JARs working, such as the > SmartUploader, SOAP handlers and the like. > > So what's the difference between me directly instantiating a class > (which it seems i can do) and calling Class.forName()/createInstance() > (or whatever it is) in terms of where Java looks for classes? as i said, > the classpath for my system, for java, and for tomcat are all pointed to > the place where I have put the JAR. Stay away from classpaths with Tomcat - it uses its own class loaders and you can really confuse it if you have your jar in the classpath too. What I do (on Tomcat 4.1) is put the driver in common/lib and use connection pooling via JNDI (if you do this _do not_ include the driver in your app as well). Have you tried this approach? Have you tried running your app under Tomcat 4.1? > i'm running debian, if that helps. IMHO, running anything other than M$ helps ;) > PS: i will go elsewhere if i am in the wrong place too. is there a forum > more related to my topic? Maybe the Tomcat people could help? -- Paul Thomas +------------------------------+---------------------------------------------+ | Thomas Micro Systems Limited | Software Solutions for the Smaller Business | | Computer Consultants | http://www.thomas-micro-systems-ltd.co.uk | +------------------------------+---------------------------------------------+
--- Frequency UnKnown <captainmofopants@hotmail.com> escribió: > well, my ploy failed. having never got a decent > answer from any technical > forum, i had to try. > > so back to the tried and tested method: > > can anyone explain to me why tomcat 5 will not find > org.postgresql.Driver > when it is definitely there? I put the jdbc diver in /tomcat5/common/lib and works perfect, perhaps the problem is in your classpath please reviev this variable with $set | less as the user who runs tomcat. I have the same problem recently on my mac and was a corrupted jvm, some jars work and others not so I reinstalled my system and now works perfect. I use macos X 10.1.5 and fedora core 1 both with tomcat 5.0.16 and postgresql 7.4.1. ===== -- Nahum Castro Leon, Guanajuato, Mexico e-mail: pedro1_72@yahoo.com _________________________________________________________ Do You Yahoo!? La mejor conexión a internet y 25MB extra a tu correo por $100 al mes. http://net.yahoo.com.mx
thanks so much to everyone who replied to my posts. to clarify my previous position, i tried to goad users of the list into replying by making some deliberately vacuous statements. sometimes this is all that works. i apologise to everyone who is on a quite obviously active and helpful list. a number of people suggested that it was not necessary to instantiate the class when using tomcat's pooling, however we are using our own pooling beans which simply take text SQL and return Java objects (with the usual hassles of opening connections, preparing statements, enumerating through result sets etc. taken care of). if all else fails i will try this out, but i would like to keep the site architecture the same as what the team is used to. we are using postgres 7.2. i notice we're up to 7.4 now. i have assumed the changes would be minimal and this wouldn't cause the problem. have there been any major changes to the way things are initialised? yes my JAR is in /usr/share/java. tomcat is in /usr/share/jwsdp_1.3. i will definitely try out the locations inside catalina/common/libs and also within the tomcat webapp even though this is not generally encouraged. for getting this application going (our first with tomcat5, living on a box all by itself) that solution would be slightly better than extracting JARs. thanks too for clarifying on the classpath: at least i can eliminate some of the things i've been trying. as for the tomcat people helping - well after seeing my first posts to this list you can see how far i got there! if i get this problem sorted i will be posting solutions to quite a few forums i am now a member of. thanks a milliion again, Shelley _________________________________________________________________ Hot chart ringtones and polyphonics. Go to http://ninemsn.com.au/mobilemania/default.asp
<fontfamily><param>Courier</param>
this may end up being a double post... my apologies if it is. i wasn't
registered and it stalled the post.
just wanted to mention that the person that was having tomcat issues
is not alone here. unfortunately the docs as far as tomcat and
postgres boils down to some major hand waving re the two. each
relying on the other to work things out for the other. mysql getting
the best treatment from the tomcat people.
the os that i am running this on is:
mac os 10.3.2,
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
pulls all the files off the jakarta site.
postgresql 7.4.1
the following is a really trimmed down version of code from the tomcat
examples re jdbc connection pools:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
try {
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 (SQLException e) {
foo = "SQLException: " + e;
}
results in a index.jsp showing this for foo...
SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
when i go into the administration utility i find a definition for the
data source where the web app is defined under
"/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
<color><param>0000,0000,0000</param>JNDI Name JDBC Driver Class</color>
<color><param>5553,1A18,8B89</param>jdbc/postgres</color>
org.postgres.Driver
delving into that i see this:
JNDI Name: jdbc/postgres
Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
JDBC Driver Class: org.postgres.Driver
User Name: jakarta
Password: "the correct password"
Max. Active Connections: 20
Max. Idle Connections: 10
Max. Wait for Connection: 10000
Validation Query:
i modified the basic.java file that comes with the postgres jdbc
driver and ran it using the connection string above
jdbc:postgresql://127.0.0.1:5432/test
and that works fine using the same jar file that tomcat is using.
there is only one jar file in the tomcat directorys and it is located
at:
find $CATALINA_HOME -name "postgresql.jar"
/usr/local/jakarta/tomcat/common/lib/postgresql.jar
my class path has only ant and java home on it and i have checked to
see if the jar is there.
what i think would be really awesome is if one of you that have this
working could look at the tomcat "documentation" for setting up
postgres and tomcat and maybe helping them and us by maybe making it
more intelligible... cause it is a mess as it is now. in fact if
someone helps me work this out and they don't want to do it i will...
see:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html
maybe even adding the same advice to the postgres jdbc examples so
that we would have a starting point that we knew was working for
someone... this is a nice starting point, but... it might be nice to
add in something along the line of how to set up a java web server to
use postgres.
http://www.postgresql.org/docs/current/static/jdbc-datasource.html
i am suspecting that maybe is one of the xml files... either
<x-tad-bigger>$CATALINA_HOME/conf/server.xml or the apps
WEB-INF/web.xml... but i really don't know for sure what i might have
wrong there. in the mean time i guess i will try the mysql setup the
tomcat people define to see if that works... since i have to do that
too.
thanks in advance,
dave
</x-tad-bigger></fontfamily>
this may end up being a double post... my apologies if it is. i wasn't
registered and it stalled the post.
just wanted to mention that the person that was having tomcat issues is
not alone here. unfortunately the docs as far as tomcat and postgres
boils down to some major hand waving re the two. each relying on the
other to work things out for the other. mysql getting the best
treatment from the tomcat people.
the os that i am running this on is:
mac os 10.3.2,
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
pulls all the files off the jakarta site.
postgresql 7.4.1
the following is a really trimmed down version of code from the tomcat
examples re jdbc connection pools:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
try {
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 (SQLException e) {
foo = "SQLException: " + e;
}
results in a index.jsp showing this for foo...
SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
when i go into the administration utility i find a definition for the
data source where the web app is defined under
"/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
JNDI Name JDBC Driver Class
jdbc/postgres org.postgres.Driver
delving into that i see this:
JNDI Name: jdbc/postgres
Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
JDBC Driver Class: org.postgres.Driver
User Name: jakarta
Password: "the correct password"
Max. Active Connections: 20
Max. Idle Connections: 10
Max. Wait for Connection: 10000
Validation Query:
i modified the basic.java file that comes with the postgres jdbc driver
and ran it using the connection string above
jdbc:postgresql://127.0.0.1:5432/test
and that works fine using the same jar file that tomcat is using.
there is only one jar file in the tomcat directorys and it is located
at:
find $CATALINA_HOME -name "postgresql.jar"
/usr/local/jakarta/tomcat/common/lib/postgresql.jar
my class path has only ant and java home on it and i have checked to
see if the jar is there.
what i think would be really awesome is if one of you that have this
working could look at the tomcat "documentation" for setting up
postgres and tomcat and maybe helping them and us by maybe making it
more intelligible... cause it is a mess as it is now. in fact if
someone helps me work this out and they don't want to do it i will...
see:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-
examples-howto.html
maybe even adding the same advice to the postgres jdbc examples so that
we would have a starting point that we knew was working for someone...
this is a nice starting point, but... it might be nice to add in
something along the line of how to set up a java web server to use
postgres.
http://www.postgresql.org/docs/current/static/jdbc-datasource.html
i am suspecting that maybe is one of the xml files... either
$CATALINA_HOME/conf/server.xml or the apps WEB-INF/web.xml... but i
really don't know for sure what i might have wrong there. in the mean
time i guess i will try the mysql setup the tomcat people define to see
if that works... since i have to do that too.
thanks in advance,
dave
On 27/01/2004 19:07 David Wilbur wrote:
>
> this may end up being a double post... my apologies if it is. i wasn't
> registered and it stalled the post.
>
> just wanted to mention that the person that was having tomcat issues is
> not alone here. unfortunately the docs as far as tomcat and postgres
> boils down to some major hand waving re the two. each relying on the
> other to work things out for the other. mysql getting the best
> treatment from the tomcat people.
>
> the os that i am running this on is:
>
> mac os 10.3.2,
>
> java version "1.4.1_01"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
> Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
>
> tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
> pulls all the files off the jakarta site.
>
> postgresql 7.4.1
>
> the following is a really trimmed down version of code from the tomcat
> examples re jdbc connection pools:
>
> Context initCtx = new InitialContext();
> Context envCtx = (Context) initCtx.lookup("java:comp/env");
> DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
> try {
> 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 (SQLException e) {
> foo = "SQLException: " + e;
> }
>
> results in a index.jsp showing this for foo...
>
> SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
> JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
>
> when i go into the administration utility i find a definition for the
> data source where the web app is defined under
>
> "/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
>
> JNDI Name JDBC Driver Class
> jdbc/postgres org.postgres.Driver
>
> delving into that i see this:
>
> JNDI Name: jdbc/postgres
> Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
> JDBC Driver Class: org.postgres.Driver
> User Name: jakarta
> Password: "the correct password"
> Max. Active Connections: 20
> Max. Idle Connections: 10
> Max. Wait for Connection: 10000
> Validation Query:
>
>
> i modified the basic.java file that comes with the postgres jdbc driver
> and ran it using the connection string above
>
> jdbc:postgresql://127.0.0.1:5432/test
>
> and that works fine using the same jar file that tomcat is using.
>
>
> there is only one jar file in the tomcat directorys and it is located
> at:
>
> find $CATALINA_HOME -name "postgresql.jar"
> /usr/local/jakarta/tomcat/common/lib/postgresql.jar
>
> my class path has only ant and java home on it and i have checked to
> see if the jar is there.
>
> what i think would be really awesome is if one of you that have this
> working could look at the tomcat "documentation" for setting up
> postgres and tomcat and maybe helping them and us by maybe making it
> more intelligible... cause it is a mess as it is now. in fact if
> someone helps me work this out and they don't want to do it i will...
> see:
>
> http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-
> examples-howto.html
>
> maybe even adding the same advice to the postgres jdbc examples so that
> we would have a starting point that we knew was working for someone...
> this is a nice starting point, but... it might be nice to add in
> something along the line of how to set up a java web server to use
> postgres.
The Tomcat 5.0 docs gave the stupid (and I would have thought obvious)
typo that exists in the 4.1 doc for PostgreSQL. The web.xml res-ref-name
should refer to the matching name in the ResourceParams tag _not_ the
physical db name which appears in the JDBC url.
>
> http://www.postgresql.org/docs/current/static/jdbc-datasource.html
>
>
> i am suspecting that maybe is one of the xml files... either
> $CATALINA_HOME/conf/server.xml or the apps WEB-INF/web.xml... but i
> really don't know for sure what i might have wrong there. in the mean
> time i guess i will try the mysql setup the tomcat people define to see
> if that works... since i have to do that too.
FWIW, you don't really need to edit server.xml. Create a <app.,xml file
defining the context of you web app and put it in the webapps directory.
Here's a sample which also defines a JDBC realm.
<!-- Tomcat XML file for MyApp context -->
<!-- this file is to be placed in the webapps direcory -->
<!-- MyApp context -->
<Context path="/myapp" docBase="myapp.war" debug="0"
reloadable="true"
crossContext="true">
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="0"
driverName="org.postgresql.Driver"
digest="MD5"
connectionURL="jdbc:postgresql://127.0.0.1:5432/my_physical_db"
connectionName="dbuser" connectionPassword="dbpasswd"
userTable="user_table" userNameCol="login_name"
userCredCol="password"
userRoleTable="user_roles" roleNameCol="role" />
<Resource name="jdbc/aniceDB" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/aniceDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://127.0.0.1:5432/my_physical_db</value>
</parameter>
<parameter>
<name>username</name>
<value>dbuser</value>
</parameter>
<parameter>
<name>password</name>
<value>dbpasswd</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>1</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>30000</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>60</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
</ResourceParams>
</Context>
And here's part of the app's web.xml which defines the datasource
<resource-ref>
<description>
Resource reference to a factory for java.sql.Connection
instances that may be used for talking to a particular
database that is configured in the server.xml file.
</description>
<res-ref-name>jdbc/aniceDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
HTH
--
Paul Thomas
+------------------------------+---------------------------------------------+
| Thomas Micro Systems Limited | Software Solutions for the Smaller
Business |
| Computer Consultants |
http://www.thomas-micro-systems-ltd.co.uk |
+------------------------------+---------------------------------------------+
On Jan 27, 2004, at 3:01 PM, Paul Thomas wrote:
>
> On 27/01/2004 19:07 David Wilbur wrote:
>> maybe even adding the same advice to the postgres jdbc examples so
>> that we would have a starting point that we knew was working for
>> someone... this is a nice starting point, but... it might be nice
>> to add in something along the line of how to set up a java web
>> server to use postgres.
>
>
> The Tomcat 5.0 docs gave the stupid (and I would have thought obvious)
> typo that exists in the 4.1 doc for PostgreSQL. The web.xml
> res-ref-name should refer to the matching name in the ResourceParams
> tag _not_ the physical db name which appears in the JDBC url.
yep i saw that here are my changes as i thought they should be:
more 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>PosgreSQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/postgres</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
out of server.xml
<Context path="/pgtest" docBase="pgtest" debug="5"
reloadable="true" crossContext="true">
<Logger
className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log."
suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/postgres" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/postgres">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>dbuser</value>
</parameter>
<parameter>
<name>password</name>
<value>dbpassword</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgres.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://127.0.0.1:5432/test</value>
</parameter>
</ResourceParams>
</Context>
>
>> http://www.postgresql.org/docs/current/static/jdbc-datasource.html
>> i am suspecting that maybe is one of the xml files... either
>> $CATALINA_HOME/conf/server.xml or the apps WEB-INF/web.xml... but i
>> really don't know for sure what i might have wrong there. in the
>> mean time i guess i will try the mysql setup the tomcat people
>> define to see if that works... since i have to do that too.
>
> FWIW, you don't really need to edit server.xml. Create a <app.,xml
> file defining the context of you web app and put it in the webapps
> directory. Here's a sample which also defines a JDBC realm.
yes, but i thought the whole point of the definition in the server.xml
file was to have it typed once there and then all you need in the
web.xml is the reference to it... that way an admin can make one change
and all that refer to the resource get changed...
thanks, looking at the following... they don't seem much different.
>
> <!-- Tomcat XML file for MyApp context -->
> <!-- this file is to be placed in the webapps direcory -->
>
> <!-- MyApp context -->
> <Context path="/myapp" docBase="myapp.war" debug="0"
> reloadable="true"
> crossContext="true">
>
> <Realm className="org.apache.catalina.realm.JDBCRealm" debug="0"
> driverName="org.postgresql.Driver"
> digest="MD5"
> connectionURL="jdbc:postgresql://127.0.0.1:5432/my_physical_db"
> connectionName="dbuser" connectionPassword="dbpasswd"
> userTable="user_table" userNameCol="login_name"
> userCredCol="password"
> userRoleTable="user_roles" roleNameCol="role" />
>
> <Resource name="jdbc/aniceDB" auth="Container"
> type="javax.sql.DataSource"/> <ResourceParams
> name="jdbc/aniceDB">
> <parameter>
> <name>factory</name>
> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
> </parameter>
> <parameter>
> <name>driverClassName</name>
> <value>org.postgresql.Driver</value>
> </parameter>
> <parameter>
> <name>url</name>
> <value>jdbc:postgresql://127.0.0.1:5432/my_physical_db</value>
> </parameter>
> <parameter>
> <name>username</name>
> <value>dbuser</value>
> </parameter>
> <parameter>
> <name>password</name>
> <value>dbpasswd</value>
> </parameter>
> <parameter>
> <name>maxActive</name>
> <value>10</value>
> </parameter>
> <parameter>
> <name>maxIdle</name>
> <value>1</value>
> </parameter>
> <parameter>
> <name>maxWait</name>
> <value>30000</value>
> </parameter>
> <parameter>
> <name>removeAbandoned</name>
> <value>true</value>
> </parameter>
> <parameter>
> <name>removeAbandonedTimeout</name>
> <value>60</value>
> </parameter>
> <parameter>
> <name>logAbandoned</name>
> <value>true</value>
> </parameter>
> </ResourceParams> </Context>
>
> And here's part of the app's web.xml which defines the datasource
>
>
> <resource-ref>
> <description>
> Resource reference to a factory for java.sql.Connection
> instances that may be used for talking to a particular
> database that is configured in the server.xml file.
> </description>
> <res-ref-name>jdbc/aniceDB</res-ref-name>
> <res-type>javax.sql.DataSource</res-type>
> <res-auth>Container</res-auth>
> </resource-ref>
>
>
> HTH
>
> --
> Paul Thomas
> +------------------------------
> +---------------------------------------------+
> | Thomas Micro Systems Limited | Software Solutions for the Smaller
> Business |
> | Computer Consultants |
> http://www.thomas-micro-systems-ltd.co.uk |
> +------------------------------
> +---------------------------------------------+
>
i should also note that i just finished installing mysql and the mysql jdbc driver and i do have this working for mysql, following verbatim what is on this page http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource- examples-howto.html other then the error that Paul noted there isn't much different from what i can tell for postgres. On Jan 27, 2004, at 4:52 PM, David Wilbur wrote: > > On Jan 27, 2004, at 3:01 PM, Paul Thomas wrote: > >> >> On 27/01/2004 19:07 David Wilbur wrote: >>> maybe even adding the same advice to the postgres jdbc examples so >>> that we would have a starting point that we knew was working for >>> someone... this is a nice starting point, but... it might be nice >>> to add in something along the line of how to set up a java web >>> server to use postgres. >> >> >> The Tomcat 5.0 docs gave the stupid (and I would have thought >> obvious) typo that exists in the 4.1 doc for PostgreSQL. The web.xml >> res-ref-name should refer to the matching name in the ResourceParams >> tag _not_ the physical db name which appears in the JDBC url. > > yep i saw that here are my changes as i thought they should be: > > more 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>PosgreSQL Test App</description> > <resource-ref> > <description>DB Connection</description> > <res-ref-name>jdbc/postgres</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-auth>Container</res-auth> > </resource-ref> > </web-app> > > > out of server.xml > > <Context path="/pgtest" docBase="pgtest" debug="5" > reloadable="true" crossContext="true"> > > <Logger > className="org.apache.catalina.logger.FileLogger" > > prefix="localhost_DBTest_log." suffix=".txt" > timestamp="true"/> > > <Resource name="jdbc/postgres" auth="Container" > type="javax.sql.DataSource"/> > > <ResourceParams name="jdbc/postgres"> > <parameter> > <name>factory</name> > > <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> > </parameter> > > <parameter> > <name>maxActive</name> > <value>20</value> > </parameter> > > <parameter> > <name>maxIdle</name> > <value>10</value> > </parameter> > > <parameter> > <name>maxWait</name> > <value>10000</value> > </parameter> > > <parameter> > <name>username</name> > <value>dbuser</value> > </parameter> > > <parameter> > <name>password</name> > <value>dbpassword</value> > </parameter> > > <parameter> > <name>driverClassName</name> > <value>org.postgres.Driver</value> > </parameter> > > <parameter> > <name>url</name> > > <value>jdbc:postgresql://127.0.0.1:5432/test</value> > </parameter> > </ResourceParams> > </Context> > > >> >>> http://www.postgresql.org/docs/current/static/jdbc-datasource.html >>> i am suspecting that maybe is one of the xml files... either >>> $CATALINA_HOME/conf/server.xml or the apps WEB-INF/web.xml... but i >>> really don't know for sure what i might have wrong there. in the >>> mean time i guess i will try the mysql setup the tomcat people >>> define to see if that works... since i have to do that too. >> >> FWIW, you don't really need to edit server.xml. Create a <app.,xml >> file defining the context of you web app and put it in the webapps >> directory. Here's a sample which also defines a JDBC realm. > > yes, but i thought the whole point of the definition in the server.xml > file was to have it typed once there and then all you need in the > web.xml is the reference to it... that way an admin can make one > change and all that refer to the resource get changed... > > thanks, looking at the following... they don't seem much different. > >> >> <!-- Tomcat XML file for MyApp context --> >> <!-- this file is to be placed in the webapps direcory --> >> >> <!-- MyApp context --> >> <Context path="/myapp" docBase="myapp.war" debug="0" >> reloadable="true" >> crossContext="true"> >> >> <Realm className="org.apache.catalina.realm.JDBCRealm" debug="0" >> driverName="org.postgresql.Driver" >> digest="MD5" >> connectionURL="jdbc:postgresql://127.0.0.1:5432/my_physical_db" >> connectionName="dbuser" connectionPassword="dbpasswd" >> userTable="user_table" userNameCol="login_name" >> userCredCol="password" >> userRoleTable="user_roles" roleNameCol="role" /> >> >> <Resource name="jdbc/aniceDB" auth="Container" >> type="javax.sql.DataSource"/> <ResourceParams >> name="jdbc/aniceDB"> >> <parameter> >> <name>factory</name> >> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> >> </parameter> >> <parameter> >> <name>driverClassName</name> >> <value>org.postgresql.Driver</value> >> </parameter> >> <parameter> >> <name>url</name> >> <value>jdbc:postgresql://127.0.0.1:5432/my_physical_db</value> >> </parameter> >> <parameter> >> <name>username</name> >> <value>dbuser</value> >> </parameter> >> <parameter> >> <name>password</name> >> <value>dbpasswd</value> >> </parameter> >> <parameter> >> <name>maxActive</name> >> <value>10</value> >> </parameter> >> <parameter> >> <name>maxIdle</name> >> <value>1</value> >> </parameter> >> <parameter> >> <name>maxWait</name> >> <value>30000</value> >> </parameter> >> <parameter> >> <name>removeAbandoned</name> >> <value>true</value> >> </parameter> >> <parameter> >> <name>removeAbandonedTimeout</name> >> <value>60</value> >> </parameter> >> <parameter> >> <name>logAbandoned</name> >> <value>true</value> >> </parameter> >> </ResourceParams> </Context> >> >> And here's part of the app's web.xml which defines the datasource >> >> >> <resource-ref> >> <description> >> Resource reference to a factory for java.sql.Connection >> instances that may be used for talking to a particular >> database that is configured in the server.xml file. >> </description> >> <res-ref-name>jdbc/aniceDB</res-ref-name> >> <res-type>javax.sql.DataSource</res-type> >> <res-auth>Container</res-auth> >> </resource-ref> >> >> >> HTH >> >> -- Paul Thomas >> +------------------------------ >> +---------------------------------------------+ >> | Thomas Micro Systems Limited | Software Solutions for the Smaller >> Business | >> | Computer Consultants | >> http://www.thomas-micro-systems-ltd.co.uk | >> +------------------------------ >> +---------------------------------------------+ >> > > > ---------------------------(end of > broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster >
at the risk of being over kill ... i started over from scratch after
getting the mysql version working... on the first try.
here is the layout of the files in the project directory i have (and is
the same for the mysql project except it is DBTest)
./build
./build/index.jsp
./build/WEB-INF
./build/WEB-INF/classes
./build/WEB-INF/classes/foo
./build/WEB-INF/classes/foo/PGTest.class
./build/WEB-INF/lib
./build/WEB-INF/web.xml
./build.xml
./src
./src/foo
./src/foo/PGTest.java
./web
./web/index.jsp
./web/WEB-INF
./web/WEB-INF/web.xml
the build.xml file has one line changed in it from the one that the
tomcat doc suggests you use:
<property name="catalina.home" value="/usr/local/jakarta/tomcat"/>
after i build i
cp -r build $CATALINA_HOME/webapps/PGTest
and then
$CATALINA_HOME/bin/startup.sh
which results in the page saying that you are not connected... but in
reality is not finding the driver if i place a try block around
Connection conn = ds.getConnection();
here are the relevant files in the reworked version:
more ./web/WEB-INF/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>PostgreSQL Test App</description>
<resource-ref>
<description>PG DB Connection</description>
<res-ref-name>jdbc/TestPG</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
more ./web/index.jsp
<html>
<head>
<title>PG Test</title>
</head>
<body>
<%
foo.PGTest tst = new foo.PGTest();
tst.init();
%>
<h2>Results</h2>
Foo <%= tst.getFoo() %><br/>
Bar <%= tst.getBar() %>
</body>
</html>
more ./src/foo/PGTest.java
package foo;
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class PGTest {
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/TestPG");
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;}
}
cat /usr/local/jakarta/tomcat/conf/server.xml
[snip]
<Context path="/PGTest" docBase="PGTest" debug="5" reloadable="true"
crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_PGTest_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/TestPG" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestPG">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>jakarta</value>
</parameter>
<parameter>
<name>password</name>
<value>tomcat</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgres.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://127.0.0.1:5432/test</value>
</parameter>
</ResourceParams>
</Context>
[snip]
here is the environment that the server is started with:
ANT_HOME=/usr/local/jakarta/ant
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release"
[5]="powerpc-apple-darwin7.0")
BASH_VERSION='2.05b.0(1)-release'
CATALINA_HOME=/usr/local/jakarta/tomcat
CLASSPATH=/Library/Java/Home/lib:/usr/local/jakarta/ant/lib
COLUMNS=141
DIRSTACK=()
DYLD_LIBRARY_PATH=/usr/local/lib:/usr/X11R6/lib:/usr/lib:/usr/local/
pgsql/lib:/usr/local/mysql/lib
EUID=504
GROUPS=()
HISTFILE=/Users/jakarta/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/Users/jakarta
HOSTNAME=Halley.local
HOSTTYPE=powerpc
IFS=$' \t\n'
JAVA_HOME=/Library/Java/Home
LINES=76
MACHTYPE=powerpc-apple-darwin7.0
MAILCHECK=60
MANPATH=/usr/local/man:/usr/X11R6/man:/usr/share/man:/usr/local/pgsql/
man:/usr/local/mysql/man
MYSQL_DATA=/usr/local/mysql/var
MYSQL_HOME=/usr/local/mysql
OLDPWD=/Users/jakarta/Projects
OPTERR=1
OPTIND=1
OSTYPE=darwin7.0
PATH=/usr/local/bin:/usr/X11R6/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/
local/jakarta/ant/bin:/usr/local/pgsql/bin:/usr/local/mysql/bin
PGDATA=/usr/local/pgsql/data
PGHOME=/usr/local/pgsql
PIPESTATUS=([0]="0")
PPID=8049
PS1='\h:\w \u\$ '
PS2='> '
PS4='+ '
PWD=/Users/jakarta/Projects/jakarta
SHARED_SETUP_FILES=/usr/local/share/setup
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-
comments:monitor
SHLVL=1
TERM=xterm-color
UID=504
USER=jakarta
_=pgtest.junk/src/foo/DBTest.java
here is an example that demonstrates that out of tomcat that the
postgres.jar that is in the proper place for tomcat works for a
regular java app and that the account and url in the xml files are
correct:
echo $CLASSPATH
/Library/Java/Home/lib:/usr/local/jakarta/ant/lib
export
CLASSPATH=${CLASSPATH}:/usr/local/jakarta/tomcat/common/lib/
postgresql.jar:.
javac -classpath ${CLASSPATH} example/basic.java
Note: example/basic.java uses or overrides a deprecated API.
Note: Recompile with -deprecation for details.
java example.basic jdbc:postgresql://127.0.0.1:5432/test jakarta tomcat
PostgreSQL basic test v6.3 rev 1
Connecting to Database URL = jdbc:postgresql://127.0.0.1:5432/test
Connected...Now creating a statement
Running tests:
Inserted row with oid 17246
Updated 4 rows
deleted 2 rows
performing a query
a=3 b=8
a=4 b=8
a=4 b=2
a=4 b=3
a=4 b=4
performing another query
a=3 b=8
a=4 b=8
a=4 b=2
a=4 b=3
a=4 b=4
performing a query limited to 3
a=3 b=8
a=4 b=8
a=4 b=2
Now closing the connection
attached is a working server.xml. The context that has the jdbc datasource is /examples I placed the postgresql.jar into common, however I expect it would work in other places. Dave On Tue, 2004-01-27 at 20:46, David Wilbur wrote: > at the risk of being over kill ... i started over from scratch after > getting the mysql version working... on the first try. > > > > here is the layout of the files in the project directory i have (and is > the same for the mysql project except it is DBTest) > > ./build > ./build/index.jsp > ./build/WEB-INF > ./build/WEB-INF/classes > ./build/WEB-INF/classes/foo > ./build/WEB-INF/classes/foo/PGTest.class > ./build/WEB-INF/lib > ./build/WEB-INF/web.xml > ./build.xml > ./src > ./src/foo > ./src/foo/PGTest.java > ./web > ./web/index.jsp > ./web/WEB-INF > ./web/WEB-INF/web.xml > > > the build.xml file has one line changed in it from the one that the > tomcat doc suggests you use: > > <property name="catalina.home" value="/usr/local/jakarta/tomcat"/> > > > after i build i > > cp -r build $CATALINA_HOME/webapps/PGTest > > and then > > $CATALINA_HOME/bin/startup.sh > > which results in the page saying that you are not connected... but in > reality is not finding the driver if i place a try block around > Connection conn = ds.getConnection(); > > > > > > here are the relevant files in the reworked version: > > > more ./web/WEB-INF/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>PostgreSQL Test App</description> > <resource-ref> > <description>PG DB Connection</description> > <res-ref-name>jdbc/TestPG</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-auth>Container</res-auth> > </resource-ref> > </web-app> > > > > more ./web/index.jsp > > > <html> > <head> > <title>PG Test</title> > </head> > <body> > > <% > foo.PGTest tst = new foo.PGTest(); > tst.init(); > %> > > <h2>Results</h2> > Foo <%= tst.getFoo() %><br/> > Bar <%= tst.getBar() %> > > </body> > </html> > > > > more ./src/foo/PGTest.java > > > package foo; > > import javax.naming.*; > import javax.sql.*; > import java.sql.*; > > public class PGTest { > > 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/TestPG"); > > 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;} > } > > > > cat /usr/local/jakarta/tomcat/conf/server.xml > > [snip] > > <Context path="/PGTest" docBase="PGTest" debug="5" reloadable="true" > crossContext="true"> > > <Logger className="org.apache.catalina.logger.FileLogger" > prefix="localhost_PGTest_log." suffix=".txt" timestamp="true"/> > > <Resource name="jdbc/TestPG" auth="Container" > type="javax.sql.DataSource"/> > > <ResourceParams name="jdbc/TestPG"> > <parameter> > <name>factory</name> > <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> > </parameter> > > <parameter> > <name>maxActive</name> > <value>100</value> > </parameter> > > <parameter> > <name>maxIdle</name> > <value>30</value> > </parameter> > > <parameter> > <name>maxWait</name> > <value>10000</value> > </parameter> > > <parameter> > <name>username</name> > <value>jakarta</value> > </parameter> > <parameter> > <name>password</name> > <value>tomcat</value> > </parameter> > > <parameter> > <name>driverClassName</name> > <value>org.postgres.Driver</value> > </parameter> > > <parameter> > <name>url</name> > <value>jdbc:postgresql://127.0.0.1:5432/test</value> > </parameter> > </ResourceParams> > </Context> > > [snip] > > > > here is the environment that the server is started with: > > > > ANT_HOME=/usr/local/jakarta/ant > BASH=/bin/bash > BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" > [5]="powerpc-apple-darwin7.0") > BASH_VERSION='2.05b.0(1)-release' > CATALINA_HOME=/usr/local/jakarta/tomcat > CLASSPATH=/Library/Java/Home/lib:/usr/local/jakarta/ant/lib > COLUMNS=141 > DIRSTACK=() > DYLD_LIBRARY_PATH=/usr/local/lib:/usr/X11R6/lib:/usr/lib:/usr/local/ > pgsql/lib:/usr/local/mysql/lib > EUID=504 > GROUPS=() > HISTFILE=/Users/jakarta/.bash_history > HISTFILESIZE=500 > HISTSIZE=500 > HOME=/Users/jakarta > HOSTNAME=Halley.local > HOSTTYPE=powerpc > IFS=$' \t\n' > JAVA_HOME=/Library/Java/Home > LINES=76 > MACHTYPE=powerpc-apple-darwin7.0 > MAILCHECK=60 > MANPATH=/usr/local/man:/usr/X11R6/man:/usr/share/man:/usr/local/pgsql/ > man:/usr/local/mysql/man > MYSQL_DATA=/usr/local/mysql/var > MYSQL_HOME=/usr/local/mysql > OLDPWD=/Users/jakarta/Projects > OPTERR=1 > OPTIND=1 > OSTYPE=darwin7.0 > PATH=/usr/local/bin:/usr/X11R6/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/ > local/jakarta/ant/bin:/usr/local/pgsql/bin:/usr/local/mysql/bin > PGDATA=/usr/local/pgsql/data > PGHOME=/usr/local/pgsql > PIPESTATUS=([0]="0") > PPID=8049 > PS1='\h:\w \u\$ ' > PS2='> ' > PS4='+ ' > PWD=/Users/jakarta/Projects/jakarta > SHARED_SETUP_FILES=/usr/local/share/setup > SHELL=/bin/bash > SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive- > comments:monitor > SHLVL=1 > TERM=xterm-color > UID=504 > USER=jakarta > _=pgtest.junk/src/foo/DBTest.java > > > > here is an example that demonstrates that out of tomcat that the > postgres.jar that is in the proper place for tomcat works for a > regular java app and that the account and url in the xml files are > correct: > > echo $CLASSPATH > /Library/Java/Home/lib:/usr/local/jakarta/ant/lib > > export > CLASSPATH=${CLASSPATH}:/usr/local/jakarta/tomcat/common/lib/ > postgresql.jar:. > > javac -classpath ${CLASSPATH} example/basic.java > Note: example/basic.java uses or overrides a deprecated API. > Note: Recompile with -deprecation for details. > > java example.basic jdbc:postgresql://127.0.0.1:5432/test jakarta tomcat > PostgreSQL basic test v6.3 rev 1 > > Connecting to Database URL = jdbc:postgresql://127.0.0.1:5432/test > Connected...Now creating a statement > > Running tests: > Inserted row with oid 17246 > Updated 4 rows > deleted 2 rows > performing a query > a=3 b=8 > a=4 b=8 > a=4 b=2 > a=4 b=3 > a=4 b=4 > performing another query > a=3 b=8 > a=4 b=8 > a=4 b=2 > a=4 b=3 > a=4 b=4 > performing a query limited to 3 > a=3 b=8 > a=4 b=8 > a=4 b=2 > Now closing the connection > > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster > -- Dave Cramer 519 939 0336 ICQ # 1467551
Вложения
Note, this is on a tomcat 4 server, and web.xml was not changed,
I also dropped your example code into the classes dir of the web
context, and a small test.jsp file in the jsp dir of the web context..
Also reading the tomcat docs:
NOTE:Third Party drivers should be in jarfiles, not zipfiles. Tomcat
only adds $CATALINA_HOME/common/lib/*.jar to the classpath.
NOTE: Do not install these jarfiles in your /WEB-INF/lib, or
$JAVA_HOME/jre/lib/ext, or anywhere else. You will experience
problems if you install them anyplace other than
$CATALINA_HOME/common/lib.
Dave
On Tue, 2004-01-27 at 23:45, Dave Cramer wrote:
> attached is a working server.xml. The context that has the jdbc
> datasource is /examples
>
> I placed the postgresql.jar into common, however I expect it would work
> in other places.
>
> Dave
>
>
> On Tue, 2004-01-27 at 20:46, David Wilbur wrote:
> > at the risk of being over kill ... i started over from scratch after
> > getting the mysql version working... on the first try.
> >
> >
> >
> > here is the layout of the files in the project directory i have (and is
> > the same for the mysql project except it is DBTest)
> >
> > ./build
> > ./build/index.jsp
> > ./build/WEB-INF
> > ./build/WEB-INF/classes
> > ./build/WEB-INF/classes/foo
> > ./build/WEB-INF/classes/foo/PGTest.class
> > ./build/WEB-INF/lib
> > ./build/WEB-INF/web.xml
> > ./build.xml
> > ./src
> > ./src/foo
> > ./src/foo/PGTest.java
> > ./web
> > ./web/index.jsp
> > ./web/WEB-INF
> > ./web/WEB-INF/web.xml
> >
> >
> > the build.xml file has one line changed in it from the one that the
> > tomcat doc suggests you use:
> >
> > <property name="catalina.home" value="/usr/local/jakarta/tomcat"/>
> >
> >
> > after i build i
> >
> > cp -r build $CATALINA_HOME/webapps/PGTest
> >
> > and then
> >
> > $CATALINA_HOME/bin/startup.sh
> >
> > which results in the page saying that you are not connected... but in
> > reality is not finding the driver if i place a try block around
> > Connection conn = ds.getConnection();
> >
> >
> >
> >
> >
> > here are the relevant files in the reworked version:
> >
> >
> > more ./web/WEB-INF/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>PostgreSQL Test App</description>
> > <resource-ref>
> > <description>PG DB Connection</description>
> > <res-ref-name>jdbc/TestPG</res-ref-name>
> > <res-type>javax.sql.DataSource</res-type>
> > <res-auth>Container</res-auth>
> > </resource-ref>
> > </web-app>
> >
> >
> >
> > more ./web/index.jsp
> >
> >
> > <html>
> > <head>
> > <title>PG Test</title>
> > </head>
> > <body>
> >
> > <%
> > foo.PGTest tst = new foo.PGTest();
> > tst.init();
> > %>
> >
> > <h2>Results</h2>
> > Foo <%= tst.getFoo() %><br/>
> > Bar <%= tst.getBar() %>
> >
> > </body>
> > </html>
> >
> >
> >
> > more ./src/foo/PGTest.java
> >
> >
> > package foo;
> >
> > import javax.naming.*;
> > import javax.sql.*;
> > import java.sql.*;
> >
> > public class PGTest {
> >
> > 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/TestPG");
> >
> > 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;}
> > }
> >
> >
> >
> > cat /usr/local/jakarta/tomcat/conf/server.xml
> >
> > [snip]
> >
> > <Context path="/PGTest" docBase="PGTest" debug="5" reloadable="true"
> > crossContext="true">
> >
> > <Logger className="org.apache.catalina.logger.FileLogger"
> > prefix="localhost_PGTest_log." suffix=".txt" timestamp="true"/>
> >
> > <Resource name="jdbc/TestPG" auth="Container"
> > type="javax.sql.DataSource"/>
> >
> > <ResourceParams name="jdbc/TestPG">
> > <parameter>
> > <name>factory</name>
> > <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
> > </parameter>
> >
> > <parameter>
> > <name>maxActive</name>
> > <value>100</value>
> > </parameter>
> >
> > <parameter>
> > <name>maxIdle</name>
> > <value>30</value>
> > </parameter>
> >
> > <parameter>
> > <name>maxWait</name>
> > <value>10000</value>
> > </parameter>
> >
> > <parameter>
> > <name>username</name>
> > <value>jakarta</value>
> > </parameter>
> > <parameter>
> > <name>password</name>
> > <value>tomcat</value>
> > </parameter>
> >
> > <parameter>
> > <name>driverClassName</name>
> > <value>org.postgres.Driver</value>
> > </parameter>
> >
> > <parameter>
> > <name>url</name>
> > <value>jdbc:postgresql://127.0.0.1:5432/test</value>
> > </parameter>
> > </ResourceParams>
> > </Context>
> >
> > [snip]
> >
> >
> >
> > here is the environment that the server is started with:
> >
> >
> >
> > ANT_HOME=/usr/local/jakarta/ant
> > BASH=/bin/bash
> > BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release"
> > [5]="powerpc-apple-darwin7.0")
> > BASH_VERSION='2.05b.0(1)-release'
> > CATALINA_HOME=/usr/local/jakarta/tomcat
> > CLASSPATH=/Library/Java/Home/lib:/usr/local/jakarta/ant/lib
> > COLUMNS=141
> > DIRSTACK=()
> > DYLD_LIBRARY_PATH=/usr/local/lib:/usr/X11R6/lib:/usr/lib:/usr/local/
> > pgsql/lib:/usr/local/mysql/lib
> > EUID=504
> > GROUPS=()
> > HISTFILE=/Users/jakarta/.bash_history
> > HISTFILESIZE=500
> > HISTSIZE=500
> > HOME=/Users/jakarta
> > HOSTNAME=Halley.local
> > HOSTTYPE=powerpc
> > IFS=$' \t\n'
> > JAVA_HOME=/Library/Java/Home
> > LINES=76
> > MACHTYPE=powerpc-apple-darwin7.0
> > MAILCHECK=60
> > MANPATH=/usr/local/man:/usr/X11R6/man:/usr/share/man:/usr/local/pgsql/
> > man:/usr/local/mysql/man
> > MYSQL_DATA=/usr/local/mysql/var
> > MYSQL_HOME=/usr/local/mysql
> > OLDPWD=/Users/jakarta/Projects
> > OPTERR=1
> > OPTIND=1
> > OSTYPE=darwin7.0
> > PATH=/usr/local/bin:/usr/X11R6/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/
> > local/jakarta/ant/bin:/usr/local/pgsql/bin:/usr/local/mysql/bin
> > PGDATA=/usr/local/pgsql/data
> > PGHOME=/usr/local/pgsql
> > PIPESTATUS=([0]="0")
> > PPID=8049
> > PS1='\h:\w \u\$ '
> > PS2='> '
> > PS4='+ '
> > PWD=/Users/jakarta/Projects/jakarta
> > SHARED_SETUP_FILES=/usr/local/share/setup
> > SHELL=/bin/bash
> > SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-
> > comments:monitor
> > SHLVL=1
> > TERM=xterm-color
> > UID=504
> > USER=jakarta
> > _=pgtest.junk/src/foo/DBTest.java
> >
> >
> >
> > here is an example that demonstrates that out of tomcat that the
> > postgres.jar that is in the proper place for tomcat works for a
> > regular java app and that the account and url in the xml files are
> > correct:
> >
> > echo $CLASSPATH
> > /Library/Java/Home/lib:/usr/local/jakarta/ant/lib
> >
> > export
> > CLASSPATH=${CLASSPATH}:/usr/local/jakarta/tomcat/common/lib/
> > postgresql.jar:.
> >
> > javac -classpath ${CLASSPATH} example/basic.java
> > Note: example/basic.java uses or overrides a deprecated API.
> > Note: Recompile with -deprecation for details.
> >
> > java example.basic jdbc:postgresql://127.0.0.1:5432/test jakarta tomcat
> > PostgreSQL basic test v6.3 rev 1
> >
> > Connecting to Database URL = jdbc:postgresql://127.0.0.1:5432/test
> > Connected...Now creating a statement
> >
> > Running tests:
> > Inserted row with oid 17246
> > Updated 4 rows
> > deleted 2 rows
> > performing a query
> > a=3 b=8
> > a=4 b=8
> > a=4 b=2
> > a=4 b=3
> > a=4 b=4
> > performing another query
> > a=3 b=8
> > a=4 b=8
> > a=4 b=2
> > a=4 b=3
> > a=4 b=4
> > performing a query limited to 3
> > a=3 b=8
> > a=4 b=8
> > a=4 b=2
> > Now closing the connection
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 4: Don't 'kill -9' the postmaster
> >
--
Dave Cramer
519 939 0336
ICQ # 1467551
Вложения
Ok, now I set this up for tomcat 5, and the config file that needs to be modified is in Catalina/localhost/servlet-examples.xml where servlet-examples is the context. FWIW, I used the admin tools to set this up, and again the postgres.jar was in the common/lib dir Dave On Wed, 2004-01-28 at 07:45, Dave Cramer wrote: > Note, this is on a tomcat 4 server, and web.xml was not changed, > > I also dropped your example code into the classes dir of the web > context, and a small test.jsp file in the jsp dir of the web context.. > > > Also reading the tomcat docs: > > NOTE:Third Party drivers should be in jarfiles, not zipfiles. Tomcat > only adds $CATALINA_HOME/common/lib/*.jar to the classpath. > NOTE: Do not install these jarfiles in your /WEB-INF/lib, or > $JAVA_HOME/jre/lib/ext, or anywhere else. You will experience > problems if you install them anyplace other than > $CATALINA_HOME/common/lib. > > > Dave > > On Tue, 2004-01-27 at 23:45, Dave Cramer wrote: > > attached is a working server.xml. The context that has the jdbc > > datasource is /examples > > > > I placed the postgresql.jar into common, however I expect it would work > > in other places. > > > > Dave > > > > > > On Tue, 2004-01-27 at 20:46, David Wilbur wrote: > > > at the risk of being over kill ... i started over from scratch after > > > getting the mysql version working... on the first try. > > > > > > > > > > > > here is the layout of the files in the project directory i have (and is > > > the same for the mysql project except it is DBTest) > > > > > > ./build > > > ./build/index.jsp > > > ./build/WEB-INF > > > ./build/WEB-INF/classes > > > ./build/WEB-INF/classes/foo > > > ./build/WEB-INF/classes/foo/PGTest.class > > > ./build/WEB-INF/lib > > > ./build/WEB-INF/web.xml > > > ./build.xml > > > ./src > > > ./src/foo > > > ./src/foo/PGTest.java > > > ./web > > > ./web/index.jsp > > > ./web/WEB-INF > > > ./web/WEB-INF/web.xml > > > > > > > > > the build.xml file has one line changed in it from the one that the > > > tomcat doc suggests you use: > > > > > > <property name="catalina.home" value="/usr/local/jakarta/tomcat"/> > > > > > > > > > after i build i > > > > > > cp -r build $CATALINA_HOME/webapps/PGTest > > > > > > and then > > > > > > $CATALINA_HOME/bin/startup.sh > > > > > > which results in the page saying that you are not connected... but in > > > reality is not finding the driver if i place a try block around > > > Connection conn = ds.getConnection(); > > > > > > > > > > > > > > > > > > here are the relevant files in the reworked version: > > > > > > > > > more ./web/WEB-INF/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>PostgreSQL Test App</description> > > > <resource-ref> > > > <description>PG DB Connection</description> > > > <res-ref-name>jdbc/TestPG</res-ref-name> > > > <res-type>javax.sql.DataSource</res-type> > > > <res-auth>Container</res-auth> > > > </resource-ref> > > > </web-app> > > > > > > > > > > > > more ./web/index.jsp > > > > > > > > > <html> > > > <head> > > > <title>PG Test</title> > > > </head> > > > <body> > > > > > > <% > > > foo.PGTest tst = new foo.PGTest(); > > > tst.init(); > > > %> > > > > > > <h2>Results</h2> > > > Foo <%= tst.getFoo() %><br/> > > > Bar <%= tst.getBar() %> > > > > > > </body> > > > </html> > > > > > > > > > > > > more ./src/foo/PGTest.java > > > > > > > > > package foo; > > > > > > import javax.naming.*; > > > import javax.sql.*; > > > import java.sql.*; > > > > > > public class PGTest { > > > > > > 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/TestPG"); > > > > > > 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;} > > > } > > > > > > > > > > > > cat /usr/local/jakarta/tomcat/conf/server.xml > > > > > > [snip] > > > > > > <Context path="/PGTest" docBase="PGTest" debug="5" reloadable="true" > > > crossContext="true"> > > > > > > <Logger className="org.apache.catalina.logger.FileLogger" > > > prefix="localhost_PGTest_log." suffix=".txt" timestamp="true"/> > > > > > > <Resource name="jdbc/TestPG" auth="Container" > > > type="javax.sql.DataSource"/> > > > > > > <ResourceParams name="jdbc/TestPG"> > > > <parameter> > > > <name>factory</name> > > > <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> > > > </parameter> > > > > > > <parameter> > > > <name>maxActive</name> > > > <value>100</value> > > > </parameter> > > > > > > <parameter> > > > <name>maxIdle</name> > > > <value>30</value> > > > </parameter> > > > > > > <parameter> > > > <name>maxWait</name> > > > <value>10000</value> > > > </parameter> > > > > > > <parameter> > > > <name>username</name> > > > <value>jakarta</value> > > > </parameter> > > > <parameter> > > > <name>password</name> > > > <value>tomcat</value> > > > </parameter> > > > > > > <parameter> > > > <name>driverClassName</name> > > > <value>org.postgres.Driver</value> > > > </parameter> > > > > > > <parameter> > > > <name>url</name> > > > <value>jdbc:postgresql://127.0.0.1:5432/test</value> > > > </parameter> > > > </ResourceParams> > > > </Context> > > > > > > [snip] > > > > > > > > > > > > here is the environment that the server is started with: > > > > > > > > > > > > ANT_HOME=/usr/local/jakarta/ant > > > BASH=/bin/bash > > > BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" > > > [5]="powerpc-apple-darwin7.0") > > > BASH_VERSION='2.05b.0(1)-release' > > > CATALINA_HOME=/usr/local/jakarta/tomcat > > > CLASSPATH=/Library/Java/Home/lib:/usr/local/jakarta/ant/lib > > > COLUMNS=141 > > > DIRSTACK=() > > > DYLD_LIBRARY_PATH=/usr/local/lib:/usr/X11R6/lib:/usr/lib:/usr/local/ > > > pgsql/lib:/usr/local/mysql/lib > > > EUID=504 > > > GROUPS=() > > > HISTFILE=/Users/jakarta/.bash_history > > > HISTFILESIZE=500 > > > HISTSIZE=500 > > > HOME=/Users/jakarta > > > HOSTNAME=Halley.local > > > HOSTTYPE=powerpc > > > IFS=$' \t\n' > > > JAVA_HOME=/Library/Java/Home > > > LINES=76 > > > MACHTYPE=powerpc-apple-darwin7.0 > > > MAILCHECK=60 > > > MANPATH=/usr/local/man:/usr/X11R6/man:/usr/share/man:/usr/local/pgsql/ > > > man:/usr/local/mysql/man > > > MYSQL_DATA=/usr/local/mysql/var > > > MYSQL_HOME=/usr/local/mysql > > > OLDPWD=/Users/jakarta/Projects > > > OPTERR=1 > > > OPTIND=1 > > > OSTYPE=darwin7.0 > > > PATH=/usr/local/bin:/usr/X11R6/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/ > > > local/jakarta/ant/bin:/usr/local/pgsql/bin:/usr/local/mysql/bin > > > PGDATA=/usr/local/pgsql/data > > > PGHOME=/usr/local/pgsql > > > PIPESTATUS=([0]="0") > > > PPID=8049 > > > PS1='\h:\w \u\$ ' > > > PS2='> ' > > > PS4='+ ' > > > PWD=/Users/jakarta/Projects/jakarta > > > SHARED_SETUP_FILES=/usr/local/share/setup > > > SHELL=/bin/bash > > > SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive- > > > comments:monitor > > > SHLVL=1 > > > TERM=xterm-color > > > UID=504 > > > USER=jakarta > > > _=pgtest.junk/src/foo/DBTest.java > > > > > > > > > > > > here is an example that demonstrates that out of tomcat that the > > > postgres.jar that is in the proper place for tomcat works for a > > > regular java app and that the account and url in the xml files are > > > correct: > > > > > > echo $CLASSPATH > > > /Library/Java/Home/lib:/usr/local/jakarta/ant/lib > > > > > > export > > > CLASSPATH=${CLASSPATH}:/usr/local/jakarta/tomcat/common/lib/ > > > postgresql.jar:. > > > > > > javac -classpath ${CLASSPATH} example/basic.java > > > Note: example/basic.java uses or overrides a deprecated API. > > > Note: Recompile with -deprecation for details. > > > > > > java example.basic jdbc:postgresql://127.0.0.1:5432/test jakarta tomcat > > > PostgreSQL basic test v6.3 rev 1 > > > > > > Connecting to Database URL = jdbc:postgresql://127.0.0.1:5432/test > > > Connected...Now creating a statement > > > > > > Running tests: > > > Inserted row with oid 17246 > > > Updated 4 rows > > > deleted 2 rows > > > performing a query > > > a=3 b=8 > > > a=4 b=8 > > > a=4 b=2 > > > a=4 b=3 > > > a=4 b=4 > > > performing another query > > > a=3 b=8 > > > a=4 b=8 > > > a=4 b=2 > > > a=4 b=3 > > > a=4 b=4 > > > performing a query limited to 3 > > > a=3 b=8 > > > a=4 b=8 > > > a=4 b=2 > > > Now closing the connection > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > > > TIP 4: Don't 'kill -9' the postmaster > > > -- Dave Cramer 519 939 0336 ICQ # 1467551
Вложения
<fontfamily><param>Courier</param>
just wanted to mention that this person is not alone here.
unfortunately the docs as far as tomcat and postgres boils down to
some major hand waving. each relying on the other to work things out
for the other. mysql getting the best treatment from the tomcat
people.
the os that i am running this on is:
mac os 10.3.2,
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
pulls all the files off the jakarta site.
postgresql 7.4.1
the following is a really trimmed down version of code from the tomcat
examples re jdbc connection pools:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
try {
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 (SQLException e) {
foo = "SQLException: " + e;
}
results in a index.jsp showing this for foo...
SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
when i go into the administration utility i find a definition for the
data source where the web app is defined under
"/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
<color><param>0000,0000,0000</param>JNDI Name JDBC Driver Class</color>
<color><param>5555,1A1A,8B8B</param>jdbc/postgres</color>
org.postgres.Driver
delving into that i see this:
JNDI Name: jdbc/postgres
Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
JDBC Driver Class: org.postgres.Driver
User Name: jakarta
Password: "the correct password"
Max. Active Connections: 20
Max. Idle Connections: 10
Max. Wait for Connection: 10000
Validation Query:
i modified the basic.java file that comes with the postgres jdbc
driver and ran it using the connection string above
jdbc:postgresql://127.0.0.1:5432/test
and that works fine using the same jar file that tomcat is using.
there is only one jar file in the tomcat directorys and it is located
at:
find $CATALINA_HOME -name "postgresql.jar"
/usr/local/jakarta/tomcat/common/lib/postgresql.jar
my class path has only ant and java home on it and i have checked to
see if the jar is there.
what i think would be really awesome is if one of you that have this
working could look at the tomcat "documentation" for setting up
postgres and tomcat and maybe helping them and us by maybe making it
more intelligible... cause it is a mess as it is now. in fact if
someone helps me work this out and they don't want to do it i will...
see:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html
maybe even adding the same advice to the postgres jdbc examples so
that we would have a starting point that we knew was working for
someone... this is a nice starting point, but... it might be nice to
add in something along the line of how to set up a java web server to
use postgres.
http://www.postgresql.org/docs/current/static/jdbc-datasource.html
i am suspecting that it is one of the xml files... either
<x-tad-bigger>$CATALINA_HOME/conf/server.xml or the apps
WEB-INF/web.xml... but i really don't know for sure what i might have
wrong there.
thanks in advance,
dave
</x-tad-bigger></fontfamily>
just wanted to mention that this person is not alone here.
unfortunately the docs as far as tomcat and postgres boils down to some
major hand waving. each relying on the other to work things out for
the other. mysql getting the best treatment from the tomcat people.
the os that i am running this on is:
mac os 10.3.2,
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
pulls all the files off the jakarta site.
postgresql 7.4.1
the following is a really trimmed down version of code from the tomcat
examples re jdbc connection pools:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
try {
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 (SQLException e) {
foo = "SQLException: " + e;
}
results in a index.jsp showing this for foo...
SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
when i go into the administration utility i find a definition for the
data source where the web app is defined under
"/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
JNDI Name JDBC Driver Class
jdbc/postgres org.postgres.Driver
delving into that i see this:
JNDI Name: jdbc/postgres
Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
JDBC Driver Class: org.postgres.Driver
User Name: jakarta
Password: "the correct password"
Max. Active Connections: 20
Max. Idle Connections: 10
Max. Wait for Connection: 10000
Validation Query:
i modified the basic.java file that comes with the postgres jdbc driver
and ran it using the connection string above
jdbc:postgresql://127.0.0.1:5432/test
and that works fine using the same jar file that tomcat is using.
there is only one jar file in the tomcat directorys and it is located
at:
find $CATALINA_HOME -name "postgresql.jar"
/usr/local/jakarta/tomcat/common/lib/postgresql.jar
my class path has only ant and java home on it and i have checked to
see if the jar is there.
what i think would be really awesome is if one of you that have this
working could look at the tomcat "documentation" for setting up
postgres and tomcat and maybe helping them and us by maybe making it
more intelligible... cause it is a mess as it is now. in fact if
someone helps me work this out and they don't want to do it i will...
see:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-
examples-howto.html
maybe even adding the same advice to the postgres jdbc examples so that
we would have a starting point that we knew was working for someone...
this is a nice starting point, but... it might be nice to add in
something along the line of how to set up a java web server to use
postgres.
http://www.postgresql.org/docs/current/static/jdbc-datasource.html
i am suspecting that it is one of the xml files... either
$CATALINA_HOME/conf/server.xml or the apps WEB-INF/web.xml... but i
really don't know for sure what i might have wrong there.
thanks in advance,
dave
David,
See my previous posts I included files to set it up
Dave
On Mon, 2004-01-26 at 21:01, David Wilbur wrote:
> <fontfamily><param>Courier</param>
>
> just wanted to mention that this person is not alone here.
> unfortunately the docs as far as tomcat and postgres boils down to
> some major hand waving. each relying on the other to work things out
> for the other. mysql getting the best treatment from the tomcat
> people.
>
>
> the os that i am running this on is:
>
>
> mac os 10.3.2,
>
>
> java version "1.4.1_01"
>
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
>
> Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
>
>
> tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
> pulls all the files off the jakarta site.
>
>
> postgresql 7.4.1
>
>
> the following is a really trimmed down version of code from the tomcat
> examples re jdbc connection pools:
>
>
> Context initCtx = new InitialContext();
>
> Context envCtx = (Context) initCtx.lookup("java:comp/env");
>
> DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
>
> try {
>
> 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 (SQLException e) {
>
> foo = "SQLException: " + e;
>
> }
>
>
> results in a index.jsp showing this for foo...
>
>
> SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
> JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
>
>
> when i go into the administration utility i find a definition for the
> data source where the web app is defined under
>
>
> "/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
>
>
> <color><param>0000,0000,0000</param>JNDI Name JDBC Driver Class</color>
>
> <color><param>5555,1A1A,8B8B</param>jdbc/postgres</color>
> org.postgres.Driver
>
>
> delving into that i see this:
>
>
> JNDI Name: jdbc/postgres
>
> Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
>
> JDBC Driver Class: org.postgres.Driver
>
> User Name: jakarta
>
> Password: "the correct password"
>
> Max. Active Connections: 20
>
> Max. Idle Connections: 10
>
> Max. Wait for Connection: 10000
>
> Validation Query:
>
>
>
> i modified the basic.java file that comes with the postgres jdbc
> driver and ran it using the connection string above
>
>
> jdbc:postgresql://127.0.0.1:5432/test
>
>
> and that works fine using the same jar file that tomcat is using.
>
>
>
> there is only one jar file in the tomcat directorys and it is located
> at:
>
>
> find $CATALINA_HOME -name "postgresql.jar"
>
> /usr/local/jakarta/tomcat/common/lib/postgresql.jar
>
>
> my class path has only ant and java home on it and i have checked to
> see if the jar is there.
>
>
> what i think would be really awesome is if one of you that have this
> working could look at the tomcat "documentation" for setting up
> postgres and tomcat and maybe helping them and us by maybe making it
> more intelligible... cause it is a mess as it is now. in fact if
> someone helps me work this out and they don't want to do it i will...
> see:
>
>
> http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html
>
>
> maybe even adding the same advice to the postgres jdbc examples so
> that we would have a starting point that we knew was working for
> someone... this is a nice starting point, but... it might be nice to
> add in something along the line of how to set up a java web server to
> use postgres.
>
>
> http://www.postgresql.org/docs/current/static/jdbc-datasource.html
>
>
>
> i am suspecting that it is one of the xml files... either
> <x-tad-bigger>$CATALINA_HOME/conf/server.xml or the apps
> WEB-INF/web.xml... but i really don't know for sure what i might have
> wrong there.
>
>
> thanks in advance,
>
> dave
>
> </x-tad-bigger></fontfamily>
--
Dave Cramer
519 939 0336
ICQ # 14675561
this is weird... the list is saying that i sent this yesterday... but
i originally sent it as you can see on the 26th. ie: this is a repeat
post that i didn't do. it even thinks of it's self as being from
headers as sent <bold><color><param>0000,0000,0000</param>Date:
</color></bold><color><param>0000,0000,0000</param> </color>January
26, 2004 7:01:08 PM MST even thou it was received yesterday (for the
2nd time)
anyone know how this happened? in fact i wasn't able to read mail
since the original post so i couldn't have posted this yesterday. does
the list manager duplicate send from time to time?
btw the problem was that i was missing the "ql" in the driver
reference. /blush ie: i had: org.postgres.Driver when i should have
had org.postgresql.Driver it always seems to be simple things
overlooked.
thanks to Dave Cramer for all his useful comments and JariP too.
david
On Jan 26, 2004, at 7:01 PM, David Wilbur wrote:
<excerpt><fontfamily><param>Courier</param>
just wanted to mention that this person is not alone here.
unfortunately the docs as far as tomcat and postgres boils down to
some major hand waving. each relying on the other to work things out
for the other. mysql getting the best treatment from the tomcat
people.
the os that i am running this on is:
mac os 10.3.2,
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
pulls all the files off the jakarta site.
postgresql 7.4.1
the following is a really trimmed down version of code from the tomcat
examples re jdbc connection pools:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
try {
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 (SQLException e) {
foo = "SQLException: " + e;
}
results in a index.jsp showing this for foo...
SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
when i go into the administration utility i find a definition for the
data source where the web app is defined under
"/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
<color><param>0000,0000,0000</param>JNDI Name JDBC Driver Class</color>
<color><param>5554,1A19,8B8A</param>jdbc/postgres</color>
org.postgres.Driver
delving into that i see this:
JNDI Name: jdbc/postgres
Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
JDBC Driver Class: org.postgres.Driver
User Name: jakarta
Password: "the correct password"
Max. Active Connections: 20
Max. Idle Connections: 10
Max. Wait for Connection: 10000
Validation Query:
i modified the basic.java file that comes with the postgres jdbc
driver and ran it using the connection string above
jdbc:postgresql://127.0.0.1:5432/test
and that works fine using the same jar file that tomcat is using.
there is only one jar file in the tomcat directorys and it is located
at:
find $CATALINA_HOME -name "postgresql.jar"
/usr/local/jakarta/tomcat/common/lib/postgresql.jar
my class path has only ant and java home on it and i have checked to
see if the jar is there.
what i think would be really awesome is if one of you that have this
working could look at the tomcat "documentation" for setting up
postgres and tomcat and maybe helping them and us by maybe making it
more intelligible... cause it is a mess as it is now. in fact if
someone helps me work this out and they don't want to do it i will...
see:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html
maybe even adding the same advice to the postgres jdbc examples so
that we would have a starting point that we knew was working for
someone... this is a nice starting point, but... it might be nice to
add in something along the line of how to set up a java web server to
use postgres.
http://www.postgresql.org/docs/current/static/jdbc-datasource.html
i am suspecting that it is one of the xml files... either
<x-tad-bigger>$CATALINA_HOME/conf/server.xml or the apps
WEB-INF/web.xml... but i really don't know for sure what i might have
wrong there.
thanks in advance,
dave
</x-tad-bigger></fontfamily></excerpt>
this is weird... the list is saying that i sent this yesterday... but i
originally sent it as you can see on the 26th. ie: this is a repeat
post that i didn't do. it even thinks of it's self as being from
headers as sent Date: January 26, 2004 7:01:08 PM MST even thou it
was received yesterday (for the 2nd time)
anyone know how this happened? in fact i wasn't able to read mail
since the original post so i couldn't have posted this yesterday. does
the list manager duplicate send from time to time?
btw the problem was that i was missing the "ql" in the driver
reference. /blush ie: i had: org.postgres.Driver when i should have
had org.postgresql.Driver it always seems to be simple things
overlooked.
thanks to Dave Cramer for all his useful comments and JariP too.
david
On Jan 26, 2004, at 7:01 PM, David Wilbur wrote:
>
> just wanted to mention that this person is not alone here.
> unfortunately the docs as far as tomcat and postgres boils down to
> some major hand waving. each relying on the other to work things out
> for the other. mysql getting the best treatment from the tomcat
> people.
>
> the os that i am running this on is:
>
> mac os 10.3.2,
>
> java version "1.4.1_01"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-99)
> Java HotSpot(TM) Client VM (build 1.4.1_01-27, mixed mode)
>
> tomcat was compiled from jakarta-tomcat-5.0.16-src.tar.gz where it
> pulls all the files off the jakarta site.
>
> postgresql 7.4.1
>
> the following is a really trimmed down version of code from the tomcat
> examples re jdbc connection pools:
>
> Context initCtx = new InitialContext();
> Context envCtx = (Context) initCtx.lookup("java:comp/env");
> DataSource ds = (DataSource)envCtx.lookup("jdbc/postgres");
> try {
> 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 (SQLException e) {
> foo = "SQLException: " + e;
> }
>
> results in a index.jsp showing this for foo...
>
> SQLException: org.apache.commons.dbcp.SQLNestedException: Cannot load
> JDBC driver class 'org.postgres.Driver', cause: org.postgres.Driver
>
> when i go into the administration utility i find a definition for the
> data source where the web app is defined under
>
> "/Tomcat Server/Catalina/localhost/DBTest/Data Sources"
>
> JNDI Name JDBC Driver Class
> jdbc/postgres org.postgres.Driver
>
> delving into that i see this:
>
> JNDI Name: jdbc/postgres
> Data Source URL: jdbc:postgresql://127.0.0.1:5432/test
> JDBC Driver Class: org.postgres.Driver
> User Name: jakarta
> Password: "the correct password"
> Max. Active Connections: 20
> Max. Idle Connections: 10
> Max. Wait for Connection: 10000
> Validation Query:
>
>
> i modified the basic.java file that comes with the postgres jdbc
> driver and ran it using the connection string above
>
> jdbc:postgresql://127.0.0.1:5432/test
>
> and that works fine using the same jar file that tomcat is using.
>
>
> there is only one jar file in the tomcat directorys and it is located
> at:
>
> find $CATALINA_HOME -name "postgresql.jar"
> /usr/local/jakarta/tomcat/common/lib/postgresql.jar
>
> my class path has only ant and java home on it and i have checked to
> see if the jar is there.
>
> what i think would be really awesome is if one of you that have this
> working could look at the tomcat "documentation" for setting up
> postgres and tomcat and maybe helping them and us by maybe making it
> more intelligible... cause it is a mess as it is now. in fact if
> someone helps me work this out and they don't want to do it i will...
> see:
>
> http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-
> examples-howto.html
>
> maybe even adding the same advice to the postgres jdbc examples so
> that we would have a starting point that we knew was working for
> someone... this is a nice starting point, but... it might be nice to
> add in something along the line of how to set up a java web server to
> use postgres.
>
> http://www.postgresql.org/docs/current/static/jdbc-datasource.html
>
>
> i am suspecting that it is one of the xml files... either
> $CATALINA_HOME/conf/server.xml or the apps WEB-INF/web.xml... but i
> really don't know for sure what i might have wrong there.
>
> thanks in advance,
> dave