Inserindo um Action Listener no Módulo

Dificuldade    

No OpenCms você tem a possibilidade de inserir uma classe que implemente I_CmsModuleAction para pegar todos os eventos que são disparados. Exemplo: evento quando publica recursos, quando deleta, quando modifica algum recurso, quando limpa o cache, entre outros.


Neste artigo, vamos mostrar como pegar o evento de publicação e enviar informações de dos arquivos publicados para todos os usuários que estão acessando o site no momento da publicação.

Para isso, primeiro vamos montar nossa classe Listener:
Ela terá que implementar o I_CmsModuleAction(Listener do OpenCms) e HttpSessionListener(Implementamos para capturar todas as seções abertas dos usuários).

O importante da I_CmsModuleAction é que nela temos o CmsObject para poder utilizar e a CmsPublishList (lista de arquivos que foram publicados). Então, no método cmsEvent nós capturamos quando o evento é de publicação e colocamos em todas as seções o título da noticia/texto publicado.

Nós pegamos o titulo usando o CmsXmlContentFactory para ler o xml do recurso.

No caso, estamos adicionando um atributo em cada sessão de usuário. Cada sessão aberta é adicionada à uma variável HashMap de classe, assim podemos acessar a sessão de acordo com o ID da sessão do usuário.
Então no nosso módulo, teríamos que implementar um intervalo em jquery, fazendo um get para uma página jsp, que verificaria se existe esse atributo na sessão do usuário para ser exibida.

Exemplo:

geral.js

E no nosso arquivo JSP que verificaria a sessão do usuário corrente seria mais ou menos assim:

Depois de implementada a classe listener, devemos inserí-la no web.xml do opencms (opencms/WEB-INF/web.xml)

A ultima configuração que temos que fazer para o Listener funcionar, é adicionar o nome da classe também no módulo que queremos que ela opere:

1. Vá na aba Administração
2. Gestão de módulos
3. Entre no módulo específico
4. Editar módulo
5. Adicione a classe no Action class desse módulo

moduloopencms

Depois de tudo configurado, exporte o jar com sua classe Listener e coloque na pasta lib do opencms (WEB-INF/lib).

Reinicie o servidor e estará funcionando.

É isso. Espero ter ajudado. 🙂