2012-03-14 48 views
3

この質問が繰り返されるようであればよろしいですが、私は既存の投稿の検索結果から実行可能な解決策を見つけられませんでした。eclipseでGWT/Jettyとの接続プールを設定するにはどうすればよいですか?

私はJDBC接続プールを使用するWebアプリケーションを持っています。接続プールリソースは、warファイルのmeta-inf/context.xmlに定義されています。 warファイルをtomcatにデプロイすると、このファイルはtomcatのconf/catalina/localhostフォルダにコピーされます(そしてwarファイルの名前と一致するように名前が変更されます)。

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

と私のcontext.xmlは、定義された以下のリソースがあります:私のコードは次のような接続のデータソースオブジェクトを取得warファイルをTomcatにデプロイされたとき

<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" 
     /> 

このすべてがうまく機能します。

しかし、eclipseでの開発中やGWTの依存関係のために、私はしばしばGWTに組み込まれたjettyコンテナを使用してデバッグする必要があります。私はこれを行うと

、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 

私は戦争のWEB-INFに桟橋-env.xmlを使用しようとしましたが、それはどちらか(同じ動作しませんでしたエラー)、おそらくjetty-env.xmlなどの構文エラーです。ここで

は私の桟橋-ENVである:私は桟橋-web.xmlに桟橋-env.xmlの名前を変更した場合は、

<?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> 

最後に一つ、私はとき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が読み込まれていないと思いますが、jetty-webはそうですが、私のjetty-webは明らかにjettyのGWTの設定に干渉します。

答えて

0

私はあなたの桟橋の問題に慣れていませんが、-noserverフラグを使用してGWTのサーブレットコンテナの代わりに独自のサーブレットコンテナを使用できることを知っています。それは素晴らしい動作し、私はホストモード中に他のサーバーを使用することができます。

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はjetty 6.1.11を使用し、thisorg.eclipse.jettyパッケージはJetty 7ではなく6です!

私は同様の問題を抱えていて、ライブラリのjetty-namingとjetty-plusをプロジェクトに追加することで解決しました。それは私がのpom.xmlにこれを追加Mavenのプロジェクトです:

<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> 

のmavenなしでWebからjetty-namingjetty-plus jarファイルをダウンロードすることができます。

私のリソースは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) new InitialContext().lookup("java:/comp/env/jdbc/postgres"); 
+0

詳細な回答ありがとうございます!私はそれを試して、それは私のために動作しませんでした。私は、これは、このSOの答え(https://stackoverflow.com/a/17592318)に基づいて、私がJetty 8.1.12を使用していると信じている、新しいGWT(2.6.0)を使用しているからです。私は設定ファイルとクラス名が違うと信じていますが、Jetty 8のマニュアルをオンラインで見つけることができませんでした(Jetty 9.3.xのみ利用可能です)。とにかく私はJetty 9(ここ:https://www.eclipse.org/jetty/documentation/9.3.x/using-jetty-jndi.html)の指示に従ってみるつもりです。あなたが洞察力を持っているなら、私と共有してください。 – leeyuiwah

関連する問題