Author: mriou
Date: Mon Nov 13 16:12:51 2006
New Revision: 474600
URL: http://svn.apache.org/viewvc?view=rev&rev=474600
Log:
Synchronize didn't help much when several instances use the same static field.
So once in a while, 2 different mex had the same id. Now using an AtomicLong
instead of static long++.
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
Modified:
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java?view=diff&rev=474600&r1=474599&r2=474600
==============================================================================
---
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
(original)
+++
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/BpelDAOConnectionImpl.java
Mon Nov 13 16:12:51 2006
@@ -17,6 +17,7 @@
import javax.xml.namespace.QName;
import java.util.*;
+import java.util.concurrent.atomic.AtomicLong;
/**
@@ -26,16 +27,16 @@
private Map<QName, ProcessDaoImpl> _store;
private List<BpelEvent> _events = new LinkedList<BpelEvent>();
private static Map<String,MessageExchangeDAO> _mexStore =
Collections.synchronizedMap(new HashMap<String,MessageExchangeDAO>());
- private static long counter = 0;
+ private static AtomicLong counter = new AtomicLong(0);
BpelDAOConnectionImpl(Map<QName, ProcessDaoImpl> store) {
_store = store;
}
- private synchronized String getId() {
- return Long.toString(counter++);
- }
+// private synchronized String getId() {
+// return Long.toString(counter++);
+// }
public ProcessDAO getProcess(QName processId) {
return _store.get(processId);
@@ -144,7 +145,7 @@
}
public MessageExchangeDAO createMessageExchange(char dir) {
- String id = getId();
+ String id = Long.toString(counter.getAndIncrement());
MessageExchangeDAO mex = new MessageExchangeDAOImpl(dir,id);
_mexStore.put(id,mex);
return mex;