CentOS5 に yum でインストールした tomcat5.5 から PostgreSQL8.3
に DataSource を使って接続しようと思い試してみるとエラーばっかり><
今までは DriverManager を使っていて問題なく動いていたのですが、
DataSource をどうしても試してみたいので探検することに。
エラーの内容は
HTTPステータス 500 - ■例外 org.apache.jasper.JasperException: Could not create resource factory instance org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:476) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) ■原因 javax.servlet.ServletException: Could not create resource factory instance org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779) org.apache.jsp.mainteProduct_jsp._jspService(mainteProduct_jsp.java:335) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) ■原因 javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory] org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:118) javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) org.apache.naming.NamingContext.lookup(NamingContext.java:793) org.apache.naming.NamingContext.lookup(NamingContext.java:140) org.apache.naming.NamingContext.lookup(NamingContext.java:781) org.apache.naming.NamingContext.lookup(NamingContext.java:153) org.apache.jsp.mainteProduct_jsp._jspService(mainteProduct_jsp.java:119) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) ■原因 java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory java.net.URLClassLoader$1.run(URLClassLoader.java:200) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:188) java.lang.ClassLoader.loadClass(ClassLoader.java:306) java.lang.ClassLoader.loadClass(ClassLoader.java:251) java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) java.lang.Class.forName0(Native Method) java.lang.Class.forName(Class.java:169) org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:115) javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) org.apache.naming.NamingContext.lookup(NamingContext.java:793) org.apache.naming.NamingContext.lookup(NamingContext.java:140) org.apache.naming.NamingContext.lookup(NamingContext.java:781) org.apache.naming.NamingContext.lookup(NamingContext.java:153) org.apache.jsp.mainteProduct_jsp._jspService(mainteProduct_jsp.java:119) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
といった感じで tomcat に不慣れな自分にはまったく意味がわかりません。
なんとなく気付いたのは
データベースの設定が書かれた何かを javax.naming が探しにいってるようですが
javax.naming がうまく動いてないのかなってぐらい。
META-INF/context.xml
<reloadable="true"> type="javax.sql.DataSource" username="○○○" password="△△△" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/tomcatDB" maxActive="10" maxIdle="4" maxWait="5000" <validationQuery="SELECT * FROM category" />
WEB-INF/web.xml
postgreSQL Datasource example jdbc/postgres javax.sql.DataSource Container
途方に暮れてるとひとりシステム屋さんというページを発見!!
同じ様に Tomcat5.5 のソースをダウンロードしてきて naming-factory-dbcp.jar を tomcat の common/lib に配置してみると
みごとに動きましたb
ありがとう~「ひとりシステム屋さん」!