2012-02-13 18 views
0

私のプロジェクトでは、ELのスタンドアロンジャスパー実装を使用しています。私はMavenのPOMファイルにLIBSを追加しました: ValueExpressionはスレッドセーフですか?

<dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>el-api</artifactId> 
     <version>6.0.32</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>jasper-el</artifactId> 
     <version>6.0.32</version> 
    </dependency> 

は現在、私のアプリが原因EL式の使用頻度が高いのは非常に遅いです - それは、それが呼び出されるべき適切なタイミングでコンパイルしています。 これで、初期化時に式のコンパイルを移動したいのですが、複数のスレッドで同じValueExpressionを使用するのがスレッドセーフであるのだろうかと思います。何かご意見は?

答えて

1

値の表現はスレッドセーフではありません。ただし、EL実装では、解析された式を内部的にキャッシュし、ExpressionFactory.createExpression(...)を呼び出すと、初めて初めて式文字列を解析する必要があります。

環境によっては、Tomcatよりも優れたEL実装を試してみるとよいでしょう。 JUELはパフォーマンスを大幅に向上させることができます。

+0

また、私は[JUEL site](http://juel.sourceforge.net/guide/util/index.html)の情報が役に立つことを発見しました: 作成時に、コンテキストの関数マッパーと変数マッパーがバインドに使用されます静的メソッドへの関数呼出し、および値式に対する識別子(変数)。コンテキストのリゾルバは作成時には使用されません。 評価時に、プロパティの解決とアンバインドされた識別子(最上位プロパティ)の解決にコンテキストのリゾルバが使用されます。コンテキストの関数マッパーと変数マッパーは、評価時には使用されません。 –

0

ドン;あなたは共通の初期化コードでスレッドの安全性の問題を世話しない限り、そうは思いません。

関連する問題