Встроенная пристань GWT eclispe и пул соединений DBCP

Я пытаюсь настроить встроенную Jetty, которая поставляется с подключаемым модулем Eclipse GWT (2.0.3), для использования пула соединений JNDI, который отлично работает под Tomcat, но безуспешно. Теперь, когда я прочитал кое-что об этой проблеме, мне удалось сделать следующее: Включить фабрику начального контекста именования Jetty в путь к классам, запустив jvm со следующим параметром: -Djava.naming.factory.initial=org.mortbay.naming.InitialContextFactory. Я также создал jetty-web.xml, который выглядит так:

<New id="mysqltest" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>java:comp/env/jdbc/mysqldb</Arg>
    <Arg>
    <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
    <Set name="Url">jdbc:mysql://192.168.0.5:3306/mydb</Set>
    <Set name="User">testuser</Set>
    <Set name="Password">testpass</Set>
    </New>
    </Arg>
</New>
<New id="db2test" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>java:comp/env/jdbc/db2db</Arg>
    <New class="org.apache.commons.dbcp.BasicDataSource">
    <Set name="driverClassName">com.ibm.db2.jcc.DB2Driver</Set>
    <Set name="url">jdbc:db2://192.168.0.6:50000/mydb2</Set>
    <Set name="username">testuser</Set>
    <Set name="password">testpass</Set>
    </New>
</New>
</Configure>

и включили необходимые файлы в мой путь сборки. Как вы можете видеть, там объявлены два ресурса JNDI, дескриптор базы данных MySQL с использованием MysqlConnectionPoolDataSource (я видел это в сообщении в блоге), который отлично работает в моей среде и использовал это, чтобы убедиться, что пристань анализирует причал-сеть. xml и второй, который пытается использовать DBCP для подключения к базе данных DB2. Проблема в том, что всякий раз, когда я пытаюсь использовать ресурс DBCP, я получаю следующую ошибку при запуске Jetty:

[WARN] Config error at <New id="db2test" class="org.mortbay.jetty.plus.naming.Resource"><Arg>java:comp/env/jdbc/db2db</Arg>...
[WARN] Failed startup of context com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload@7a74db2c{/,/home/..}
java.lang.IllegalStateException: No Constructor <New id="db2test" class="org.mortbay.jetty.plus.naming.Resource"><Arg>java:comp/env/jdbc/db2db</Arg>...

Как я уже сказал, они отлично работают под Tomcat, и проблема не специфична для DB2, я также не могу получить источник данных MySQL с помощью DBCP. Глядя на сообщение об ошибке, кажется, что файлы DBCP не находятся в пути к классам, но я понятия не имею, как их туда поместить (они, конечно, находятся в пути сборки проекта, но это не имеет отношения к Jetty). Мне, вероятно, придется добавить еще один параметр в Djava.naming.factory.initial, но я не уверен, какой из них правильный для работы DBCP.

Ваше здоровье


person nvrs    schedule 25.02.2010    source источник
comment
Есть ли причина, по которой вам нужно использовать встроенную Jetty? Как вы, возможно, знаете, с этим связано много проблем, особенно с более сложными проектами. Я бы рекомендовал использовать внешний сервер (поскольку у вас уже есть Tomcat): code.google.com/webtoolkit/doc/latest/   -  person Igor Klimer    schedule 25.02.2010
comment
Полагаю, вы правы, дело в том, что я надеялся избежать еще одной процедуры настройки ...   -  person nvrs    schedule 25.02.2010
comment
Что ж, если вы посмотрите на это как на способ избежать серьезного PITA с настройкой Jetty в будущем (или сейчас, как кажется), это не так уж плохо;)   -  person Igor Klimer    schedule 25.02.2010


Ответы (1)


Я думаю, вам не хватает тега Arg.

Пытаться:

<New id="db2test" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>java:comp/env/jdbc/db2db</Arg>
    <Arg>
       <New class="org.apache.commons.dbcp.BasicDataSource">
         <Set name="driverClassName">com.ibm.db2.jcc.DB2Driver</Set>
         <Set name="url">jdbc:db2://192.168.0.6:50000/mydb2</Set>
         <Set name="username">testuser</Set>
         <Set name="password">testpass</Set>
       </New>
     </Arg>
</New>
person Martijn de Bruijn    schedule 28.02.2010