Re: jdbc works in java app, fails in servlet: "no suitable jdbc found"

From: philfrei(at)aol(dot)com
To: craig(at)postnewspapers(dot)com(dot)au, pierce(at)hogranch(dot)com, manoharbhattarai(at)gmail(dot)com
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: jdbc works in java app, fails in servlet: "no suitable jdbc found"
Date: 2010-06-05 07:11:38
Message-ID: 8CCD29579E64490-22E4-8BA9@webmail-d019.sysops.aol.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

This is to follow up with the solution I was given at the Eclipse
"Newbies" forum. Thank you Russell Bateman!

With a right-click on the project, and a selection of "Properties," one
can navigate to "Java EE Module Dependencies." At this point, one can
"select the utility project, JAR or classpath entry to add as a Web
Library dependency." One of the choices offered was in fact the
PostgreSQL JDBC Driver library. After checking the option box, I was
able to run the servlet and have it connect to the PostgreSQL database.

A further clue (which I overlooked until this afternoon) was that in
the "Markers" area was the following Classpath Warning:

Classpath entry
org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY/PostgreSQL JDBC
Driver will not be exported or published. Runtime
ClassNotFoundExceptions may result.

Indeed, the problem was that the Driver class from the JDBC was not
being found. But once the above checkbox was selected, the warning
disappeared.

Do I understand this, or all the suggestions given? Not a whole lot.
I'm guessing that somehow the Apache server is executing code that is
not referencing the usual Java packages and libraries, and it needs to
have these dependencies addressed. I can't say the location for this is
exactly intuitive. But then, I am totally new to this and maybe it will
start to make more sense as I get further along.

One person was asking why I have no WAR file. The code for this project
was started from scratch and a bit of cut-and-paste. It was not created
from a WAR and I have yet to package it into a WAR. Maybe that answers
his question?

Thanks again for everyone who took time to address this question!

Phil Freihofner

 
 
-----Original Message----- 
From: Craig Ringer <craig(at)postnewspapers(dot)com(dot)au> 
To: philfrei(at)aol(dot)com 
Cc: pgsql-jdbc(at)postgresql(dot)org 
Sent: Wed, Jun 2, 2010 7:19 pm 
Subject: Re: jdbc works in java app, fails in servlet: "no suitable
jdbc found" 
 
On 3/06/2010 8:28 AM, philfrei(at)aol(dot)com wrote:  
> Thank you for the reply!  
>  
>> You need to preload the PostgreSQL driver...  
>  
> Being new to this, I find myself second-guessing words as simple as  
> "preload". The servlet "NearbyTest" has a constructor and a single  
> method "doGet" which is invoked by an HTML page. As the first
working  
> statement in the "doGet" method (at this point everything else is  
> commented out), I tried using the recommended statements. Both of
them  
> elicited the same error message:  
>  
> try {  
> // Class.forName("org.postgresql.Driver");  
> this.getClass().getClassLoader().loadClass("org.postgresql.Driver");  
> } catch (ClassNotFoundException e1) {  
> e1.printStackTrace();  
> }  
>  
> java.lang.ClassNotFoundException: org.postgresql.Driver  
  
I'd say your classpath is misconfigured; the classloader cannot find
PostgreSQL.  
  
On web service containers sometimes the dependencies for the servelet
must all be embedded in a .war with the serverlet jar. Is that the case
here?  
  
> Is there another stage (prior to the servlet's  
> "doGet") at which the "preloading" should occur?  
  
Nope, just loading the class is sufficient.  
  
> The stack trace indicates code that is part of Apache. Is there
possibly  
> something that has to be configured in Apache that is missing?  
  
Well the trace refers to org.apache.catalina.loader.WebappClassLoader ,
which is a part of Apache Catalina. It has nothing to do with the
Apache web server except that they're both from the Apache project.  
  
Catalina is Tomcat's servlet container.  
  
That further suggests that you need to configure your classpath in your
web app environment, or have an issue with how your app and
dependencies are packaged. I've only done this stuff with Maven &
Netbeans targeting Glassfish, so I can't really offer much help with
the details of doing it right using Eclipse's build system and a Tomcat
target.  
  
--  
Craig Ringer  
 

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Manohar Bhattarai 2010-06-05 11:31:35 Re: Not able to connect to postgresql database
Previous Message Andy Burgard 2010-06-04 19:37:14 a problem with getting correct info about table's privileges