2

Jetty を Eclipse RCP アプリケーションに埋め込む際に問題があります。

私のRCPアプリケーションでは、ユーザーがボタンをクリックすると、ブラウザが開き、いくつかのjspページが表示されます。jsp ファイルは別のディレクトリにあり、Tomcat で非常にうまく実行できる Web アプリケーションです。

私はこれを次のような main() メソッドで管理しました:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class SimplestServer
{
    public static void main(String[] args) throws Exception
    {
      int port = 8080;
      Server server = new Server(port);
      String webapp = "D:/workspace/preview"; 
      WebAppContext context = new WebAppContext();
      context.setDefaultsDescriptor(webapp + "/WEB-INF/web.xml");

      // -------
      // Sorry! I add another question in one post, I think this might be some clue
      // If I do not use setDefaultsDescriptor, I got error like this:
      // java.io.FileNotFoundException: D:\BV\eUpgrade\testEnv\eclipse4-2\org\eclipse\jetty\webapp\webdefault.xml
      // Why it does not go to my web.xml, but goes to some path like: org\eclipse\jetty\webapp\webdefault.xml?
      // And in this case, when access to jsp files, got HTTP 503 error.
      // context.setDescriptor(webapp + "/WEB-INF/web.xml");
      // ------

      context.setResourceBase(webapp);
      context.setContextPath("/preview");
      context.setParentLoaderPriority(true);
      server.setHandler(context);

      try {
        server.start();
        server.join();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
}

メインメソッドだけであれば、私にとってはうまく機能します。つまり、Jetty が開始された後、Web アプリのすべてのページにアクセスできます。

しかし、このスニペットをプラグインに挿入すると、機能しません。

サンプルの eclipse rcp プロジェクト (メール テンプレートを使用) を作成し、上記のコードを私の Activator.java に入れました。次に、Eclipse アプリケーションを開始します。次のようなエラーが表示されます。

...
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded interface javax.servlet.Filter  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded interface javax.servlet.Filter from org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@2a49d3b5[javax.servlet:3.0.0.v201112011016(id=4)]  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Object  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Object from null  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class com.broadvision.ssp.webflow.SetCharacterEncodingFilter from WebAppClassLoader=855125537@32f82e21  
19:01:03.762 [main] DEBUG org.eclipse.jetty.servlet.Holder - Holding class com.broadvision.ssp.webflow.SetCharacterEncodingFilter  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Throwable  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Throwable from null  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Exception  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Exception from null  
...

私の WEB-INF\lib*.jar 内のクラスのみをロードできるようです。JRE 内のこれらのクラスは実行時にロードできません。

結果は次
のとおりです。Jetty サーバーは稼働していますが (ポートが javaw.exe によって使用されていることを確認しました)、すべてのページで HTTP 404 エラーが返されます。Web アプリケーションが正常にデプロイされていません。

私はこれらを読みました: Eclipse RCP に Jetty を埋め込む
Eclipse RCP プラグイン + 埋め込み Jetty + JSF
https://stackoverflow.com/questions/12530256/eclipse-rcp-with-jetty-integration

しかし、私の質問に対する答えが見つかりません。

どんな助けでも大歓迎です!! 前もって感謝します。

4

1 に答える 1