我试试.

把类包放到ROOT/WEB-INF/lib下后,访问页面tomcat不在down掉了。

但出另外一个错误

exception

javax.servlet.ServletException: (class: org/ksb/db/PoolManager, method: init signature: ()V) Incompatible object argument for function call
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:471)
at org.apache.jsp.index$jsp._jspService(index$jsp.java:421)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)


root cause

java.lang.VerifyError: (class: org/ksb/db/PoolManager, method: init signature: ()V) Incompatible object argument for function call
at org.ksb.db.Db.select(Db.java:53)
at org.ksb.db.Db.select(Db.java:74)
at org.ksb.db.Db.select(Db.java:81)
at xbwh.util.FrontList.show(FrontList.java:35)
at org.apache.jsp.index$jsp._jspService(index$jsp.java:82)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)

好像是说我的PoolManager的init中进行函数调用的使用有一个的对象声明冲突。
private void init() {
//取到配置文件的全路径
StringBuffer PoolManagerXMLDir = new StringBuffer(100);
// String JavaExtDirs = System.getProperty("PoolConfigDir");
String JavaExtDirs = Config.DB_CONF_FILE;
String fileSeparator = System.getProperty("file.separator");

PoolManagerXMLDir.append(
JavaExtDirs + fileSeparator + "PoolManager.xml");
//System.out.println("将要读入的配置文件是:" + PoolManagerXMLDir);
//将配置文件读入内存
configDoc = null;
props = new Properties();
try {
DOMParser parser = new DOMParser();
parser.parse(PoolManagerXMLDir.toString());
configDoc = parser.getDocument();
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (configDoc != null) { //正确的读入了配置文件
parseConfigDoc2Properties(configDoc);
loadDrivers(props);
createPools(props);
}
}
这是init函数全部的代码,是否是这里声明DOMParser的时候有冲突?

应该把PoolManager也放到ROOT\WEB-INF\lib下去,看错误信息,应该是PoolManager去找解析器,但是它找到的是Tomcat带的解析器。

在Tomcat的Class Loader继承的层次是:


JDK Bootstrap Class Loader
|--JDK Ext Class Loader
|--JDK App Class Loader
|--Tomcat Common Class Loader
|--Tomcat Shared Class Loader
|--Tomcat Web App Class Loader

class loader找不到class,只能向上一级class loader找,但是上一级class loader不会去下一级class loader找。如果你的PoolManager所在Class Loader层次比它用到的解析器层次高的话,PoolMananger只会向上找,结果就找到了Tomcat的解析器。把PoolManager代码和解析器放在同一层就好了,或者解析器放在Shared层,比Tomcat低,把PoolManager高也可以。

出这个异常时,PoolManager和所有的自己类包都在WEB-INF下放着。

类通不过java的校验器校验。

还是类型混乱和类冲突的问题。tomcat到底那些类是自身有的。

总算都搞定了.
在linux下敲汉字太不爽.明天到公司再来总结吧.

1,关于Mysql的权限问题。

在windows平台上没有发现如果没有显式的指定一个用户从指定IP连接的权限则mysql拒绝从此ip连接的问题。

linux(RedHat9),从localhost连接mysql(通过JDBC或者使用mysql -h -u -p命令),则需要显式的使用grant 授给 用户@localhost、用户@主机名、用户@ip、用户@%的访问权限。

2、关于Xerces解析器的问题。

tomcat自带的解析器是1.X(tomcat4.0.6的文档这么说)。

我在windows下编译自己的类包时使用的Xerces是个最新的版本吧。此Xerces和tomcat自带的差别很大。

在parsers包中,tocat自带的只有DOMParser和SAXParser两个类,而我使用的Xerces中则包含很多类(应该是上述两个解析器功能的拆分和类包之间的调整的结果吧。)。
结果,linux的tomcat4.0.6下运行,如果不把我的xerces放过去,则报class not found AbstractDOMParse(parser.getDocument()为AbstractDOMParser的一个方法)。
把我的xerces放进去则报java校验器校验错误(不论放在common层、shared层还是app层)。

在linux使用tocmat4自带的xerces对自己的类包重新编译,然后使用tomcat自带的xerces解决问题。

看来sinio_feng确实应该反省一下了,用MySQL两年了连这么基础的问题都不知道。安装完MySQL后的第一件事就是将空用户删除,重新授权。看看MySQL自带的文档资料吧。

robbin的功底确实很踏实。让人佩服。而我却就是很懒。
论坛上有很多的人自己不认真的看看文档资料,就会到论坛上来问别人。

http://www.jdon.com/jive/thread.jsp?forum=16&thread=9323 问TOMCAT连接池问题的人,我怀疑就是我离开现在公司以后进来的人,连MySQL jdbc driver都找不到,配置一个连接池都不会,我真的很服啊。

我前一段时间一个应用数据迁移的问题已经解决了,解决办法是我提出的,但是从MySQL到Oracle以后大对象的处理给程序底层带来了很大的修改(这是别人的事,不归我改),那个应用做的真是很烂。

现在又失业了,在休息,呵呵

受教了。

对技术细节向来不太关心,我的原则一直是够我用就行了。在公司中,我的角色不是高深的技术人员。

mysql在2000年的时候在redhat6上使用过,后来一直在windows下使用。没有遇到过这些问题。况且使用mysql一直是做一些外包事情的给别人用,所以具体的东西没有去看过文档。只是在使用它的数据存储功能和新增用户、设置密码之类的东西。

在公司使用的大型数据库db2和sqlserver,没机会接触mysql。

mysql在windows下和linux下的工作原理是不一样的。在windows下无论是从mysql的客户端连接还是从JDBC连接连的都是root@localhost。
(假设用户名使用root,计算机名为jsj00)
而在linux下客户端连的是root@localhost,而JDBC连的是root@jsj00。所以如果JDBC中是password=abc,那么应该是:
# mysqladmin -hjsj00 -uroot password abc
而不是:
# mysqladmin -uroot password abc

同意hecc的说法,请在请教别人之前,自己先看看文档,到底robin回答问题是要占用时间的,不是无偿的,同时这些技术细节本身的学习也要占用很多的时间,用将心比心才能以心换心.

否则,到底人是需要的双向的反馈的,总是给予不是可以一直持续的,类似于experts-exchange的做法我觉的事不错的.

对要求帮助的懒人来说,至少表示出礼节性的感激我觉的是最起码的礼貌,是NetEtiquite的一种.

================================================================
看来sinio_feng确实应该反省一下了,用MySQL两年了连这么基础的问题都不知道。安装完MySQL后的第一件事就是将空用户删除,重新授权。看看MySQL自带的文档资料吧。

robbin的功底确实很踏实。让人佩服。而我却就是很懒。
论坛上有很多的人自己不认真的看看文档资料,就会到论坛上来问别人。

http://www.jdon.com/jive/thread.jsp?forum=16&thread=9323 问TOMCAT连接池问题的人,我怀疑就是我离开现在公司以后进来的人,连MySQL jdbc driver都找不到,配置一个连接池都不会,我真的很服啊。

我前一段时间一个应用数据迁移的问题已经解决了,解决办法是我提出的,但是从MySQL到Oracle以后大对象的处理给程序底层带来了很大的修改(这是别人的事,不归我改),那个应用做的真是很烂。

现在又失业了,在休息,呵呵
================================================================