我正面临着这个特殊的问题。我的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。
答案 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)
答案 7 :(得分:0)
另一个说明: 除了您发布的文件之外,您是否可以访问任何其他日志文件?如果您可以访问服务器logs / catalina.out文件,它可能会向您显示Tomcat设置数据源的确切问题(当您启动Tomcat时这是正确的。)
答案 8 :(得分:0)
对不起大家。这是我和托管设施支持团队之间沟通不畅的问题。有一个冲突的配置。他们在server.xml中设置了一些旧设置。由于这优先于任何其他上下文信息,我正面临着这些问题。现在它被照顾。
但我仍然觉得,允许共享配置的人在META-INF / context.xml文件中获取其上下文信息是一个更好的选择。这样,他们就可以更好地控制它。
但我感谢所有抽出时间的人回应。我从你身上学到了很多东西。再次感谢你。
干杯, [R