問題タブ [pax-web]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pax - Pax WebホワイトボードのResourceMappingは、バンドルの外側を指すパスを持つことができますか?
ResourceMapping
以下をOSGiサービスとして登録しようとしました。
ただし、ブラウザの。の下に結果が表示されませんhttp://127.0.0.1:8282/resources/aFileUnderMyPath
。PaxWebがログのマッピングにアクセスしていることがわかります。これは可能ですか、それとも代わりにサーブレットを作成する必要がありますか?
jetty - ファイルシステムから静的コンテンツを提供するためにKarafのJettyを取得するには?
Karaf のバンドル外から静的コンテンツを提供する必要があります。すでに Pax Web と Jetty が組み込まれているので、問題にはならないと思っていましたが、今のところ成功していません :(
、、および機能がインストールされjetty
てhttp
います。http://team.ops4j.org/wiki/display/paxweb/Advanced+Jetty+Configurationに従って、これを に追加しました:http-whiteboard
war
etc/jetty.xml
完全なファイルは次のとおりです。
そしてorg.ops4j.pax.web.cfg
、この内容でファイルを作成しました:
私が見るログで
しかし、ファイルは表示されません。たとえば、ファイルがありますが、 または/home/aromanov/workspaces/odp-server/ru.focusmedia.odp.server.poim.resources-rodniki/.style
のいずれhttp://192.168.1.9:8080/app/.style
かに移動するとhttp://192.168.1.9:8282/app/.style
404 エラーが発生します。
java - Declarative Services を使用した OSGi+Pax-Web での GWT の問題
プログラムによる Service Tracker の代わりに Declarative Services を使用するために、OSGi (Equinox) および Pax-web で実行されている既存の GWT アプリを移行しています。
Equinox で Pax-Web を使用しています。WAR ベースの GWT アプリケーションは、PAX-WEB War エクステンダーによって問題なくロードされますが、この方法では宣言型サービスを使用できません。
私はすべてのサーブレットを戦争からうまくリファクタリングし、それらを宣言型 OSGi サービスに変換しました ( <provide interface="javax.servlet.Servlet"/>
)。このようにして、サーブレット内の厄介な ServiceTracker コードと特定の OSGi 依存関係をすべて取り除きました。[1]の情報を使用して、フィルターを登録し、静的コンテンツとウェルカム ページを提供するために、他のすべての web.xml 機能をさらに複製しました。
この時点では正常に動作するはずですが、PAX-WEB と GWT がそのリソースをロードしようとする方法に問題があります。
シリアライゼーション記述子のロード中に、GWT はローカル コンテキストからシリアライゼーション ポリシー ファイルをロードします。私の場合、次のようなリソースを解決しようとします: /ctx/ctx/62394587E47773FB1594FF.gwt.rpc このリソースは GWT コンパイラーによって作成され、/war/ctx/ctx/resource... の下に配置されます。
以前は、標準の wab マッピング ( Webapp-Context: /ctx, Webapp-Root: /war
) gwt を使用すると、そのリソースが正しく検出されました。プログラムによるリソース マッピングを使用するようになりました。
GWT はリソースの読み込みに失敗し、次のエラーが発生します。
[注: 最後の文は「結果としてシリアライゼーションの問題が発生することになります」と読む必要があります]
HttpServiceContext がリソースをロードし、パスをプログラム Web コンテキストに関連する URL ではなくファイルとして解釈する問題を追跡しました。
このリソースはバンドル ファイル システムの /war/ctx/ctx/ の下にあるため、これは明らかに失敗します。これはバグ PAXWEB-314 [2] に関連しているようです。この実装では、相対パスをファイル パスに変換します。
この問題を回避する方法はありますか? WAB の代わりに OSGi DS を使用して GWT と PAX-WEB を使用している人はいますか? 考えられる方法の 1 つは、GWT コンパイラによって生成された /war/ctx を /ctx にコピーすることですが、ハックの方向に進む前に適切な解決策を見つけたいと思います。
何か案は?
1 - https://github.com/ops4j/org.ops4j.pax.web/blob/master/samples/whiteboard/src/main/java/org/ops4j/pax/web/extender/samples/whiteboard/internal/ Activator.java [2] - http://team.ops4j.org/browse/PAXWEB-314
caching - OSGi 環境で提供される静的リソースのカスタム応答ヘッダーの設定
私たちが解決しようとしているタスクは、HttpService.registerResources()メソッドCache-Control
を使用して OSGi 環境で公開される静的リソース (例: )のカスタム応答ヘッダーを設定することです。
次の詳細を考慮して、この目標を達成するための最善の方法は何ですか?
- 「リソース」サービスのセットに基づいて、多数のリソース登録が存在する可能性があります。これらの OSGi サービスは、それらが存在する静的リソース パスとバンドルに関する情報を提供します。リソース パスの登録数は、50 から 200 の間であると予想されます。
- 実装は OSGi フレンドリーであるべきです。Pax Web 拡張機能の使用は許容されます。
- 実装は Web サーバーに依存しない必要があります (たとえば、Jetty に関する直接的な知識がない場合)。
私たちが考えている解決策は次のとおりです。
HttpContext.handleSecurityで応答ヘッダーを設定する
- このアプローチの欠点は、セキュリティを処理する方法が、セキュリティにまったく関係のないロジックにも関与することです。
registerResource()
リソース URI と同じ URI を使用して、呼び出しごとにフィルターを登録します。フィルターは、応答ヘッダーを設定するための応答になります。- このアプローチの欠点は、同じ目的を果たすフィルターが多すぎる可能性があることです。しかし、これまでのところ、これが最も簡単な解決策のようです。
ルート パスに 1 つのフィルターを登録し、要求 URI が既知のリソース URI パスに対応する場合に応答ヘッダーを設定するように構成します。
- このアプローチの欠点は、リソース パスを知るためにフィルタを教育する必要があることです。これは、実装が少し複雑になることを意味します。
提案された解決策について意見を聞き、他の代替案を知りたいと思っています。
java - NCSAリクエストハンドラはpax-web1.1.4では機能しません
pax-web1.1.4でNCSAリクエストロギングを有効にしようとしています。推奨される方法は機能しません。ファイルは作成されましたが、空のままです。ソースコードを見ると、Jettyサーバーのpax Web実装は、すべてのハンドラーがコンテキストに対応する必要があると想定するJettyServerHandlerCollectionにリクエストを渡すことがわかりました。したがって、org.ops4j.pax.web.log.ncsa。*オプションを使用するだけでは不可能に見えます。
何かが足りないのですか、それともこの機能がpax webで機能しないのですか?回避策はありますか?
jetty - jetty osgi : 1 つの securityHandler ですべてのサーブレットを保護する
paxweb の osgi バンドルとして jetty を使用しています。OSGI HttpService のおかげで登録されたすべてのサーブレットとリソースが、1 つの共通の SecurityHandler によって保護されていることを確認したいと思います (さらに、JAASLoginService を使用したいと考えています)。また、認証されていないすべてのリクエストを 1 つのログイン ページにリダイレクトしたいと考えています。
このシナリオを構成することは可能ですか?
java - Pax Web でデプロイされた Web バンドルから (Blueprint) OSGi サービスにアクセスする方法は?
現在、Pax Web を使用して OSGi Web アプリケーション バンドルを展開しています。この Web バンドルから、一連の OSGi サービスにアクセスする必要があります。システムの残りの部分では、サービスの作成と利用に Blueprint を使用しています。これは、プロキシ、ダンピングなどを提供するため、優れています。
Pax Web でデプロイされた Web アプリケーション バンドルから、これらの OSGi サービスにアクセスする最良の方法は何ですか?
私の考えは
1) osgi-bundlecontext 属性を介して ServletContext から BundleContext を取得し、OSGi ServiceTracker クラスを使用します。
2) 必要なサービスへの参照を含むブループリント コンテキスト ファイルを Web バンドルに作成します。Blueprint コンテキストは、Blueprint エクステンダーによって OSGi サービス レジストリに登録され、そこから取得して ID で Bean を検索できます。
3) Springs ContextLoaderListener などを使用して、web.xml ファイルにブループリント コンテキストを作成します。
オプション 1 は問題ありませんが、サービスを追跡する必要があり、Blueprint のメリットをまったく享受できません。
オプション 2 も問題なく動作しますが、タイミングの問題があります。実際には、アプリケーションをデプロイする 2 つのサービスがあります。web.xml ファイルを使用してデプロイする Pax Web エクステンダーと、Blueprint コンテキスト ファイルをデプロイする (私の場合は Gemini) Blueprint エクステンダーです。起動時にこれらのエクステンダーは同時にデプロイされ、Pax Web エクステンダーがサーブレット コンテキスト リスナーをインスタンス化するときに、アプリケーション コンテキストが OSGi サービス レジストリで使用できるという保証はありません。これは、OSGi サービスをコンテキスト リスナー コードから呼び出すことができないことを意味します。
オプション 3 - これが可能かどうかはよくわかりません。Spring DM がこのアプローチを使用していたように見えますか?
私は何かが欠けているに違いないと感じています - Pax Web でデプロイされた Web バンドル内から Blueprint を使用する簡単な方法はありますか?
osgi - Felix servletbridge war に OSGi フラグメント バンドルを追加する
war ホスティング OSGi バンドルを作成しようとしています。完全な構成で WAB バンドルをホストできるはずなのでpax-web-extender-war
、そのために統合を試みます。slf4j-api
andのようないくつかの依存関係が必要slf4j-log4j12
です。ここに問題があります:私は常にこの例外を受け取ります:
slf4j-log4j12
は実際にはフラグメント バンドルであるためです。私はフェリックスがこれに対処するべきだと思っていましたが、そうではありません。そのため、このjarをに移動しようとしましWEB-INF/lib
たが、osgiがバンドルとして解決できないため、配線が失敗します。
そう、
- フラグメントバンドルはどこに置くべきですか?
- 何らかの形で設定する必要があります
framework.properties
か? - Apache Felix はフラグメント バンドルを扱うことさえできますか?
以下は、戦争の現在のレイアウトです(これは、felix http bridge サンプルに基づいていることに注意してください)。
java - OSGi Felix で pax-web を使用して静的リソースを提供する
私は本当に単純であるべき何かに困惑しています。pax-web-jetty-bundle 3.0.0 を使用し、以下を登録しています。
ただし/tmp/static/somefile.txt
、アクセス時に表示できませんhttp://localhost:8080/somefile.txt
(404 not found が表示されます)。
もちろん、これは基本的な例にすぎません。呼び出しは問題なく終了しregisterResources
ますが (私はデバッグしました)、リソースは提供されません。
また、私自身のより複雑な例を試してみましたが、うまくいきませHttpContext
んでした: getResources メソッドは呼び出されません。
null httpcontextx で登録された他のサーブレットもあります。ここで何が間違っているのでしょうか?ありがとう!
java - 「間違った」OSGi HttpServiceに登録されたサーブレット
で実行されている Web アプリケーションに埋め込まれているシステムHttpService
で、が競合するという問題があります。OSGi
Apache Karaf
Tomcat
アプリケーションの一部は にOSGi
基づいておらず、 内のコードを介して直接リクエストに応答しますWAR
。一部の部分は、 を使用してコンテナFelix Servlet Bridge
内のサーブレットを呼び出してリクエストに応答します。Felix
OSGi
また、Felix
のホワイトボード バンドルを使用して、サーブレットの自動登録を実現しています。
ActiveMQ
の機能も使用しており、コンソールKaraf
に含まれています。Pax Web
その結果、埋め込みアプリケーション サーバと統合するHttpService
からの1 つと、別のポートで独自のサーバを実行するからの 1 つになります。Felix Servlet Bridge
HttpService
Pax Web
Jetty
したがって、問題は、一部のスタートアップのホワイトボード バンドルが に接続し、Pax Web HttpService
サーブレットが間違った場所に公開されることです。HttpService
ホワイトボード バンドルを構成して目的のfromを何らかの方法で要求する方法が見つかりませんでした。関連するバンドルはすべてサードパーティのものであるため、それらのコードもServlet Bridge
変更することは避けたいと考えています...Java
これを解決する最善の方法は何ですか?
ActiveMQ
(保守性のためにコードよりも構成を優先し、コンソールを独自のポートに保持したい)