2

index.xhtml次のように、注入された EJB を使用する JSF ページに関連付けられたマネージド Bean があります。

// Code inside managed bean
@EJB
QueryEndpointLocal queryEndpoint;

public void search() {
    //...
    SearchResult result = queryEndpoint.search(query, resultFormat);
    //...
}

QueryEndpoint は、次の名前の別の EJB を利用しますQueryEngine

// Code inside QueryEndpoint
@EJB
QueryEngine queryEngine;

QueryEngine現在、 namedによく似た別の EJB がありQueryEngineLiteます。それらの違いは、HBASE データベースに接続する際にQueryEngineLite、リソースとしてエンタープライズ アプリケーションにバンドルされているローカル ダンプ ファイルを使用することです。QueryEngineどちらも起動時にロードされ@PostConstruct、接続を初期化する -annotated メソッドがあります。QueryEndpointそれらのうちの 1 つだけがデプロイされたアプリケーションで使用され、もう 1 つStartupはそのままの状態で使用されます。PostConstruct注釈はコメントアウトされています。これを処理するためのはるかに優れた方法があり、現在のソリューションは悪いものであることはわかっていますが、プロジェクトの将来のフェーズで変更される予定です。AppServer が管理する接続プールを利用して HBASE と通信する計画がありますが、現時点では、接続は HBASE の Java API を使用するライブラリによって処理されます。

これで、Lite EJB を使用しても何の問題もありません。インターフェイスは機能し、Web サービスも機能し、すべて問題ありません。HBASE に関連付けられた EJB ( QueryEngine) を使用すると、Glassfish は index.xhtml の要求に対して HTTP 403 エラーで応答し、次の行が server.log に挿入されます。

INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "" "GET") ") 
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "" "GET:CONFIDENTIAL") ") 
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "/favicon.ico" "GET") ") 
INFO: JACC Policy Provider:Failed Permission Check: context (" App/App-war_war ") , permission (" ("javax.security.jacc.WebUserDataPermission" "/favicon.ico" "GET:CONFIDENTIAL") ")

なぜこれが起こるのか、どうすれば修正できるのかわかりません。最初のエンジン EJB が使用されたときに機能しないのは JSF ページだけであることに注意してください。Web サービスなどのアプリケーションの他の部分は、両方のエンジンで完全に機能します。よろしくお願いします。

4

1 に答える 1

2

更新:アプリケーションがデプロイされた状態でドメインを停止し、再度開始して、事前にデプロイされたアプリケーションを自動的に開始できるようにしました。問題は解消され、問題なく index.xhtml JSF ページを表示できます。

別のドメインを作成して問題を再現することで、これを確認しました。index.xhtml は、最初のデプロイ後に HTTP 403 を返します。ドメインを再起動すると、問題が解決します。なんで?


Glassfish issue tracker にバグが登録されています。 http://java.net/jira/browse/GLASSFISH-19064

于 2012-09-06T13:00:29.180 に答える