Проблема с ресурсом JNDI для Tomcat 6 в Linux с файлом WAR - PullRequest
1 голос
/ 03 ноября 2010

Я довольно новичок в веб-разработке Tomcat и Java и бьюсь головой о стену с проблемой, с которой я столкнулся.

У меня есть веб-приложение, которое отлично работает на моем локальном компьютере (windows xp), у меня установлен Tomcat 6 с файлом WAR, развернутым в папке webapps и в папке c: /apache-tomcat-6.0.18/conf/ Каталог Catalina / localhost / у меня есть «myApp.xml».

myApp.xml содержит следующее:

<Context path="/myApp" docBase="/myApp.war" debug="1" reloadable="true" cookies="true">
  <Resource name="jdbc/sql-connection" scope="Shareable" type="javax.sql.DataSource" auth="Container" username="test" password="test" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc:jtds:sqlserver://xxxx:xxxx;appName=myApp" removeAbandoned="true" logAbandoned="true" /> 
  </Context>

Тогда в моем веб-приложении у меня есть следующая информация в файле applicationContext

<bean id="myDatasource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>java:comp/env/jdbc/sql-connection</value>
        </property>
    </bean> 

Теперь я перешел от того, что все нормально работает на моем локальном компьютере, к развертыванию его на компьютере под управлением Linux, однако, когда я развернул его там, с точно такой же настройкой, просто tomcat запускает из "opt / apache-tomcat- 6.0.18" . Каждый раз, когда я пытаюсь запустить Tomcat на коробке, он распаковывает файл WAR, но не запускает его, и выдает мне следующую ошибку всякий раз, когда я пытаюсь запустить его через менеджер:

Error creating bean with name 'myDatasource' defined in file [/opt/apache-tomcat-6.0.18/webapps/myApp/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

Я пытался найти ответ по всему Интернету, но, похоже, ни у кого нет такой же проблемы, и имена, кажется, совпадают между файлом конфигурации tomcat и веб-приложением.

1 Ответ

2 голосов
/ 03 ноября 2010

Прежде всего, Tomcat не понимает myApp.xml (если вы явно не указываете на это, что я не знаю, как).Tomcat работает на основе context , который можно настроить для вашего веб-приложения.Tomcat разрешает только развертывание файла архива веб-приложений (WAR).

Чтобы создать контекст для своего приложения, создайте файл context.xml (все с маленькими заглавными буквами, с учетом регистра) * внутри вашегоВеб-приложение META-INF папка.

Справочное руководство по настройке контекста можно найти в Tomcat 6 Config / Context .Вы увидите, что атрибут debug является устаревшим .

HOW-TO ресурсов JNDI для Tomcat 6 также доступен .

Как только высоздав context.xml в папке META-INF, вставьте следующий код (взятый из вашего примера) ниже:

<Context path="/myApp" docBase="/myApp.war" reloadable="true" cookies="true">
    <Resource name="jdbc/sql-connection" type="javax.sql.DataSource" auth="Container" username="test" password="test" driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc:jtds:sqlserver://xxxx:xxxx;appName=myApp" removeAbandoned="true" logAbandoned="true" /> 
</Context>

(по умолчанию Tomcat использует PoolableDataSource для пула соединений).

Как только вы закончите, настройте <resource-env-ref> в WEB-INF/web.xml.Это позволит вам создать область общего доступа.Пожалуйста, обратитесь к ссылке , предоставленной на Tomcat 6 JNDI, HOW-TO .

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

...