I have some code that was created a couple years ago, when flex data
services was young. I am trying to use it now, but can't seem to get
the java files working. I am having trouble in particular with the
ChatAdapter file:
package chat;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import flex.messaging.FlexSession;
import flex.messaging.FlexContext;
import flex.messaging.FlexSessionListener;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.messages.Message;
import flex.messaging.services.MessageService;
import flex.messaging.services.ServiceAdapter;
import flex.messaging.util.UUIDUtils;
public class ChatAdapter extends ServiceAdapter implements
FlexSessionListener {
private Map sessions;
private String clientId = UUIDUtils.createUUID(false);
public ChatAdapter() {
sessions = Collections.synchronizedMap(new HashMap());
FlexSession.addSessionCreatedListener(this);
}
public Object invoke(Message message) {
// Get Session Id
FlexSession flexSession = FlexContext.getFlexSession();
String sessionId = flexSession.getId();
// Check if Session Id is already registered in HashMap
if (!sessions.containsKey(sessionId)) {
// Get User Id from message body
Map body = (Map) message.getBody();
String userId = (String) body.get("userId");
// Register session / userId mapping
System.out.println("*** Registering " + userId
+ " " + sessionId);
sessions.put(sessionId, userId);
}
MessageService msgService = (MessageService) service;
msgService.pushMessageToClients(message, true);
return null;
}
public void sessionCreated(FlexSession session) {
session.addSessionDestroyedListener(this);
}
public void sessionDestroyed(FlexSession session) {
// Get User Id associated with Session Id
String userId = (String) sessions.get(session.getId());
System.out.println("*** Removing " + userId + " " +
session.getId());
// Notify interested parties
pushStatus(userId, "disconnected");
// Remove Session Id / User Id mapping
sessions.remove(session.getId());
}
private void pushStatus(String userId, String status) {
MessageService msgService = (MessageService) service;
AsyncMessage msg = new AsyncMessage();
msg.setDestination("chat");
msg.setHeader("DSSubtopic", "status." + userId);
Map body = new HashMap();
body.put("userId", userId);
body.put("status", status);
msg.setBody(body);
msg.setClientId(clientId);
msg.setMessageId(UUIDUtils.createUUID(false));
msg.setTimestamp(System.currentTimeMillis());
msgService.pushMessageToClients(msg, false);
}
}
The lines that read:
MessageService msgService = (MessageService) service;
throw compile time errors. I believe that the flex-messaging.jar that
comes with LiveCycle Data Services ES may be different than the
version that shipped with Flex data Services, but that is only
speculation, since I can't seem to find a copy of the older file to
look at. I'm not sure how to correct this file to work with the
current release. Any help would be much appreciated.