myfaces と primefaces を使用したかなり小さな JSF 2 アプリケーションがあります。これは、Eclipse で tomcat 7 サービスとしてセットアップされ、ajax を含めて正常に動作します。
ただし、単体テストを行いたいので、Tomcat 7 をテストの依存関係として追加し、適切な起動コードを作成しました。
// create tomcat
Tomcat tomcat = new Tomcat();
tomcat.setPort(HTTP_PORT);
// add "web" as a webapp, all classes that are in the current classpath (all in eclipse) are available
Context ctx = tomcat.addWebapp("/" + CONTEXT_PREFIX, new File("src/main/webapp").getAbsolutePath());
// start the server (but do not wait)
tomcat.start();
これも正しく起動しますが、マネージド Bean はロードされません。そのため、ページはきれいに見えますが、動作はありません。この問題は、Jetty が特定の場所で管理された Bean のみを検索する方法について話しているこの Jetty ブログに似ているようです。
http://musingsofaprogrammingaddict.blogspot.com.au/2009/12/running-jsf-2-on-embedded-jetty.html
Tomcat サーバー用の Eclipse の Web デプロイメント アセンブリでは、すべてのクラス ファイルが WEB-INF/classes に配置されているため、おそらくこれが問題です。
組み込みの Tomcat 7 で addWebapp を使用して (web.xml を単体テストするために)、WEB-INF/classes を正しいディレクトリにリダイレクトすることは可能ですか?