2012-03-14 6 views
3

Извините, если этот вопрос кажется повторяющимся, но я не смог прояснить работоспособное решение из результатов поиска существующих сообщений.Как настроить пул соединений с GWT/Jetty в eclipse?

У меня есть веб-приложение, в котором используется пул соединений JDBC. Ресурс пула соединений определен в мета-инф./Context.xml файла войны. Когда я разворачиваю файл войны в tomcat, этот файл копируется (и переименовывается в соответствии с именем моего военного файла) в папку conf/catalina/localhost tomcat. Мой код получает объект источника данных для соединения, как это:

Context envCtx = (Context) new InitialContext().lookup("java:comp/env"); 
datasource = (DataSource) envCtx.lookup("jdbc/MYDB"); 

и мой context.xml имеет следующий ресурс, определенный:

<Resource name="jdbc/MYDB" 
     auth="Container" 
     type="javax.sql.DataSource" 
     driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
     username="username" 
     password="password" 
     url="jdbc:sqlserver://myremote.database.server:1433;databaseName=testdb" 
     /> 

Все это хорошо работает, когда файл война развертывается кот.

Однако, во время разработки в затмении и из-за зависимостей GWT, мне часто приходится отлаживать использование встроенного контейнера для причала GWT.

Когда я делаю это, вызов InitialContext() выдает следующее сообщение:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 

Я попытался использовать пристани-env.xml в войнах веб-инфе, но это не сработало (то же самое ошибка), возможно синтаксическая ошибка в jetty-env.xml или что-то еще.

Вот мой причал-ENV:

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 
<New id="OTMFTDB" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/MYDB</Arg> 
    <Arg> 
     <New class="net.sourceforge.jtds.jdbcx.JtdsDataSource"> 
      <Set name="User">username</Set> 
      <Set name="Password">password</Set> 
      <Set name="DatabaseName">testdb</Set> 
      <Set name="ServerName">myremote.database.server</Set> 
      <Set name="PortNumber">1433</Set> 
     </New> 
    </Arg> 
</New> 
</Configure> 

Одна последняя вещь, если я изменил название молы-env.xml к молы-web.xml, то я получаю ошибку 503 HTML когда Я пытаюсь подключить браузер. (eclipse показывает следующую ошибку: [WARN] Не удалось запустить контекст com.g[email protected]111a20c {/, E: \ dev \ src \ servers \ webservice \ war} java .lang.ClassNotFoundException: org.eclipse.jetty.server.Server)

Так что я считаю, что jetty-env не был загружен, а причал-сеть, но моя пристань явно препятствует настройкам GWT для причала.

ответ

0

Хотя я не знаком с вашей проблемой причала, я знаю, что вы можете использовать свой собственный контейнер сервлетов вместо контейнера сервлетов GWT, используя флаг -noserver. Он отлично работает и позволяет мне использовать любой другой сервер в режиме размещения.

http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html#How_do_I_use_my_own_server_in_development_mode_instead_of_GWT's

2

У вас не хватает org.eclipse.jetty.server.Server, но я думаю, что это не правильно класс. GWT 2.5.1 использует причал 6.1.11 и согласно this - org.eclipse.jetty пакет от Jetty 7, а не 6!

У меня была схожая проблема, и я решил ее, добавив в проект проект библиотек jetty-naming и jetty-plus. Это Maven проект, поэтому я добавил это pom.xml:

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-naming</artifactId> 
    <version>6.1.11</version> 
</dependency> 
<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-plus</artifactId> 
    <version>6.1.11</version> 
</dependency> 

Без мавена вы можете скачать jetty-naming и jetty-plus банки из Интернета.

Мой ресурс - драйвер PostgreSQL JDBC. Теперь все работает - в режиме размещения - конфигурация ресурсов, загруженная из jetty-web.xml.И когда я создаю войну и развертываю в Tomcat, ресурс получается из context.xml.

context.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/web"> 
    <Resource auth="Container" driverClassName="org.postgresql.Driver" 
     maxActive="100" maxIdle="30" maxWait="200" name="jdbc/postgres" 
     username="testuser" password="testpass" type="javax.sql.DataSource" 
     url="jdbc:postgresql://localhost:5433/resolver" /> 
</Context> 

причал-web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> 
<Configure class="org.mortbay.jetty.webapp.WebAppContext"> 
    <New id="GWT_HOSTED_MODE_DB" class="org.mortbay.jetty.plus.naming.Resource"> 
     <Arg>java:/comp/env/jdbc/postgres</Arg> 
     <Arg> 
      <New class="org.apache.commons.dbcp.BasicDataSource"> 
       <Set name="driverClassName">org.postgresql.Driver</Set> 
       <Set name="url">jdbc:postgresql://localhost:5433/resolver</Set> 
       <Set name="username">testuser</Set> 
       <Set name="password">testpass</Set> 
      </New> 
     </Arg> 
    </New> 
</Configure> 

Кроме того, моя web.xml содержит такую ​​ссылку:

<resource-ref> 
    <description>Postgres Connection pool datasource</description> 
    <res-ref-name>jdbc/postgres</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

Datasource загружена таким образом (упрощенное):

DataSource dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/postgres"); 
+0

Спасибо за подробный ответ! Я попробовал, и это не сработало для меня. Я считаю, что это потому, что я использую новый GWT (2.6.0), который, я считаю, использует Jetty 8.1.12 на основе этого SO-ответа (https://stackoverflow.com/a/17592318). Я считаю, что файл конфигурации и имя класса будут разными, но я не смог найти документацию Jetty 8 в Интернете (доступен только Jetty 9.3.x). В любом случае, я попытаюсь выполнить инструкцию для Jetty 9 (здесь: https://www.eclipse.org/jetty/documentation/9.3.x/using-jetty-jndi.html). Если у вас есть понимание, пожалуйста, поделитесь со мной. – leeyuiwah

Смежные вопросы