001    package com.khubla.pragmatach.plugin.cluster.multicast;
002    
003    import org.jgroups.JChannel;
004    import org.jgroups.Message;
005    import org.jgroups.ReceiverAdapter;
006    import org.jgroups.View;
007    import org.slf4j.Logger;
008    import org.slf4j.LoggerFactory;
009    
010    import com.khubla.pragmatach.framework.api.PragmatachException;
011    
012    /**
013     * The broadcast sender and reciever
014     * 
015     * @author tome
016     */
017    public class JGroupsSenderReceiver extends ReceiverAdapter {
018       /**
019        * logger
020        */
021       private final Logger logger = LoggerFactory.getLogger(this.getClass());
022       /**
023        * the channel
024        */
025       private JChannel jChannel;
026       /**
027        * cluster name
028        */
029       private final static String CLUSTER_NAME = "PragmatachSesion";
030    
031       public JGroupsSenderReceiver() {
032       }
033    
034       /**
035        * message
036        */
037       public void receive(Message message) {
038          try {
039             MulticastMessage.deserialize(message.getBuffer());
040          } catch (final Exception e) {
041             logger.error("Exception in receive", e);
042          }
043       }
044    
045       /**
046        * send message
047        */
048       public void send(MulticastMessage multicastMessage) throws PragmatachException {
049          try {
050             final Message msg = new Message();
051             msg.setBuffer(MulticastMessage.serialize(multicastMessage));
052             jChannel.send(msg);
053          } catch (final Exception e) {
054             throw new PragmatachException("Exception in send", e);
055          }
056       }
057    
058       public void shutdown() {
059          if (null != jChannel) {
060             jChannel.close();
061             jChannel = null;
062          }
063       }
064    
065       public void startup() throws PragmatachException {
066          try {
067             /*
068              * the channel
069              */
070             jChannel = new JChannel();
071             jChannel.setReceiver(this);
072             jChannel.connect(CLUSTER_NAME);
073          } catch (final Exception e) {
074             throw new PragmatachException("Exception in startup", e);
075          }
076       }
077    
078       /**
079        * accepted
080        */
081       public void viewAccepted(View view) {
082       }
083    }