Replication: simplest assumption not working ... with source code ...
ustaudinger Jan 14, 2010 11:29 AMHi there,
I want to use the replication of objects. Unfortunately I do not get it running properly.
I have one server, to which multiple clients connect over JGroups/TCP.
The following classes are the code I use.
Problem description:
The initial lookup in the client succeeds and it contains a snapshot of object when the lookup occured. Later set calls on the server are not updating the object on the client side.
However, when decomment in the server spot [1] and move in the client the find into the loop, then I see that it works.
???
Any help appreciated. I somehow have the impression that the client state is not transferred upon calling a setter on the server side. Mind that in my scenario, only the server side will set values and the clients will be receiving these values. Actually I want to use the pojo cache to easily push an object tree over the wire to a bunch of clients. As only some values change from time to time, sending the full object tree might be too much.
Thanks,
Ulrich
The Server app:
@PojoCacheListener
public class JbossCacheLayer
{
private transient Cache cache;
private transient CacheModelDelegate cacheModelDelegate;
private transient Node root;
private TransactionManager txManager;
private transient Transaction tx;
private Quotes quotes = new Quotes();
@Attached
public void handleAttached(AttachedEvent event)
{
System.out.println("Attached = " + event.getSource());
}
@Attached
@Detached
@FieldModified
@ListModified
@MapModified
@SetModified
@TransactionRegistered
@TransactionCompleted
public void handleAll(Event event)
{
System.out.println(event);
}
@NodeCreated
public void handleNodeCreated(NodeCreatedEvent event)
{
System.out.println(event);
}
@NodeRemoved
public void handleNodeRemoved(NodeRemovedEvent event)
{
System.out.println(event);
}
@NodeModified
public void handleNodeModified(NodeModifiedEvent event)
{
System.out.println(event);
}
@NodeEvicted
public void handleNodeEvent(NodeEvictedEvent event)
{
System.out.println(event);
}
public JbossCacheLayer()
throws Exception
{
PojoCache pc = PojoCacheFactory.createCache("replSync.xml", true);
pc.addListener(this);
pc.addListener(this, Pattern.compile("pojos/quotes"));
Quotes q = new Quotes();
pc.attach(Fqn.fromString("pojos/quotes"), q);
q = (Quotes)pc.find(Fqn.fromString("pojos/quotes"));
List list = q.getQuotes();
//cache.put(Fqn.fromString("Test"+Math.random()), null);
while(true)
{
q.getQuotes().add("TEST");
q.setRand(Math.random());
// [1] pc.attach(Fqn.fromString("pojos/quotes"), q);
Thread.sleep(1000);
}
}
public static void main(String[] args)
throws Exception
{
new JbossCacheLayer();
}
}
The client app:
public class JbossCacheClient
{
public JbossCacheClient()
throws Exception
{
PojoCache pc = PojoCacheFactory.createCache("replSync.xml", true);
Quotes q = (Quotes)pc.find(Fqn.fromString("pojos/quotes"));
while(true)
{
System.out.println(q.getRand());
System.out.println(q.getQuotes().size());
Thread.sleep(1000);
}
}
public static void main(String[] args) throws Exception
{
new JbossCacheClient();
}
}