Author: gatfora
Date: Mon Jun 23 06:07:30 2008
New Revision: 670554
URL: http://svn.apache.org/viewvc?rev=670554&view=rev
Log:
Applying patch for SANDESHA2-165, Thanks David, Sara
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/RMSBeanMgr.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/SenderBeanMgr.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryBeanMgr.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryInvokerBeanMgr.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMDBeanMgr.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
Mon Jun 23 06:07:30 2008
@@ -156,13 +156,7 @@
for(long messageNo =
newRanges[rangeIndex].lowerValue; messageNo<=newRanges[rangeIndex].upperValue;
messageNo++){
numberOfNewMessagesAcked++;
- SenderBean matcher = new
SenderBean();
-
matcher.setSequenceID(outSequenceId);
-
-
matcher.setMessageNumber(messageNo);
-
- SenderBean retransmitterBean =
retransmitterMgr.findUnique(matcher);
- if (retransmitterBean != null) {
+ SenderBean retransmitterBean =
retransmitterMgr.retrieve(outSequenceId, messageNo);
if (retransmitterBean != null) {
// Check we haven't got
an Ack for a message that hasn't been sent yet !
if
(retransmitterBean.getSentCount() == 0) {
FaultManager.makeInvalidAcknowledgementFault(rmMsgCtx, sequenceAck, ackRange,
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/RMSBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/RMSBeanMgr.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/RMSBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/RMSBeanMgr.java
Mon Jun 23 06:07:30 2008
@@ -44,4 +44,7 @@
public RMSBean findUnique (RMSBean bean) throws SandeshaException;
-}
\ No newline at end of file
+ public RMSBean retrieveBySequenceID(String seqId) throws
SandeshaStorageException;
+
+ public RMSBean retrieveByInternalSequenceID(String internalSeqId)
throws SandeshaStorageException;
+}
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/SenderBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/SenderBeanMgr.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/SenderBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/beanmanagers/SenderBeanMgr.java
Mon Jun 23 06:07:30 2008
@@ -53,4 +53,7 @@
* @return
*/
public SenderBean retrieveFromMessageRefKey (String
messageContextRefKey);
+
+ public SenderBean retrieve(String sequnceId, long messageNumber) throws
SandeshaStorageException;
+
}
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryBeanMgr.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryBeanMgr.java
Mon Jun 23 06:07:30 2008
@@ -66,14 +66,14 @@
return wasInserted;
}
- protected boolean delete(Object key) throws SandeshaStorageException {
+ protected RMBean delete(Object key) throws SandeshaStorageException {
if(LoggingControl.isAnyTracingEnabled() &&
log.isDebugEnabled()) log.debug("Entry: InMemoryBeanMgr " + this.getClass() + "
delete " + key);
RMBean bean = (RMBean) table.remove(key);
if(bean != null) {
mgr.enlistBean(bean);
}
if(LoggingControl.isAnyTracingEnabled() &&
log.isDebugEnabled()) log.debug("Exit: InMemoryBeanMgr " + this.getClass() + "
delete " + bean);
- return bean != null;
+ return bean;
}
protected RMBean retrieve(Object key) throws SandeshaStorageException {
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryInvokerBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryInvokerBeanMgr.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryInvokerBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryInvokerBeanMgr.java
Mon Jun 23 06:07:30 2008
@@ -64,7 +64,7 @@
public boolean delete(String key) throws SandeshaStorageException {
lock.lock();
- boolean result = super.delete(key);
+ boolean result = (super.delete(key)!=null);
lock.unlock();
return result;
}
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMDBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMDBeanMgr.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMDBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMDBeanMgr.java
Mon Jun 23 06:07:30 2008
@@ -36,7 +36,8 @@
}
public boolean delete(String sequenceId) throws
SandeshaStorageException {
- return super.delete(sequenceId);
+ return (super.delete(sequenceId)!=null);
+
}
public RMDBean retrieve(String sequenceId) throws
SandeshaStorageException {
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryRMSBeanMgr.java
Mon Jun 23 06:07:30 2008
@@ -20,6 +20,9 @@
package org.apache.sandesha2.storage.inmemory;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import org.apache.axis2.context.AbstractContext;
import org.apache.sandesha2.Sandesha2Constants;
@@ -29,23 +32,43 @@
public class InMemoryRMSBeanMgr extends InMemoryBeanMgr implements RMSBeanMgr {
+ private Lock lock = new ReentrantLock();
+
+ private ConcurrentHashMap seqID2csm = new ConcurrentHashMap();
+ private ConcurrentHashMap intSeqID2csm = new ConcurrentHashMap();
+
public InMemoryRMSBeanMgr(InMemoryStorageManager mgr, AbstractContext
context) {
super(mgr, context, Sandesha2Constants.BeanMAPs.CREATE_SEQUECE);
}
public boolean insert(RMSBean bean) throws SandeshaStorageException {
- boolean res = false;
- synchronized (table) {
- RMSBean findBean = new RMSBean();
- findBean.setInternalSequenceID(bean.getInternalSequenceID());
- if (findUniqueNoLock(findBean) == null)
- res = super.insert(bean.getCreateSeqMsgID(), bean);
- }
+ boolean res = false;
+ lock.lock();
+ if(intSeqID2csm.get(bean.getInternalSequenceID())==null){
+ res = super.insert(bean.getCreateSeqMsgID(), bean);
+ if(res){
+ if(bean.getInternalSequenceID()!=null){
+
intSeqID2csm.put(bean.getInternalSequenceID(), bean.getCreateSeqMsgID());
+ }
+ if(bean.getSequenceID()!=null){
+ seqID2csm.put(bean.getSequenceID(),
bean.getCreateSeqMsgID());
+ }
+ }
+ }
+ lock.unlock();
+
+
return res;
}
public boolean delete(String msgId) throws SandeshaStorageException {
- return super.delete(msgId);
+ RMSBean removed = (RMSBean) super.delete(msgId);
+ if(removed!=null){
+ seqID2csm.remove(removed.getSequenceID());
+ intSeqID2csm.remove(removed.getInternalSequenceID());
+ }
+ return removed!=null;
+
}
public RMSBean retrieve(String msgId) throws SandeshaStorageException {
@@ -53,7 +76,15 @@
}
public boolean update(RMSBean bean) throws SandeshaStorageException {
- return super.update(bean.getCreateSeqMsgID(), bean);
+ boolean result = super.update(bean.getCreateSeqMsgID(), bean);
+ if(bean.getInternalSequenceID()!=null){
+ intSeqID2csm.put(bean.getInternalSequenceID(),
bean.getCreateSeqMsgID());
+ }
+ if(bean.getSequenceID()!=null){
+ seqID2csm.put(bean.getSequenceID(),
bean.getCreateSeqMsgID());
+ }
+ return result;
+
}
public List find(RMSBean bean) throws SandeshaStorageException {
@@ -63,5 +94,33 @@
public RMSBean findUnique (RMSBean bean) throws
SandeshaStorageException {
return (RMSBean) super.findUnique(bean);
}
+
+ public RMSBean retrieveBySequenceID(String seqId) throws
SandeshaStorageException {
+ String csid = (String) seqID2csm.get(seqId);
+ RMSBean bean = null;
+ if(csid!=null){
+ bean = retrieve(csid);
+ }
+ if(bean == null){
+ RMSBean finder = new RMSBean();
+ finder.setSequenceID(seqId);
+ bean = findUnique(finder);
+ }
+ return bean;
+ }
+
+ public RMSBean retrieveByInternalSequenceID(String internalSeqId)
throws SandeshaStorageException {
+ String csid = (String) intSeqID2csm.get(internalSeqId);
+ RMSBean bean = null;
+ if(csid!=null){
+ bean = retrieve(csid);
+ }
+ if(bean == null){
+ RMSBean finder = new RMSBean();
+ finder.setInternalSequenceID(internalSeqId);
+ bean = findUnique(finder);
+ }
+ return bean;
+ }
}
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemorySenderBeanMgr.java
Mon Jun 23 06:07:30 2008
@@ -21,6 +21,7 @@
import java.util.Iterator;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.axis2.context.AbstractContext;
import org.apache.commons.logging.Log;
@@ -38,23 +39,42 @@
private static final Log log =
LogFactory.getLog(InMemorySenderBeanMgr.class);
+ ConcurrentHashMap sequenceIdandMessNum2MessageId = new
ConcurrentHashMap();
+
public InMemorySenderBeanMgr(InMemoryStorageManager mgr,
AbstractContext context) {
super(mgr, context, Sandesha2Constants.BeanMAPs.RETRANSMITTER);
}
public boolean delete(String MessageId) throws SandeshaStorageException
{
- return super.delete(MessageId);
+ SenderBean bean =(SenderBean) super.delete(MessageId);
+ if(bean.getSequenceID()!=null && bean.getMessageNumber()>0){
+
sequenceIdandMessNum2MessageId.remove(bean.getSequenceID()+":"+bean.getMessageNumber());
+ }
+ return bean!=null;
+
}
public SenderBean retrieve(String MessageId) throws
SandeshaStorageException {
return (SenderBean) super.retrieve(MessageId);
}
+ public SenderBean retrieve(String sequnceId, long messageNumber) throws
SandeshaStorageException {
+ String MessageId = (String)
sequenceIdandMessNum2MessageId.get(sequnceId+":"+messageNumber);
+ if(MessageId == null){
+ return null;
+ }
+ return (SenderBean) super.retrieve(MessageId);
+ }
+
+
public boolean insert(SenderBean bean) throws SandeshaStorageException {
if (bean.getMessageID() == null)
throw new
SandeshaStorageException(SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.nullMsgId));
boolean result = super.insert(bean.getMessageID(), bean);
+ if(bean.getSequenceID()!=null && bean.getMessageNumber()>0){
+
sequenceIdandMessNum2MessageId.put(bean.getSequenceID()+":"+bean.getMessageNumber(),
bean.getMessageID());
+ }
mgr.getInMemoryTransaction().setSentMessages(true);
return result;
}
@@ -79,7 +99,7 @@
matcher.setTimeToSend(System.currentTimeMillis());
matcher.setTransportAvailable(true);
- List matches = super.find(matcher);
+ List matches = super.findNoLock(matcher);
if(LoggingControl.isAnyTracingEnabled() &&
log.isDebugEnabled()) log.debug("Found " + matches.size() + " messages");
// Look for the message with the lowest send time, and send
that one.
@@ -103,6 +123,14 @@
result = bean;
}
}
+ // Because the beans weren't locked before, need to do a
retrieve to get a locked copy.
+ // And then check that it's still valid
+ if(result!=null){
+ result = retrieve(result.getMessageID());
+ if(!result.match(matcher)){
+ result = null;
+ }
+ }
if(LoggingControl.isAnyTracingEnabled() &&
log.isDebugEnabled()) log.debug("Exit:
InMemorySenderBeanManager::getNextMessageToSend " + result);
return result;
@@ -110,6 +138,9 @@
public boolean update(SenderBean bean) throws SandeshaStorageException {
boolean result = super.update(bean.getMessageID(), bean);
+ if(bean.getSequenceID()!=null && bean.getMessageNumber()>0){
+
sequenceIdandMessNum2MessageId.put(bean.getSequenceID()+":"+bean.getMessageNumber(),
bean.getMessageID());
+ }
mgr.getInMemoryTransaction().setSentMessages(true);
return result;
}
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/FaultManager.java
Mon Jun 23 06:07:30 2008
@@ -718,11 +718,19 @@
SOAPFaultDetail detail = faultPart.getDetail();
if (detail != null && !isSOAP11SequenceUnknownFault)
{
- OMElement identifierOM =
detail.getFirstChildWithName(new QName(rmMsgCtx.getRMNamespaceValue(),
-
Sandesha2Constants.WSRM_COMMON.IDENTIFIER));
- if (identifierOM != null)
+ // At this point we may not know what RM NS is in use.
+ OMElement identifierOM =
detail.getFirstChildWithName(new QName(Sandesha2Constants.SPEC_2005_02.NS_URI,
+
Sandesha2Constants.WSRM_COMMON.IDENTIFIER));
+ if (identifierOM != null){
identifier = identifierOM.getText();
- }
+ }else{
+ identifierOM = detail.getFirstChildWithName(new
QName(Sandesha2Constants.SPEC_2007_02.NS_URI,
+
Sandesha2Constants.WSRM_COMMON.IDENTIFIER));
+ if (identifierOM != null){
+ identifier = identifierOM.getText();
+ }
+ }
+ }
if
(Sandesha2Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED.equals(soapFaultSubcode))
{
processCreateSequenceRefusedFault(rmMsgCtx, fault);
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java?rev=670554&r1=670553&r2=670554&view=diff
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
Mon Jun 23 06:07:30 2008
@@ -609,23 +609,13 @@
throws SandeshaException {
RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
- RMSBean bean = new RMSBean();
- bean.setInternalSequenceID(internalSequenceID);
-
- bean = rmsBeanMgr.findUnique(bean);
-
+ RMSBean bean =
rmsBeanMgr.retrieveByInternalSequenceID(internalSequenceID);
return bean;
}
- public static final RMSBean getRMSBeanFromSequenceId(StorageManager
storageManager, String sequenceID)
-
- throws SandeshaException {
+ public static final RMSBean getRMSBeanFromSequenceId(StorageManager
storageManager, String sequenceID) throws SandeshaException {
RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
- RMSBean bean = new RMSBean();
- bean.setSequenceID(sequenceID);
-
- bean = rmsBeanMgr.findUnique(bean);
-
+ RMSBean bean = rmsBeanMgr.retrieveBySequenceID(sequenceID);
return bean;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]