最近サーブレットAPI 3.0に移行しました。 web.xml
ではいくつかの変更が必要なフレームワークを開発中であるため、フレームワークの変更が行われるたびに、フレームワークに基づいたプロジェクトはweb.xml
を更新する必要があります。巨大なプロジェクト環境でWebフラグメント(サーブレットAPI 3.0)を利用する
サーブレットAPI 3.0には、この動作をより疎結合かつ動的にするために、新しいWebフラグメントが導入されています。私はweb-fragment.xml
を作成し、そこのweb.xmlからすべてのものを移動します。したがって、プロジェクトでは次のように定義するだけです。web.xml
とそれ自身の追加宣言。
<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="3.0"
metadata-complete="false"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
は、我々は、我々のフレームワークがMETA-INF/
でweb-fragment.xml
を持っている(JARファイルでフラグメントの検索を有効にするためにmetadata-complete="false"
を使用する必要があります。
我々は他のフレームワークやライブラリ(約80〜90)とに多くの依存関係を持っているので、 metadata-complete="false"
はまた、すべてのライブラリを検索するために容認できない12秒に占める注釈を検索。
メカニズムを、それは素晴らしい作品と私たちはより多くのdecouであるという事実を好きなようにトリガ私たちのフレームワークから抜け出していますが、起動時間は致命的です!また、-Xms256m -Xmx512m
から-Xms512m -Xmx1024m
への利用可能なメモリを増やして、java.lang.OutOfMemoryError: Java heap space
(Tomcatの非効率的に実装された注釈プロセッサ(約50.000クラスがキャッシュされている)に起因する)を取得せずに開始する必要があります。
私たちは、ライブラリ内のアノテーション検索を無効にすることができることを知って、私たちはmetadata-complete="true"
旗を持っていない、ほとんどのサードパーティ製を使用するように、これはまた、オプションではありません。
アノテーションの検索を無効にすることはできますか?あるいは、サーブレットコンテナが、宣言されたライブラリ内で、web-fragment.xml
のみを検索するように強制できますか?
私は本当に新しいWebフラグメント機能を使用したいと思いますが、起動時間とメモリを増やすことはできません。
これは本当に解決策です、ありがとうございます!残念ながら、これはサーブレットコンテナ依存の解決策になります。すべてのサーブレットコンテナで実行することを目標としています。したがって、このソリューションは私たちにとっては良い選択ではありません。 – codevour
@codevourどのようにして問題を解決しましたか? – phant0m