私はSlingのドキュメントを見て、Groovy scripts can be used to render a componentというJSPまたはHTLの使用方法に似ていることに気づいた。GroovyスクリプトがSlingによって実行された後にキャッシュされる
私はこの考えをあまり気に入っていないので、Groovyコードの場所はOSGiバンドルでなければならないと思っていますが、私はこれらのスクリプトで何ができるかを試してみることにしました。
私は単一のプロパティを持つダイアログで単純なコンポーネントを作成しました。のテキストです。このコンポーネントをsimpleGroovy
と呼ぶことにしましょう。ここには大まかな構造(簡潔にするためにダイアログの詳細が省略されています)があります。
println "Hello Groovy! Rendering the contents of ${resource.path} since 2017"
予想したように、スクリプトがうまく実行され、GStringのとすべて:simpleGroovy.groovy
の
/apps/example/core/components/simpleGroovy
|
|- cq:editConfig
|- dialog
|- simpleGroovy.groovy
内容は次のようなものです。
ただし、最初のリクエストを行った後にスクリプトを変更すると、同じ出力が得られます。スクリプトの名前を変更してセレクタを使用すると、スクリプトの現在の状態と一致する出力が得られます。これが最初に要求されるまでキャッシュされます。
私はこの原因が不思議です。私は、Groovyスクリプトがある時点でJavaクラスにコンパイルされ、そのクラスがどこかにキャッシュされると思います。
私はAEM 6.2を使用していますので、内容は/crx-quickstart/launchpad/felix/bundle305/data/classes
です(305
は私の環境ではorg.apache.sling.commons.fsclassloader
のIDです)。
私はexample
アプリケーションからJSPとHTLスクリプトのコンパイルされたクラスを見ることができますが、それらのフォルダの中に私のGroovyスクリプトに関連するものは何もないようです。
私もGroovyランタイム(groovy-all
)バンドルのIDを調べましたが、そこにデータフォルダはありません。しかし、Groovyランタイムバンドルを再起動すると、スクリプトに加えた変更を見ることができます。
Groovyスクリプトを再コンパイルするより簡単な方法はありますか?正確に何がキャッシュされ、どこに座るのですか?
groovyをaemに統合するために何をしたのか教えてください。コンポーネントを作成し、代わりに '.groovy'を追加しました。 'Jsp'をコンポーネントスクリプトファイルに追加し、** groovy-all **バンドルをfelixコンソールに追加しました。このコンポーネントをレンダリングしようとすると、このコンポーネントのページに出力が表示されません。 – krish
@krish私は特別なステップを実行していませんでしたが、おそらくこれは、このmanneでGroovyスクリプトを使用するオプションについて学習する前に、Groovy関連のパッケージをインストールしたためです。私はいつも[AEM Groovy Console](https://github.com/OlsonDigital/cq-groovy-console)を使っています。私が必要とするバンドルは、そのパッケージの一部として既に配備されているものと思います。 – toniedzwiedz
これが[slingjsp](http:// localhost:4502/system/console/slingjsp)を使用できるすべてのJSPを再コンパイルするのに役立つかどうかはわかりませんが、バンドルとしての外部Servletエンジン私は、キャッシュをクリアするためにgroovyバンドルを再起動するオプションしかないと思います。 – krish