I have tried out today both the IFQID and "on demand RemoteService" solution. Here are my findings:
The IFQID works fine now with resources but there is still a problem left. If I log-in two users with the same username and password only one of them is created/displayed correctly with the resource. There is no IRosterEntry created for the second user. But in order to deal with both user/resource pairs and to handle remote services for both user/resource pairs actually two IRosterEntry-objects will be needed - or something similar. Maybe the IFQID method fqID.getResourceName() could return an Array of all resources for a user? But if it does, how can remote services be than distinguished for each user/resource pair?
The remote service registration on demand doesn't work properly as well. I don't know why, but some services are registered properly others are not. If I log-in user A first and afterwards user B, some services of user A are registered properly to user B others are not. This is the way how I register remote services:
public void registerRemoteService(String serviceName, Object impl,
ID[] targetIDs) {
if (targetIDs == null) {
// register service to all user
targetIDs = RosterUtil.getUserIDs(getRoster());
Assert.isNotNull(targetIDs);
}
Dictionary<String, ID[]> props = new Hashtable<String, ID[]>();
props.put(Constants.SERVICE_REGISTRATION_TARGETS, targetIDs);
// register ECF remote service
getRemoteServiceContainerAdapter().registerRemoteService(
new String[] { serviceName }, impl, props);
logger.info("Service Registered: " + serviceName);
}
Please let me know if I can help you to sort this things out.