On Tue, Sep 1, 2009 at 11:26 PM, Christopher Schultz <
[email protected]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Jamez,
>
> On 8/31/2009 10:27 PM, jamez smith wrote:
>
> >>Really? When you run startup.bat from the command-line, is EXITS
> >>CMD.EXE? That is very surprising.
>
Sorry I didn't make this clear. The DOS Window where I type
"startup.bat" is not closed and showed below, but the DOS Window it opened
is closed itself.
C:\Tomcat 4.1\bin>startup.bat
Using CATALINA_BASE: ..
Using CATALINA_HOME: ..
Using CATALINA_TMPDIR: ..\temp
Using JAVA_HOME: C:\j2sdk1.4.2_15
>
>
> >>Try looking in the file logs/procurement_log.[datestamp].txt
>
After I run both "startup.bat" or "catalina run", the procurement_log.txt
showed the exception: (in the server.xml, myApp = procurement, I used myApp
to represent the real project name, hope it won't confuse you.)
2009-09-02 00:25:51 StandardContext[/procurement]: Starting
2009-09-02 00:25:51 StandardContext[/procurement]: Processing start(),
current available=false
2009-09-02 00:25:51 StandardContext[/procurement]: Configuring default
Resources
2009-09-02 00:25:51 StandardContext[/procurement]: Resources start failed:
java.lang.IllegalArgumentException: Document base ..\webapps\procurement
does not exist or is not a readable directory
at
org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:146)
at
org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:3285)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3415)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
at
org.apache.catalina.core.StandardService.start(StandardService.java:450)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
2009-09-02 00:25:51 StandardContext[/procurement]: Configuring
non-privileged default Loader
2009-09-02 00:25:51 StandardContext[/procurement]: Configuring default
Manager
2009-09-02 00:25:51 StandardContext[/procurement]: Processing standard
container startup
2009-09-02 00:25:51 StandardContext[/procurement]: Context startup failed
due to previous errors
2009-09-02 00:25:51 StandardContext[/procurement]: Exception during cleanup
after start failed
LifecycleException: Container StandardContext[/procurement] has not been
started
at
org.apache.catalina.core.StandardContext.stop(StandardContext.java:3600)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3573)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
at
org.apache.catalina.core.StandardService.start(StandardService.java:450)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
>
> > org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of
> > class '' for connect URL 'null', cause:
> > java.lang.NullPointerException
> > at COM.ibm.db2.jdbc.app.DB2Driver.acceptsURL(Unknown Source)
> > at java.sql.DriverManager.getDriver(DriverManager.java:232)
> > at
> >
> org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:743)
>
> >>Amusingly enough, there's a thread occurring concurrently with this one
> >>on the list on this exact issue. Basically: check and re-check all your
> >><Resource> parameters, make sure your datasource name is consistent, and
> >>only put your MySQL driver JAR file in one place: in the server's
> >>library directory (common/lib on TC 4.1 IIRC).
>
I am rechecking and rechecking......I found in common/lib directory there
are one db2java.jar and one COM folder, basically it is the unzipped
version of that db2java.jar. Not sure why the COM folder is there. But I
try to remove the COM folder, the error is still there.
>>It wouldn't hurt to turn up debug to something like "99". I've never
> >>seen good documentation on what that attribute is supposed to do,
> >>unfortunately.
>
I am not sure what debug tag is for? I have never used this tag before.
>
> > <Resource name="jdbc/test_DS" auth="Container"
> > type="javax.sql.DataSource"/>
> > <ResourceParams name="jdbc/test_DS">
> > <!-- Class name for JDBC driver -->
> > <parameter>
> > <name>driverClassName</name>
> > <value>COM.ibm.db2.jdbc.app.DB2Driver</value>
> > </parameter>
> >
> > <!-- The JDBC connection url for connecting to your DB -->
> > <parameter>
> > <name>url</name>
> > <value>jdbc:db2:oscahe</value>
> > </parameter>
> > </ResourceParams>
>
>
> >>The two above parameters are the ones you ought to double- and
> >>triple-check: does the IBM driver really start with COM all in caps? I
> >>suspect that it should be "com.ibm.db2.jabc.app.DB2Driver" instead of
> >>that you have. Case does matter. Also, is the URL you have above the
> >>correct URL for DB2? Does anything need to be set up in a separate file
> >>to resolve "oscahe" (and is that spelled right? "oscache", maybe?)? I
> >>remember Oracle's non-type-IV JDBC drivers needed a separate file to
> >>configure the driver.
>
Yes, IBM driver really starts with COM all in caps. I have unzipped the
db2java.jar and can confirm it is correct. The path
"COM\ibm\db2\jdbc\app\DB2Driver.class" is also correct. "oscahe" is
correct. I have DB2 universal server installed on my local machine. When I
import a profile, I can have different databases to connect to. I am able
to connect to the oscahe database using Toad. I just so confused why I set
docBase as local, Tomcat is working?
>
> >>The last thing I'd ask about your webapp is what the code looks like
> >>that is trying to grab a connection from the connection pool. Is it your
> >>own code? If so, post that. If you are using something like Hibernate,
> >>an O-R mapper, or some other DB framework, post the configuration for
> >>/that/ so we can see what the expected DataSource JNDI name is.
>
This application is not using Hibernate or any other OR mapper. Just the
simple JDBC. This is the code:
private void init() {
/* Initialize the connection manager based upon the interface type */
//OscLogger.debug("Initializing connection pool");
Context ctx = null;
// create parameter list to access naming system
try {
boolean isTomcatServer = config.getBoolean("isTomcatServer",false);
//OscLogger.debug("ConnectionPool : " + "inside init()
isTomcatServer : " + isTomcatServer);
if(isTomcatServer==true){
ctx = new InitialContext();
DataSource ds =
(DataSource)ctx.lookup(config.getString("dbLookUp","java:comp/env/jdbc/test_DS"));
this.setDs(ds);
} else {// else it is a websphere server
Properties parms = new java.util.Properties();
parms.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
// access naming system
ctx = new InitialContext(parms);
//OscLogger.debug("ConnectionPool : " + "inside init()
poolName is : " + poolName);
// get DataSource factory object from naming system
this.setDs((DataSource)
ctx.lookup("java:comp/env/"+this.poolName));
}
OscLogger.debug("Datasource : "+ds.toString());
OscLogger.debug("New DB connection pool "+poolName+" created.");
} catch (Exception ne) {
OscLogger.error(new LogRecord(ErrorCode.UNEXPECTED,
BaseModule.DATABASE),
new OscException("Unable to initialize connection pool -
"+this.poolName,ne));
}finally {
try {
if(ctx!=null) {
ctx.close();
}
} catch (Exception e) {
// Handle Exception
OscLogger.error(new LogRecord(ErrorCode.UNEXPECTED,
BaseModule.DATABASE),
new OscException("Error occured while closing the
initial context ",e));
}
}
}
>
> >>Finally, I wonder if upgrading to a newer level of Tomcat is an option.
> >>I see it's a legacy application, but the servlet API hasn't changed that
> >>dramatically over the years (other than adding features and
> >>tightening-down the specification of older ones). You might find that
> >>your webapp runs perfectly fine on Tomcat 6.0, and will receive better
> >>support from just about everyone. TC 4.1 just got its last update ever,
> >>and it's basically dead.
>
This application has to run on JDK 1.4. My colleague told me we have to use
Tomcat 4, as Tomcat 5 requires JDK 1.5. Is that true? I am more than happy
to switch to higher version of Tomcat. Basically I only use Tomcat on local
for development, and we are using Websphere application server in
production.
Thanks so much Chris!
Jamez.
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iEYEARECAAYFAkqdPScACgkQ9CaO5/Lv0PDSqgCeL5A1lOEn1+MQtxwz1kXYfrzl
> IfEAn2Aq9tS22XgOgvxqiwkRujlWXnn8
> =X00F
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>