Histórico da Página
...
O Fluig tem customização de eventos JMS, permitindo criar procedimentos de auditoria com base nas informações fornecidas pelo produto. O JMS (Java Message Service) é uma API Java™ que provê uma conexão assíncrona entre aplicações por meio de troca de mensagens.
O produto dispara dois tipos um tipo de mensagens mensagem JMS customizáveiscustomizável, o wdkDocument e o wdkAbstract.
O wdkDocument será disparado quando houver manipulação nos documentos do Fluig, para a aplicação receber a mensagem com as informações do documento a classe tem que estender o MessageListener e ter a seguinte linha:
...
| Bloco de código | ||||
|---|---|---|---|---|
| ||||
import java.util.Enumeration;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
@MessageDriven(mappedName = "custom/DocumentListener", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/wdkDocument")
})
public class DocumentListenerMessageBean implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("========Document Listener========");
System.out.println("Message received: " + message.getJMSMessageID());
if (message instanceof MapMessage) {
MapMessage mm = (MapMessage) message;
@SuppressWarnings("unchecked")
Enumeration<String> es = mm.getMapNames();
while (es.hasMoreElements()) {
String prop = es.nextElement();
System.out.println(prop + ": " + mm.getObject(prop));
}
}
System.out.println("========Fim Document Listener========");
} catch (Exception e) {
e.printStackTrace();
}
}
} |
O wdkAbstract será disparado quando houver manipulação em alguns objetos no Fluig, conforme tabela abaixo:
Objeto | Descrição | Tabela no BD |
Icon | Ícone | ICONE |
Topic | Assunto | ASSUNTO |
Shortcut | Segurança de Menu | MENU_ICONE |
LogAccess | Log de Acesso | LOG_ACCESS |
ColleagueReplacement | Substituto | COLAB_SUBSTTO |
Application | Aplicativo | APLICATIVO |
ProgressLib | Ambiente Progress | AMBIEN_PROGRESS |
GlobalCalendar | Feriado | CALEND_GLOBAL |
Term | Termo | TERMO |
Synonym | Sinônimo | SINONIMO |
DocumentType | Tipo do Documento | TIPO_DOCUMENTO |
Volume | Volume | VOL_FISIC |
AttributionMecanism | Mecanismo de Atribuição | MECAN_ATRIBUIC |
EmailTemplate | Template de Email | TEMPLATE_EMAIL |
CustomizedDatasetBuilder | Dataset | SERV_DATASET |
DataService | Serviços | SERV_DADOS |
CustomFields | Campos Customizados | CAMPO_CUSTOM |
UserGraphicSetings | DashBoard | CONFIGUR_GRAF_USUAR |
Watermark | Marca D’água | MARCA_DAGUA |
WebLayout | Layout | WEBLAYOUT |
Adapter | Adaptadores | ADAPTER |
Para a aplicação receber a mensagem com as informações destes objetos a classe tem que estender o MessageListener e ter a seguinte linha:
| Bloco de código | ||
|---|---|---|
| ||
@MessageDriven(mappedName = "custom/DocumentListener", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/wdkAbstract")}) |
O objeto de retorno será um MapMessage que conterá os seguintes parâmetros:
- event (String): Informa qual o tipo de evento que foi efetuado com o objeto, conforme a tabela abaixo:
Evento | Descrição |
CREATE | Um novo objeto foi criado. |
UPDATE | Um objeto foi modificado |
DELETE | Um objeto foi excluído da base de dados. |
- userId (String): Usuário que efetuou a ação.
- entity (String): Entidade do objeto que está sendo manipulado, conforme a tabela de objeto que já foi apresentada acima.
- mapNewVersion (byte[ ]): Array de bytes de um HashMap<String, Object> com as propriedade do objeto.
- mapPreviousVersion (byte[ ]): Array de bytes de um HashMap<String, Object> com as propriedade do objeto antes da alteração.
| Informações | ||
|---|---|---|
| ||
Este mapa não terá objetos quando o evento for CREATE e DELETE. |
Para transformar o Array de bytes recebido na mensagem em um HashMap basta utilizar a função abaixo:
| Bloco de código | ||
|---|---|---|
| ||
private Map<String, Object> decoderMap(byte[] array) {
if(array.length>0){
ByteArrayInputStream bos = new ByteArrayInputStream(array);
ObjectInputStream p = new ObjectInputStream(bos);
Object docObject = p.readObject();
try{
Map<String, Object> map = (Map<String, Object>) docObject;
return map;
}catch(java.lang.ClassCastException e){
e.printStackTrace();
}
}
return null;
} |
...
| language | java |
|---|---|
| title | Exemplo |
...