質問
CDI Webアプリケーションのスタートアップイベントとシャットダウンイベントの両方を観察しようとしています。私はそれらのイベントを聴くアプリケーションコープ付きBeanを持っています:
@ApplicationScoped
public class PrettyfacesStartupObserver
{
private static final Log LOGGER = LogFactory.getLog(PrettyfacesStartupObserver.class);
public PrettyfacesStartupObserver()
{
LOGGER.debug("\n\n\n\n\n\n\n\n\n\nconstructor");
}
public void onStartup(@Observes
AfterBeanDiscovery afterBeanDiscovery
)
{
LOGGER.debug("\n\n\n\n\n\n\n\n\n\nafter bean discover");
}
public void onStartup(@Observes
AfterDeploymentValidation afterDeploymentValidation
)
{
LOGGER.debug("\n\n\n\n\n\n\n\n\n\n\nafter deployment validation");
}
public void onShutdown(@Observes
BeforeShutdown beforeShutdown
)
{
LOGGER.debug("\n\n\n\n\n\n\n\n\n\n\nbefore shutdown:" + beforeShutdown);
}
ログには何も見えません。
何が足りないの?
解決
Pete Muirのおかげで、解決策は拡張インターフェイスを実装することでした。私がそれをしたら、特別なファイルを作成することとともに、完全に機能しました。
覚えておくべきことは、コンテナイベントを観察する(または行動する)場合は、特別なイベントであるため、拡張インターフェイスを実装する必要があります。
https://docs.jboss.org/weld/reference/latest/en-us/html/extend.html#d0e4984
ウォルター
他のヒント
Walter Whiteが言及した「特別なファイル」は次のとおりです。
META-INF/services/javax.enterprise.inject.spi.Extension
そのファイルには、拡張機能クラスの完全に資格のある名前が含まれている必要があります。つまり:
org.mydomain.extension.MyExtension
所属していません StackOverflow