1 /*
2 * Replica is published under the terms
3 * of the Apache Software License.
4 */
5 package replica.core;
6
7 import java.io.Serializable;
8 import java.util.Iterator;
9 import java.util.List;
10 import java.util.logging.Level;
11 import java.util.logging.Logger;
12
13 import replica.command.CommandProcessor;
14 import replica.group.Address;
15 import replica.group.GroupManager;
16 import replica.group.event.GroupListener;
17 import replica.group.event.MessageEvent;
18 import replica.group.event.SuspectEvent;
19 import replica.group.event.ViewEvent;
20
21 /***
22 * Listener for group messages. It then forward them as apropriated
23 * to the server or database.
24 *
25 * @author Pedro Costa
26 * @author Helder Silva
27 * @since 21/Jan/2004
28 */
29 public class ApplicationGroupListener implements GroupListener {
30
31 static Logger logger = Logger.getLogger(ApplicationGroupListener.class.getName());
32
33 GroupManager groupManager;
34 CommandProcessor databaseCommandProcessor;
35 CommandProcessor serverCommandProcessor;
36
37 /***
38 * Default constructor.
39 */
40 public ApplicationGroupListener() {
41 super();
42 }
43
44 /***
45 * Start's listening for messages.
46 *
47 * Adds this listener as a GroupListener in the GroupManager.
48 */
49 public void start(){
50 getGroupManager().addListener( this );
51 logger.info("Started Group Messages Listener.");
52 }
53
54 /***
55 * Start's listening for messages.
56 *
57 * Adds this listener as a GroupListener in the GroupManager.
58 */
59 public void stop(){
60 getGroupManager().removeListener( this );
61 logger.info("Stoped Group Messages Listener.");
62 }
63
64 /* (non-Javadoc)
65 * @see replica.group.event.GroupListener#message(replica.group.event.MessageEvent)
66 */
67 public void message(MessageEvent event) {
68
69 logger.info("Received new message from {" + event.getMessageSource() + "} message:{" + event.getMessage() + "}.");
70
71 ApplicationMessage msg = (ApplicationMessage)event.getMessage();
72
73 if( msg.isFromServer() ){
74 Object res = getDatabaseCommandProcessor().process(msg);
75 if( res != null )
76 processDatabaseUpdateResult( msg.getSessionID(), res );
77 }
78 else
79 getServerCommandProcessor().process(msg);
80 }
81
82 protected void processDatabaseUpdateResult( String sessionId, Object result ){
83
84 ApplicationMessage appMsg = null;
85 if( result instanceof ApplicationMessage )
86 appMsg = (ApplicationMessage)result;
87 else{
88 appMsg = new ApplicationMessage();
89 appMsg.setOriginator( ApplicationMessage.DATABASE_MODULE);
90 appMsg.setBody((Serializable)result);
91 }
92
93 appMsg.setSessionID( sessionId);
94
95 getGroupManager().sendMessage( appMsg );
96 }
97
98 /* (non-Javadoc)
99 * @see replica.group.event.GroupListener#viewChanged(replica.group.event.ViewEvent)
100 */
101 public void viewChanged(ViewEvent event) {
102 // TODO Auto-generated method stub
103
104 if( logger.isLoggable(Level.FINE) ){
105 List view = event.getView();
106
107 StringBuffer res = new StringBuffer();
108 res.append("{");
109 for (Iterator iter = view.iterator(); iter.hasNext();) {
110 Address element = (Address) iter.next();
111 res.append("["+element+"] ");
112 }
113 res.append("}.");
114
115 logger.fine("Received new view " + res + ".");
116 }
117
118 }
119
120 /* (non-Javadoc)
121 * @see replica.group.event.GroupListener#suspect(replica.group.event.SuspectEvent)
122 */
123 public void suspect(SuspectEvent event) {
124 // TODO Auto-generated method stub
125
126 logger.fine("Received new suspect [" + event.getAddress() + "].");
127 }
128
129 /***
130 * @return
131 */
132 public GroupManager getGroupManager() {
133 return groupManager;
134 }
135
136 /***
137 * @param manager
138 */
139 public void setGroupManager(GroupManager manager) {
140 groupManager = manager;
141 }
142
143 /***
144 * @return
145 */
146 public CommandProcessor getDatabaseCommandProcessor() {
147 return databaseCommandProcessor;
148 }
149
150 /***
151 * @param processor
152 */
153 public void setDatabaseCommandProcessor(CommandProcessor processor) {
154 databaseCommandProcessor = processor;
155 }
156
157 /***
158 * @return
159 */
160 public CommandProcessor getServerCommandProcessor() {
161 return serverCommandProcessor;
162 }
163
164 /***
165 * @param processor
166 */
167 public void setServerCommandProcessor(CommandProcessor processor) {
168 serverCommandProcessor = processor;
169 }
170
171 }
This page was automatically generated by Maven