Tomcat5.5中的上下文信息

时间:2008-10-25 07:08:17

标签: java tomcat hosting shared-hosting

我正面临着这个特殊的问题。我的webapp,在我的localhost上工作正常。它是一个JSP / Struts-Tomcat-MySQL应用程序。但是,当我在hostjava.net(共享tomcat)上托管它时,它无法连接到数据库。

经过一些调试,我已经确定了问题,使用JNDI查找数据源。如果需要,您可以查看http://rohitesh.hostjava.net/MapsDummyLog.htm

上的日志

有关上下文信息位置的一些详细信息: /META-INF/context.xml包含:

<Context path="" docBase="" debug="5" reloadable="true" crossContext="true" override="true">
   <Resource name="jdbc/ConnectionPooling" auth="Container" type="javax.sql.DataSource"
    maxActive="10" maxIdle="5" username="[username]" password="[password]" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost/[db name]?autoReconnect=true" />
</Context>

任何人都可以帮我找出,哪里出错了,拜托?

干杯, Rohitesh。

9 个答案:

答案 0 :(得分:3)

不应该这样:

url="jdbc:mysql://localhost/[db name]?autoReconnect=true"

真的指出托管数据库的服务器的名称吗?在远程主机上,数据库服务器可能与tomcat实例不在同一台机器上。我认为你必须说

url =“jdbc:mysql:// [Server_Name] / [db name]?autoReconnect = true”

答案 1 :(得分:2)

我的猜测在这里:

你说这是一个共享主机。那不应该

<Context path="" 

包含特定应用程序的上下文路径?

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html 此Web应用程序的上下文路径,它与每个请求URI的开头相匹配,以选择适当的Web应用程序进行处理。特定主机中的所有上下文路径必须是唯一的。如果指定空字符串(“”)的上下文路径,则表示您正在为此主机定义默认Web应用程序,该应用程序将处理未分配给其他上下文的所有请求。

所以你的上下文是无效的,我认为,只是看不见(这就是为什么null driver和null url)。

它适用于您的本地,因为“”是部署的所有应用程序的共享上下文,包括您的。

答案 2 :(得分:1)

这个限制怎么样:

http://wiki.hostjava.net/index.php/HostJava.net_FAQ 使用共享Tomcat访问server.xml文件受到限制。只有支持人员才能将Realm(例如JDBC Realm)添加到server.xml文件中。

看起来你需要请求支持来添加数据源。

答案 3 :(得分:1)

Rohitesh,

根据Vladimir的回答和评论,您可能需要考虑更新服务器上下文(server.xml或更全局范围的context.xml)。

如果不出意外,在我看来,这是一种最佳做法。虽然Tomcat允许您从Web应用程序本身定义上下文(包括JNDI资源),但您应该使用此功能的唯一位置是开发人员的本地测试服务器。它使您的Web应用程序更具可移植性,因为它允许独立于您的应用程序更改外部资源的配置(在这种情况下,数据库,但它可以是邮件服务器,内容服务器,规则引擎等)。 p>

我希望这会有所帮助。

答案 4 :(得分:0)

“显示java.lang.NullPointerException         在com.DAO.UserDAO.userLogin(UserDAO.java:109)         at com.Actions.UserAction.execute(UserAction.java:66)         at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)         在org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)         在org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) “

这告诉我某些东西没有被正确初始化。你在UserDAO.java的第109行调用了什么对象?

“10/25/08(2:08 AM)ajp-127.0.0.1-8015-1错误UserDAO.java:104无法为连接URL'null'创建类''的JDBC驱动程序 10/25/08(2:08 AM)ajp-127.0.0.1-8015-1 ERROR UserDAO.java:105 org.apache.tomcat.dbcp.dbcp.SQLNestedException:无法为连接URL创建类''的JDBC驱动程序空值' “

您是否检查了数据库的URL。看来URL无效或为NULL。您能为JDBC连接URL提供手动值吗?

答案 5 :(得分:0)

奇怪的是,同一个应用程序的另一部分,使用硬编码的URL(使用DriverManager,以及来自JNDI查找的 NOT 数据源)访问数据库,并且工作得很好(查看日志中的前两行,以及接下来几行带有美食名称的行,这些行从数据库中读取。因此,可以肯定的是,数据库也在同一台服务器上。

干杯, [R

答案 6 :(得分:0)

  • 是可用的驱动程序吗?尝试Class.forName(“com.mysql.jdbc.Driver”); - 它不能位于您的webapps WEB-INF / lib中,因为您要求容器(tomcat)为您实例化它:它需要在服务器类路径中
  • 您是否正在运行Tomcat 5.5.x或6.0.x?在5.0.x上,context.xml语法,特别是资源定义,有所不同:自5.5以来,更多xml标签而不是更好更简单的属性。

答案 7 :(得分:0)

另一个说明: 除了您发布的文件之外,您是否可以访问任何其他日志文件?如果您可以访问服务器logs / catalina.out文件,它可能会向您显示Tomcat设置数据源的确切问题(当您启动Tomcat时这是正确的。)

答案 8 :(得分:0)

对不起大家。这是我和托管设施支持团队之间沟通不畅的问题。有一个冲突的配置。他们在server.xml中设置了一些旧设置。由于这优先于任何其他上下文信息,我正面临着这些问题。现在它被照顾。

但我仍然觉得,允许共享配置的人在META-INF / context.xml文件中获取其上下文信息是一个更好的选择。这样,他们就可以更好地控制它。

但我感谢所有抽出时间的人回应。我从你身上学到了很多东西。再次感谢你。

干杯, [R