Контекстная информация в Tomcat5.5 - PullRequest
1 голос
/ 25 октября 2008

Я сталкиваюсь с этой специфической проблемой. Мое веб-приложение прекрасно работает на моем локальном хосте. Это приложение 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>

Может кто-нибудь помочь мне выяснить, в чем дело, пожалуйста?

Cheers, Rohitesh.

Ответы [ 9 ]

3 голосов
/ 25 октября 2008

Не должно ли это:

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

действительно указываете имя сервера, на котором размещена база данных? На удаленном хосте сервер базы данных не может быть той же машиной, что и экземпляр tomcat. Я думаю, что вы должны сказать

url = "jdbc: mysql: // [имя_сервера] / [имя базы данных]? AutoReconnect = true"

2 голосов
/ 26 октября 2008

Вот мое предположение:

Вы сказали, что это виртуальный хостинг. Тогда не должно

<Context path="" 

содержит контекстный путь вашего конкретного приложения?

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html Путь контекста этого веб-приложения, который сопоставляется с началом каждого URI запроса для выбора соответствующего веб-приложения для обработки. Все пути контекста в пределах определенного хоста должны быть уникальными. Если вы указываете контекстный путь для пустой строки (""), вы определяете веб-приложение по умолчанию для этого хоста, которое будет обрабатывать все запросы, не назначенные для других контекстов.

Таким образом, ваш контекст недопустим и, я полагаю, просто невидим (вот почему null driver и null url).

Он будет работать на вашем локальном компьютере, так как "" является общим контекстом для всех развернутых приложений, включая ваше.

1 голос
/ 26 октября 2008

Rohitesh,

Согласно ответу и комментариям Владимира, вы можете рассмотреть вопрос об обновлении контекста сервера (server.xml или более глобального контекста context.xml).

Если ничего другого, это, на мой взгляд, лучшая практика. Хотя Tomcat действительно позволяет вам определять контекст (включая ресурсы JNDI) из самого веб-приложения, единственное место, где вы должны использовать эту функцию, находится на локальном тестовом сервере разработчика. Это делает ваше веб-приложение более переносимым, так как позволяет изменять конфигурацию ваших внешних ресурсов (в данном случае, базы данных, но это может быть почтовый сервер или сервер содержимого, механизм правил и т. Д.) Независимо от вашего приложения.

Надеюсь, это поможет.

1 голос
/ 26 октября 2008

Как насчет этого ограничения:

http://wiki.hostjava.net/index.php/HostJava.net_FAQ При использовании Shared Tomcat доступ к файлу server.xml ограничен. Только обслуживающий персонал может добавлять область (например, область JDBC) в файл server.xml.

Похоже, вам нужно обратиться в службу поддержки, чтобы добавить свой источник данных.

0 голосов
/ 27 октября 2008

Извините всех. Это была проблема недопонимания между мной и командой поддержки хостинга. Было столкновение конфигов. Они установили некоторые старые настройки в server.xml. Поскольку это имеет приоритет над любой другой контекстной информацией, я столкнулся с этими проблемами. Теперь об этом позаботятся.

Но я все еще чувствую, что позволить людям в общей конфигурации иметь контекстную информацию в файле META-INF / context.xml - лучший вариант Таким образом, они имеют больше контроля над ним.

Но я благодарю всех, кто нашел время, чтобы ответить. Я многому у тебя научился. Еще раз спасибо.

Ура, R

0 голосов
/ 26 октября 2008

Другое примечание: Есть ли у вас доступ к другим файлам журналов, кроме тех, которые вы опубликовали? Если у вас есть доступ к файлу logs / catalina.out на сервере, он может показать вам точную проблему, с которой Tomcat пытается настроить источник данных (это будет правильно при запуске Tomcat).

0 голосов
/ 26 октября 2008
  • доступен ли драйвер? Попробуйте Class.forName ("com.mysql.jdbc.Driver"); - и он не может быть расположен в ваших веб-приложениях WEB-INF / lib, потому что вы запрашиваете контейнер (tomcat) для его создания: он должен быть в classpath серверов
  • Вы используете Tomcat 5.5.x или 6.0.x? В 5.0.x синтаксис context.xml, особенно определение ресурса, был другим: намного больше тегов xml вместо более хороших и простых атрибутов с 5.5.
0 голосов
/ 25 октября 2008

Особенность в том, что другая часть того же приложения обращается к базе данных с помощью жестко запрограммированного URL (используя DriverManager и NOT источник данных из поиска JNDI), и это работает просто отлично (проверьте первые две строки в журнале и следующие несколько строк с названиями кухонь, которые считываются из базы данных). Таким образом, несомненно, что база данных также находится на том же сервере.

Ура, R

0 голосов
/ 25 октября 2008

"java.lang.NullPointerException на com.DAO.UserDAO.userLogin (UserDAO.java:109) на com.Actions.UserAction.execute (UserAction.java:66) в 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) «

Это говорит мне, что что-то НЕ инициализируется должным образом. на какой объект вы вызываете в строке 109 UserDAO.java?

"25.10.08 (02:08) ajp-127.0.0.1-8015-1 ОШИБКА UserDAO.java:104 Невозможно создать драйвер JDBC класса '' для URL-адреса соединения 'null'
25.10.08 (02:08) ajp-127.0.0.1-8015-1 ОШИБКА UserDAO.java:105 org.apache.tomcat.dbcp.dbcp.SQLNestedException: Невозможно создать драйвер JDBC класса '' для URL подключения ' ноль' «

Вы проверили URL для БД. Похоже, что URL является недействительным или NULL. Можете ли вы указать значение URL для соединения JDBC вручную?

...