Here is the output of simple concurrency test Thread: [44] pushing | Thread: [45] poping | Thread: [45] | [null], | Thread: [45] poping | Thread: [44] | [23], | Thread: [44] pushing | Thread: [44] | [23], [23], | Thread: [45] | [null], | Thread: [44] pushing | Thread: [44] | [23], [23], [23], | Thread: [44] pushing | Thread: [44] | [23], [23], [23], [23], | Thread: [44] pushing | Thread: [44] | [23], [23], [23], [23], [23], | Thread: [44] pushing | Thread: [44] | [23], [23], [23], [23], [23], [23], | Thread: [45] poping | Thread: [44] pushing | Thread: [45] | [23], [23], [23], [23], [null], | Thread: [45] poping | Thread: [45] | [23], [23], [23], [null], [null], [23], | Thread: [45] poping | Thread: [44] | [null], [null], [null], [null], [null], [23], [23], | Thread: [44] pushing | Thread: [45] | [23], [23], [null], [null], [23], [null], | Thread: [45] poping | Thread: [45] | [23], [null], [null], [23], [null], [null], [23],
Here is the code of the test: | | | | package org.galtstreet.cache.test; | | import java.util.Properties; | | import javax.naming.Context; | import javax.naming.InitialContext; | import javax.naming.NamingException; | import javax.resource.NotSupportedException; | import javax.transaction.SystemException; | import javax.transaction.UserTransaction; | | import junit.framework.TestCase; | | import org.galtstreet.exchangeboard.trying.WrappedQueue; | import org.jboss.cache.config.Configuration.CacheMode; | import org.jboss.cache.factories.UnitTestConfigurationFactory; | import org.jboss.cache.lock.IsolationLevel; | import org.jboss.cache.pojo.PojoCache; | import org.jboss.cache.pojo.PojoCacheFactory; | | | public class SimpleConcurrencyTest extends TestCase{ | | | | PojoCache cache1; | | protected void setUp() throws Exception { | | Properties prop = new Properties(); | prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.cache.transaction.DummyContextFactory"); | boolean toStart = false; | | | | cache1 = PojoCacheFactory.createCache(UnitTestConfigurationFactory.createConfiguration(CacheMode.REPL_SYNC), toStart); | cache1.getCache().getConfiguration().setSyncCommitPhase(true); | | cache1.getCache().getConfiguration().setLockParentForChildInsertRemove(true); | cache1.getCache().getConfiguration().setIsolationLevel(IsolationLevel.SERIALIZABLE); | cache1.start(); | } | | | UserTransaction getTransaction() throws SystemException, NotSupportedException, NamingException | { | Properties prop = new Properties(); | prop.put(Context.INITIAL_CONTEXT_FACTORY, | "org.jboss.cache.transaction.DummyContextFactory"); | return (UserTransaction) new InitialContext(prop).lookup("UserTransaction"); | } | | | public void testWrappedQueue(){ | | WrappedQueue queue = new WrappedQueue(); | | cache1.attach("queue-1", queue); | | | ProducerThread pt = new ProducerThread(queue); | pt.start(); | | | ConsumerThread ct = new ConsumerThread(queue); | ct.start(); | | sleeping(120000); | | } | | | | class ConsumerThread extends Thread{ | | WrappedQueue queue = null; | | public ConsumerThread(WrappedQueue queue) { | this.queue = queue; | } | | @Override | public void run() { | | while (true){ | | UserTransaction ut = null; | | try { | ut = getTransaction(); | ut.begin(); | }catch (Throwable th){ | th.printStackTrace(); | } | | System.out.println("Thread: [" + this.getId() + "] poping "); | queue.popInteger(); | | System.out.println("Thread: [" + this.getId() + "] \n" + queue.toString() ); | sleeping(500); | | | try { | ut.commit(); | }catch (Throwable th){ | th.printStackTrace(); | } | } | } | } | | class ProducerThread extends Thread{ | | WrappedQueue queue = null; | | public ProducerThread(WrappedQueue queue) { | this.queue = queue; | } | | @Override | public void run() { | | while (true){ | | UserTransaction ut = null; | | try { | ut = getTransaction(); | ut.begin(); | }catch (Throwable th){ | th.printStackTrace(); | } | | System.out.println("Thread: [" + this.getId() + "] pushing "); | queue.pushInteger(23); | System.out.println("Thread: [" + this.getId() + "] \n" + queue.toString() ); | sleeping(100); | | | try { | ut.commit(); | }catch (Throwable th){ | th.printStackTrace(); | } | | } | } | } | | | private void sleeping(int millisec){ | try { | Thread.sleep(millisec); | } catch (InterruptedException e) { | // TODO Auto-generated catch block | e.printStackTrace(); | } | } | | | protected void tearDown() throws Exception { | cache1.stop(); | cache2.stop(); | | } | | | | } | | | | | | package org.galtstreet.exchangeboard.trying; | | import java.util.ArrayList; | | import org.jboss.cache.pojo.annotation.Replicable; | | | @Replicable | public class WrappedQueue { | | | | private ArrayList<Integer> queueData = new ArrayList<Integer>(); | | | public void pushInteger(Integer tmp){ | queueData.add(queueData.size(), tmp); | } | | public Integer popInteger(){ | return queueData.remove(0); | } | | public boolean isEmpty(){ | return queueData.isEmpty(); | } | | public String toString(){ | return queueData.toString(); | } | } | | View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4266966#4266966 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4266966 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user