Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[ecf-dev] [SHAREDOBJECT] Can't retrieve the object.

Hi,

I'm trying to use shared object implementation of the ECF framework and I'm experiencing problems. I wrote some code largely inspired by the test cases and from http://wiki.eclipse.org/Sharing_objects_over_XMPP.

This is my source code, I start to define some class variables :

   public static final String CHAT_ROOM_NAME = "chatroom";
   public IContainer[] clients = new IContainer[2];
   IChatRoomContainer[] chatRoomContainer = new IChatRoomContainer[2];;
   protected String[] usernames = {"user1@domain", "user2@domain"};
   protected String[] passwords = {"pwd", "pwd"};


And then I connect my two clients to the server and also I connect them to the chatroom. I can browse participants, send chat messages with no problems. Here is the code, I think it is OK :

       System.out.println("> Creation client 0");
clients[0] = ContainerFactory.getDefault().createContainer("ecf.xmpp.smack"); ID id0 = IDFactory.getDefault().createID(clients[0].getConnectNamespace(), usernames[0]); IConnectContext connectContext0 = ConnectContextFactory.createUsernamePasswordConnectContext(usernames[0], passwords[0]);
       clients[0].connect(id0, connectContext0);
       System.out.println("> Get chatRoom 0");
final IChatRoomInfo info0 = ((IPresenceContainerAdapter)clients[0].getAdapter(IPresenceContainerAdapter.class)).getChatRoomManager().getChatRoomInfo(CHAT_ROOM_NAME);
       if (info0 == null)
throw new Exception(NLS.bind("no chat room {0} avalable", CHAT_ROOM_NAME));
       chatRoomContainer[0] = info0.createChatRoomContainer();
       System.out.println("> Connect to chatRoomContainer 0");
       chatRoomContainer[0].connect(info0.getRoomID(), null);

       System.out.println("> Creation client 1");
clients[1] = ContainerFactory.getDefault().createContainer("ecf.xmpp.smack"); ID id1 = IDFactory.getDefault().createID(clients[1].getConnectNamespace(), usernames[1]); IConnectContext connectContext1 = ConnectContextFactory.createUsernamePasswordConnectContext(usernames[1], passwords[1]);
       clients[1].connect(id1, connectContext1);
       System.out.println("> Get chatRoom 1");
final IChatRoomInfo info1 = ((IPresenceContainerAdapter)clients[1].getAdapter(IPresenceContainerAdapter.class)).getChatRoomManager().getChatRoomInfo(CHAT_ROOM_NAME);
       if (info1 == null)
throw new Exception(NLS.bind("no chat room {0} avalable", CHAT_ROOM_NAME));
       chatRoomContainer[1] = info1.createChatRoomContainer();
       System.out.println("> Connect to chatRoomContainer 1");
       chatRoomContainer[1].connect(info1.getRoomID(), null);

At this point, I tried to share an object by the client 0. All seems fine, the client 0 can access the object and I can see its presence when I call the getSharedObjectIDs() of the ISharedObjectManager.

final ISharedObjectContainer socontainer0 = (ISharedObjectContainer)chatRoomContainer[0].getAdapter(ISharedObjectContainer.class); final ISharedObjectManager manager0 = socontainer0.getSharedObjectManager();

       System.out.println("> Creation manager");
       if (manager0 == null) throw new Exception("manager is null");

       final ID objectID = IDFactory.getDefault().createStringID("xxx");
System.out.println("> Add shared object");
       MySharedObject shared = new MySharedObject(objectID.getName());
       final ID id = manager0.addSharedObject(objectID, shared, null);
System.out.println("> We sleep a litle time...");
       Thread.sleep(4000);
System.out.println("> Client 0 retrieve so"); final MySharedObject sharedObject0 = (MySharedObject)manager0.getSharedObject(id); if (sharedObject0 == null) throw new Exception("sharedObject is null");
       System.out.println("OK");

Then I try to use the shared object with my client 1 which is also connected to the chatroom. Unfortunately the sharedObject1 is always 'null'. When I call the getSharedObjectIDs() of the ISharedObjectManager, the object is not present.

       System.out.println("> Client 1 retrieve so");
final ISharedObjectContainer socontainer1 = (ISharedObjectContainer)chatRoomContainer[1].getAdapter(ISharedObjectContainer.class); MySharedObject sharedObject1 = (MySharedObject)socontainer1.getSharedObjectManager().getSharedObject(id);
       if (sharedObject1 == null)
       {
           System.out.println("Cannot retrieve sharedObject1");
           throw new Exception("sharedObject1 is null");
       }
       System.out.println("OK");
       sharedObject1.getMyName();

I try to call explicitly MySharedObject.this.replicateToRemoteContainers but this does not seem have an effect.
I tried this source code with :
- ECF 1.2.0 on Eclipse 3.3.1.1
- ECF 2.0 on Eclipse 3.4
I also tried on server :
- ejabberd 1.1.26
- openfire 3.4.4
Is there a problem in the source code ? Does the jabber server needs a special configuration ? I don't know where the problem comes from. Could you help me ?

Thanks a lot,

Cyril






Back to the top