カスタム デプロイヤーを使用して、ストレージ拡張テーブルにデータを入力することに成功しました。ユーザーがページを公開すると、レコードが完全に処理されることがわかります。
ここで非公開部分を処理したいので、カスタム ページ アンデプロイヤーを作成しました。以下のサンプル コードを参照してください。
@SuppressWarnings({ "rawtypes" })
public void process(TransportPackage data) throws ProcessingException
{
ProcessorInstructions instructions = data.getProcessorInstructions();
try
{
for (Iterator iterator = instructions.getArguments(); iterator.hasNext(); )
{
Object argument = iterator.next();
if (argument instanceof PageKey)
{
PageKey pageKey = (PageKey)argument;
TCDURI pageMetaURI = new TCDURI(pageKey.getId().getPublicationId(), 1168231104576L, pageKey.getId().getItemId());
PageMeta pageMeta = this.pageMetaHome.findByPrimaryKey(pageMetaURI.getPublicationId(),
(int)pageMetaURI.getItemId());
if (pageMeta == null)
{
DeploymentHandler.undeploy(pageMetaURI);
}
else
{
PublishAction publishAction = new PublishAction();
publishAction.setAction("DEL");
long id = publishAction.getId();
PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
publishAction = publishActionDAO.findByPrimaryKey(id);
if (publishAction == null)
{
log.debug("FindByPrimaryKey: cannot retrieve object with primary key:" + id);
}
else
{
publishAction = publishActionDAO.update(publishAction);
log.debug("SearchPageUndeployer Updated bean -" + publishAction);
}
}
}
}
}
catch (Exception e)
{
throw new ProcessingException("SearchPageUndeployer: Could not undeploy page", e);
}
super.process(data);
}
上記のコードでは、新しいストレージ拡張機能「PublishAction」を更新しようとしていることがわかりますが、変更したいレコードのテーブルから ID を取得しようとすると、ID を取得していないため、常に ID を 0 として取得しています。テーブルからIDを取得できます。
更新する必要があるレコードのテーブルから ID を取得するために、私の DAO に何を実装する必要があるかを提案してください。
ありがとう。