コメントで話し合った後、問題を再現できるかどうかを確認するために、ローカルで単純な「HelloWorld」を構築することにしました。私はいくつかのフープを経験しなければなりませんでしたが、あなたが説明したものではありませんでした。クラスパスに競合するバージョンのjettyライブラリがあるかどうか疑問に思います。たとえば、ここでこの質問を見てください。念のため、GWTホストモード、クラスの読み込み、Hibernate(ここでは、もっと、もっと)に関連する他の問題に対処する必要がありました。これですべてが明確になり、私の簡単な例が機能しています。
ケースに戻ります。パッチが適用されたJettyランチャーを調べて、GWTがJettyのロギングサブシステムに対して何をしているかを理解しました。JettyTreeLogger
インナークラスを見てください。INFO
以下のすべてをに送信しますSPAM
。ログレベルでGWTアプリを実行しない限りSPAM
、ケースを診断するために必要な「貴重な」Jetty出力は表示されません。そのため、実行構成([GWT]タブ)でSPAMログレベルをオンにするか、Jettyログメッセージを飲み込まないように、既にパッチが適用されているランチャーにさらにパッチを適用します。
独自のJettyLauncherをセットアップし、ログレベルのSPAMでGWTを実行する手順を実行すると、コンソールに次のように表示されます。
...
Created java:comp/env for webapp /
Finding global env entries
...
parse: file:/.../JettyHibernateExample/war/WEB-INF/jetty-env.xml
...
loaded class com.mysql.jdbc.jdbc2.optional.MysqlDataSource from ContextLoader@null
XML new class com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
...
XML new class org.mortbay.jetty.plus.naming.Resource
...
Looking up name="jdbc"
Looking up binding for jdbc for context=env
...
Subcontext jdbc created
Adding binding with key=nndb obj=Reference Class Name: com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
構成を正常に解析し、作成されたオブジェクトを適切にバインドします。さらにログで:
May 30, 2012 5:27:33 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
...
DEBUG org.hibernate.cfg.Configuration -
hibernate.connection.datasource=java:comp/env/jdbc/nndb
...
DEBUG org.hibernate.internal.SessionImpl - Opened session at timestamp
DEBUG org.hibernate.internal.SessionImpl - Disconnecting session
DEBUG o.h.e.j.i.LogicalConnectionImpl - Releasing JDBC connection
ASessionFactory
は正常にインスタンス化され、Session
開かれ、その後切断されました。ここからすべてが良いと仮定して、それ以上テストしませんでした。
これが私が持っている依存関係のリストですWEB-INF/lib
:
antlr-2.7.7.jar
dom4j-1.6.1.jar
gwt-servlet.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.3.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-validator-4.1.0.Final.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
jetty-naming-6.1.11.jar
jetty-plus-6.1.11.jar
logback-classic-1.0.1.jar
logback-core-1.0.1.jar
mysql-connector-java-5.1.20-bin.jar
report
slf4j-api-1.6.4.jar
validation-api-1.0.0.GA.jar
ログをオンにして、最終的に何が邪魔になるかがわかることを願っています。さらにサポートが必要な場合は、どこかで共有してください。
更新これで、ログファイルを検査できるようになり、さらに推奨事項を作成し始めます。私が最初に気付いたのは、あなたweb.xml
が要素のDTD順序に従っていないようだということです。、、、およびの後にresource-ref
行く必要があります。しかし、これは問題ではないようです。servlet
servlet-mapping
welcome-file-list
あなたが言うとき、あなたが正確に何を意味するのか教えていただけますか
@異なるバージョン:プロジェクトクラスパス:6.1.26、ただしWEB-INF/libの6.1.11
クラスパスが問題にならないようにしたいのですが、実行時に複数の突堤JARが競合しないようにします。.classpath
にあるものの完全なリストと一緒にプロジェクトファイルを共有してくださいWEB-INF/lib
。
UPDATE2ログファイルと私のイベントのシーケンスの違いを理解しました。追いかけます。
Jetty 6.1.11の場合:
public void configureWebApp() throws Exception
{
//create a java:comp/env
createEnvContext();
//add java:comp/env entries for any globally defined EnvEntries
bindGlobalEnvEntries();
//set up java:comp/env as the Context in which to bind directly
//the entries in jetty-env.xml
NamingEntry.setScope(NamingEntry.SCOPE_LOCAL);
//check to see if an explicit file has been set, if not,
//look in WEB-INF/jetty-env.xml
....
}
桟橋6.1.26にいる間:
public void configureWebApp() throws Exception
{
//check to see if an explicit file has been set, if not,
//look in WEB-INF/jetty-env.xml
...
}
コンテキストの作成は次の場所に移動します。
public void configureDefaults() throws Exception
{
//create a java:comp/env
createEnvContext();
}
そしてそれは設定されませんSCOPE_LOCAL
。SCOPE_LOCAL
ルートコンテキストがないと、本来あるjava:comp/env
べき姿とは異なります。6.1.26(plus
およびnaming
)で実行すると、「問題のある」ことがわかります。
Looking up binding for __ for context=null
とはいえ、とにかくうまく機能します。その「スコープ」ロジックは現在、他の場所に存在している必要があり、6.1.26(および以前のバージョンのどこにも競合するクラスがない)がある限り、問題なく動作するはずです。あなたが持っている場所:
Looking up name="__/jdbc/nndb"
Looking up binding for __ for context=null
InitialContextFactory.getInitialContext()
Created initial context delegate for local namespace:org.mortbay.naming.local.localContextRoot@237c8a9c
InitialContextFactory.getInitialContext()
Created initial context delegate for local namespace:org.mortbay.naming.local.localContextRoot@457019f7
Looking up name="Server@1c9e8392/__/javax.sql.DataSource/default"
私は持っています:
Looking up name="__/jdbc/nndb"
Looking up binding for __ for context=null
Looking up name="jdbc/nndb"
Looking up binding for jdbc for context=__
Looking up name="nndb"
Looking up binding for nndb for context=jdbc
InitialContextFactory.getInitialContext()
Created initial context delegate for local namespace:org.mortbay.naming.local.localContextRoot@1830f66
>>> new root context requested
Looking up name="comp/env"
Looking up binding for comp for context=null
Using classloader of current org.mortbay.jetty.handler.ContextHandler
Looking up name="env"
Looking up binding for env for context=comp
Binding java:comp/env/jdbc/nndb to jdbc/nndb
とはいえ、クラスパスをまっすぐにして、6.1.11または6.1.26を実行していることを確認し、2つの混合物ではないことを確認してください。それはそれをするべきです。後もう一つ。を使用してカスタムJNDIのもの(オブジェクトファクトリなど)を持ち込まないようにしてくださいWEB-INF/classes
。