You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by al...@apache.org on 2015/01/16 15:12:35 UTC

juddi git commit: JUDDI-906 attempting to resolve build issues due to expired tokens JUDDI-241 all UDDI elements are now replicated and deleted correctly, with the exception of data conflicts

Repository: juddi
Updated Branches:
  refs/heads/master b60789165 -> d924443cd


JUDDI-906 attempting to resolve build issues due to expired tokens
JUDDI-241 all UDDI elements are now replicated and deleted correctly, with the exception of data conflicts


Project: http://git-wip-us.apache.org/repos/asf/juddi/repo
Commit: http://git-wip-us.apache.org/repos/asf/juddi/commit/d924443c
Tree: http://git-wip-us.apache.org/repos/asf/juddi/tree/d924443c
Diff: http://git-wip-us.apache.org/repos/asf/juddi/diff/d924443c

Branch: refs/heads/master
Commit: d924443cdb5f3465ec23d5f2f67de7b8e1521610
Parents: b607891
Author: Alex <al...@apache.org>
Authored: Fri Jan 16 09:12:22 2015 -0500
Committer: Alex <al...@apache.org>
Committed: Fri Jan 16 09:12:22 2015 -0500

----------------------------------------------------------------------
 .../org/apache/juddi/api/impl/JUDDIApiImpl.java |   7 +-
 .../juddi/api/impl/UDDIPublicationImpl.java     |   2 +-
 .../juddi/api/impl/UDDIReplicationImpl.java     |  11 +-
 .../api/impl/UDDIValueSetValidationImpl.java    |  30 +-
 .../apache/juddi/v3/tck/TckBusinessService.java |   1 +
 .../tck/JUDDI_300_MultiNodeIntegrationTest.java | 722 ++++++++++++++-----
 ...090_SubscriptionListenerIntegrationBase.java |   5 -
 7 files changed, 567 insertions(+), 211 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/juddi/blob/d924443c/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
index db08195..ca69eba 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/JUDDIApiImpl.java
@@ -429,6 +429,7 @@ public class JUDDIApiImpl extends AuthenticatedService implements JUDDIApiPortTy
                         new ValidatePublish(publisher).validateAdminDeleteTModel(em, body);
 
                         //TODO if referiental integrity is turned on, check to see if this is referenced anywhere and prevent the delete
+                        List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
                         List<String> entityKeyList = body.getTModelKey();
                         for (String entityKey : entityKeyList) {
                                 org.apache.juddi.model.Tmodel obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey);
@@ -439,11 +440,13 @@ public class JUDDIApiImpl extends AuthenticatedService implements JUDDIApiPortTy
                                 if (!obj.getNodeId().equals(node))
                                         throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNodeOwner", entityKey + " this node " + node + " owning node " + obj.getNodeId()));
                                 em.remove(obj);
-                                ChangeRecord cr = UDDIPublicationImpl.getChangeRecord_deleteTModelDelete(entityKey, node);
-                                ReplicationNotifier.Enqueue(cr);
+                                changes.add( UDDIPublicationImpl.getChangeRecord_deleteTModelDelete(entityKey, node));
+                                
                         }
 
                         tx.commit();
+                        for (ChangeRecord cr: changes)
+                                ReplicationNotifier.Enqueue(cr);
                         long procTime = System.currentTimeMillis() - startTime;
                         serviceCounter.update(JUDDIQuery.ADMIN_DELETE_TMODEL,
                                 QueryStatus.SUCCESS, procTime);

http://git-wip-us.apache.org/repos/asf/juddi/blob/d924443c/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
index 111fda0..2417db9 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
@@ -1357,7 +1357,7 @@ public class UDDIPublicationImpl extends AuthenticatedService implements UDDIPub
                 ChangeRecord cr = new ChangeRecord();
                 cr.setEntityKey(entityKey);
                 cr.setNodeID(node);
-                cr.setRecordType(ChangeRecord.RecordType.ChangeRecordHide);
+                cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
                 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
                 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
 

http://git-wip-us.apache.org/repos/asf/juddi/blob/d924443c/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
index c32f264..8f20593 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
@@ -269,7 +269,7 @@ public class UDDIReplicationImpl extends AuthenticatedService implements UDDIRep
                                                                 //ok now we need to persist the change records
                                                                 logger.info("Change records retrieved from " + poll + ", " + records.size());
                                                                 for (int i = 0; i < records.size(); i++) {
-                                                                        logger.info("Change records retrieved " + records.get(i).getChangeID().getNodeID() + " USN " + records.get(i).getChangeID().getOriginatingUSN());
+                                                                        //logger.info("Change records retrieved " + records.get(i).getChangeID().getNodeID() + " USN " + records.get(i).getChangeID().getOriginatingUSN());
                                                                         PersistChangeRecord(records.get(i));
                                                                 }
                                                                 recordsreturned = records.size();
@@ -325,7 +325,7 @@ public class UDDIReplicationImpl extends AuthenticatedService implements UDDIRep
                                 mapChangeRecord.setId(null);
                                 em.persist(mapChangeRecord);
                                 tx.commit();
-                                logger.debug("Remote CR saved, it was from " + mapChangeRecord.getNodeID()
+                                logger.info("Remote CR saved, it was from " + mapChangeRecord.getNodeID()
                                         + " USN:" + mapChangeRecord.getOriginatingUSN()
                                         + " Type:" + mapChangeRecord.getRecordType().name()
                                         + " Key:" + mapChangeRecord.getEntityKey()
@@ -359,7 +359,12 @@ public class UDDIReplicationImpl extends AuthenticatedService implements UDDIRep
                                                  * administrative function to
                                                  * permanently remove a tModel.
                                                  */
-                                                pub.deleteTModel(rec.getChangeRecordDelete().getTModelKey(), em);
+                                                Object tm=em.find(Tmodel.class, rec.getChangeRecordDelete().getTModelKey());
+                                                if (tm!=null)
+                                                        em.remove(tm);
+                                                else
+                                                        logger.error("failed to adminstratively delete tmodel because it doesn't exist. " + rec.getChangeRecordDelete().getTModelKey());
+                                                //pub.deleteTModel(rec.getChangeRecordDelete().getTModelKey(), em);
                                         }
                                 }
                                 if (rec.getChangeRecordDeleteAssertion() != null && rec.getChangeRecordDeleteAssertion().getPublisherAssertion() != null) {

http://git-wip-us.apache.org/repos/asf/juddi/blob/d924443c/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java
index b3f4bbb..291f603 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIValueSetValidationImpl.java
@@ -297,35 +297,7 @@ public class UDDIValueSetValidationImpl extends AuthenticatedService implements
                 return ret;
         }
 
-        private void validateTmodelInstanceDetails(List<TModelInstanceInfo> tModelInstanceInfo, String xpath) {
-                /*
-                 if (tModelInstanceInfo == null) {
-                 return;
-                 }
-                 String err = "";
-                 for (int i = 0; i < tModelInstanceInfo.size(); i++) {
-                 List<String> validValues = getValidValues(tModelInstanceInfo.get(i).getTModelKey());
-                 if (validValues != null) {
-                 //compare against the instance info
-                 if (tModelInstanceInfo.get(i).getInstanceDetails() == null) {
-                 err += xpath + ".(" + i + ").instanceDetails=null ";
-                 } else {
-                 boolean ok = false;
-                 for (int k = 0; k < validValues.size(); k++) {
-                 if (validValues.get(k).equals(tModelInstanceInfo.get(i).getInstanceDetails().getInstanceParms())) {
-                 ok = true;
-                 }
-                 }
-                 if (!ok) {
-                 err += xpath + ".(" + i + ").instanceDetails.instanceParams ";
-                 }
-                 }
-                 }
-                 }
-                 if (err.length() > 0) {
-                 throw new InvalidValueException(new ErrorMessage("errors.valuesetvalidation.invalidcontent", err));
-                 }*/
-        }
+        
 
         public static String ConvertKeyToClass(String tmodelkey) {
 

http://git-wip-us.apache.org/repos/asf/juddi/blob/d924443c/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java
----------------------------------------------------------------------
diff --git a/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java b/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java
index ab012b4..7487876 100644
--- a/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java
+++ b/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java
@@ -45,6 +45,7 @@ public class TckBusinessService
     public final static String JOE_SERVICE_KEY_2 = "uddi:uddi.joepublisher.com:servicetwo";
     public final static String SAM_SERVICE_XML = "uddi_data/samsyndicator/businessService.xml";
     public final static String SAM_SERVICE_KEY = "uddi:www.samco.com:listingservice";
+    public final static String SAM_SERVICE_BINDING_KEY="uddi:www.samco.com:listservice-accesspoint";
     public final static String RIFTSAW_PROCESS_XML = "uddi_data/bpel/riftsaw/WSDLPort.xml";
     public final static String RIFTSAW_PROCESS_KEY = "uddi:riftsaw.jboss.org:ticket-service";
     public final static String JOE_BINDING_KEY_1="uddi:uddi.joepublisher.com:bindingone";

http://git-wip-us.apache.org/repos/asf/juddi/blob/d924443c/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java
----------------------------------------------------------------------
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java
index 177ba86..83f6103 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java
@@ -17,6 +17,8 @@ package org.apache.juddi.v3.tck;
 
 import java.math.BigInteger;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.xml.bind.JAXB;
 import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.ws.BindingProvider;
@@ -38,6 +40,7 @@ import org.junit.Test;
 import org.uddi.api_v3.AccessPoint;
 import org.uddi.api_v3.AddPublisherAssertions;
 import org.uddi.api_v3.AssertionStatusItem;
+import org.uddi.api_v3.BindingDetail;
 import org.uddi.api_v3.BindingTemplate;
 import org.uddi.api_v3.BindingTemplates;
 import org.uddi.api_v3.BusinessDetail;
@@ -46,17 +49,26 @@ import org.uddi.api_v3.BusinessService;
 import org.uddi.api_v3.BusinessServices;
 import org.uddi.api_v3.CompletionStatus;
 import org.uddi.api_v3.Contact;
+import org.uddi.api_v3.DeleteBinding;
+import org.uddi.api_v3.DeleteBusiness;
 import org.uddi.api_v3.DeletePublisherAssertions;
+import org.uddi.api_v3.DeleteService;
 import org.uddi.api_v3.DeleteTModel;
+import org.uddi.api_v3.Description;
+import org.uddi.api_v3.FindTModel;
+import org.uddi.api_v3.GetBindingDetail;
 import org.uddi.api_v3.GetBusinessDetail;
 import org.uddi.api_v3.GetOperationalInfo;
+import org.uddi.api_v3.GetServiceDetail;
 import org.uddi.api_v3.GetTModelDetail;
 import org.uddi.api_v3.KeyedReference;
 import org.uddi.api_v3.Name;
 import org.uddi.api_v3.OperationalInfos;
 import org.uddi.api_v3.PersonName;
 import org.uddi.api_v3.PublisherAssertion;
+import org.uddi.api_v3.SaveBinding;
 import org.uddi.api_v3.SaveBusiness;
+import org.uddi.api_v3.ServiceDetail;
 import org.uddi.api_v3.TModel;
 import org.uddi.api_v3.TModelDetail;
 import org.uddi.custody_v3.KeyBag;
@@ -96,14 +108,15 @@ public class JUDDI_300_MultiNodeIntegrationTest {
         private static UDDICustodyTransferPortType custodySam;
         private static UDDICustodyTransferPortType custodyMary;
         private static UDDIPublicationPortType publishMary;
-        private static UDDIPublicationPortType publishSam;
+        private static UDDIPublicationPortType publishSamNode2;
         private static UDDIInquiryPortType inquiryMary;
-        private static UDDIInquiryPortType inquirySam;
+        private static UDDIInquiryPortType inquirySamNode2;
         private static UDDIReplicationPortType replicationMary;
         private static UDDIReplicationPortType replicationSam;
         static TckBusiness maryBizNode1;
         static TckTModel maryTModelNode1;
 
+        static TckBusinessService samServiceNode2;
         static TckBusiness samBizNode2;
         static TckTModel samTModelNode2;
 
@@ -152,11 +165,12 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 ((BindingProvider) replicationSam).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, manager.getClientConfig().getUDDINode(CFG_node2_SAM).getReplicationUrl());
                 juddiApiServiceNode2 = node2.getJUDDIApiService();
                 custodySam = node2.getUDDICustodyTransferService();
-                inquirySam = node2.getUDDIInquiryService();
-                publishSam = node2.getUDDIPublishService();
+                inquirySamNode2 = node2.getUDDIInquiryService();
+                publishSamNode2 = node2.getUDDIPublishService();
+                samServiceNode2 = new TckBusinessService(publishSamNode2, inquirySamNode2);
 
-                samBizNode2 = new TckBusiness(publishSam, inquirySam);
-                samTModelNode2 = new TckTModel(publishSam, inquirySam);
+                samBizNode2 = new TckBusiness(publishSamNode2, inquirySamNode2);
+                samTModelNode2 = new TckTModel(publishSamNode2, inquirySamNode2);
                 maryBizNode1 = new TckBusiness(publishMary, inquiryMary);
                 maryTModelNode1 = new TckTModel(publishMary, inquiryMary);
 
@@ -169,9 +183,9 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                         TckSecurity.setCredentials((BindingProvider) replicationMary, TckPublisher.getMaryPublisherId(), TckPublisher.getMaryPassword());
 
                         TckSecurity.setCredentials((BindingProvider) custodySam, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());
-                        TckSecurity.setCredentials((BindingProvider) inquirySam, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());
+                        TckSecurity.setCredentials((BindingProvider) inquirySamNode2, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());
                         TckSecurity.setCredentials((BindingProvider) replicationSam, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());
-                        TckSecurity.setCredentials((BindingProvider) publishSam, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());
+                        TckSecurity.setCredentials((BindingProvider) publishSamNode2, TckPublisher.getSamPublisherId(), TckPublisher.getSamPassword());
 
                 }
         }
@@ -302,143 +316,148 @@ public class JUDDI_300_MultiNodeIntegrationTest {
         @Test
         public void testMultiNodeBusinessCustodyTransfer() throws Exception {
                 logger.info("testMultiNodeBusinessCustodyTransfer");
-                Assume.assumeTrue(TckPublisher.isReplicationEnabled() && TckPublisher.isCustodyTransferEnabled());
-                Assume.assumeTrue(TckPublisher.isJUDDI());
-                refreshTokens();
-                testSetupReplicationConfig();
-
-                getReplicationStatus();
-
-                //create mary's business, node1
-                BusinessEntity mary = new BusinessEntity();
-                mary.getName().add(new Name("Mary's biz on " + CFG_node1_MARY, null));
-                mary.setBusinessServices(new BusinessServices());
-                BusinessService bs = new BusinessService();
-                bs.getName().add(new Name("Mary's service", null));
-                bs.setBindingTemplates(new BindingTemplates());
-                BindingTemplate bt = new BindingTemplate();
-                bt.setAccessPoint(new AccessPoint("http://localhost/mary", "wsdlDeployment"));
-                bs.getBindingTemplates().getBindingTemplate().add(bt);
-                mary.getBusinessServices().getBusinessService().add(bs);
-
-                SaveBusiness sb = new SaveBusiness();
-                sb.setAuthInfo(maryTokenNode1);
-                sb.getBusinessEntity().add(mary);
-                BusinessDetail saveBusiness = publishMary.saveBusiness(sb);
-
-                Thread.sleep(5000); //sleep a bit and wait for replication to do it's thing
-
-                GetOperationalInfo operationalInfo = new GetOperationalInfo();
-                operationalInfo.setAuthInfo(maryTokenNode1);
-                operationalInfo.getEntityKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
-                OperationalInfos beforeNode1 = inquiryMary.getOperationalInfo(operationalInfo);
-
-                operationalInfo.setAuthInfo(samTokenNode2);
-                OperationalInfos beforeNode2 = null;
-                int timeout = TckPublisher.getSubscriptionTimeout();
-                while (timeout > 0) {
-                        logger.info("Waiting for the update...");
-                        try {
-                                GetBusinessDetail gbd = new GetBusinessDetail();
-                                gbd.setAuthInfo(samTokenNode2);
-                                gbd.getBusinessKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
-
-                                BusinessDetail businessDetail = inquirySam.getBusinessDetail(gbd);
-                                if (businessDetail != null
-                                        && !businessDetail.getBusinessEntity().isEmpty()) {
-                                        logger.info("Mary's business exists on Sams node, grabbing the operational info to confirm ownership...");
+                try {
+                        Assume.assumeTrue(TckPublisher.isReplicationEnabled() && TckPublisher.isCustodyTransferEnabled());
+                        Assume.assumeTrue(TckPublisher.isJUDDI());
+                        refreshTokens();
+                        testSetupReplicationConfig();
+
+                        getReplicationStatus();
+
+                        //create mary's business, node1
+                        BusinessEntity mary = new BusinessEntity();
+                        mary.getName().add(new Name("Mary's biz on " + CFG_node1_MARY, null));
+                        mary.setBusinessServices(new BusinessServices());
+                        BusinessService bs = new BusinessService();
+                        bs.getName().add(new Name("Mary's service", null));
+                        bs.setBindingTemplates(new BindingTemplates());
+                        BindingTemplate bt = new BindingTemplate();
+                        bt.setAccessPoint(new AccessPoint("http://localhost/mary", "wsdlDeployment"));
+                        bs.getBindingTemplates().getBindingTemplate().add(bt);
+                        mary.getBusinessServices().getBusinessService().add(bs);
+
+                        SaveBusiness sb = new SaveBusiness();
+                        sb.setAuthInfo(maryTokenNode1);
+                        sb.getBusinessEntity().add(mary);
+                        BusinessDetail saveBusiness = publishMary.saveBusiness(sb);
+
+                        Thread.sleep(5000); //sleep a bit and wait for replication to do it's thing
+
+                        GetOperationalInfo operationalInfo = new GetOperationalInfo();
+                        operationalInfo.setAuthInfo(maryTokenNode1);
+                        operationalInfo.getEntityKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
+                        OperationalInfos beforeNode1 = inquiryMary.getOperationalInfo(operationalInfo);
+
+                        operationalInfo.setAuthInfo(samTokenNode2);
+                        OperationalInfos beforeNode2 = null;
+                        int timeout = TckPublisher.getSubscriptionTimeout();
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        GetBusinessDetail gbd = new GetBusinessDetail();
+                                        gbd.setAuthInfo(samTokenNode2);
+                                        gbd.getBusinessKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
+
+                                        BusinessDetail businessDetail = inquirySamNode2.getBusinessDetail(gbd);
+                                        if (businessDetail != null
+                                                && !businessDetail.getBusinessEntity().isEmpty()) {
+                                                logger.info("Mary's business exists on Sams node, grabbing the operational info to confirm ownership...");
+                                        }
+                                        beforeNode2 = inquirySamNode2.getOperationalInfo(operationalInfo);
+                                        break;
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
                                 }
-                                beforeNode2 = inquirySam.getOperationalInfo(operationalInfo);
-                                break;
-                        } catch (Exception ex) {
-                                logger.warn(ex.getMessage());
-                        }
-                        timeout--;
-                        Thread.sleep(1000);
+                                timeout--;
+                                Thread.sleep(1000);
 
-                }
-                Assert.assertNotNull(beforeNode1);
-                Assert.assertNotNull(beforeNode2);
-
-                JAXB.marshal(beforeNode1, System.out);
-                JAXB.marshal(beforeNode2, System.out);
-                //confirm we're replicated correctly
-                Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getAuthorizedName(), beforeNode2.getOperationalInfo().get(0).getAuthorizedName());
-                Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getEntityKey(), beforeNode2.getOperationalInfo().get(0).getEntityKey());
-                Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getEntityKey(), saveBusiness.getBusinessEntity().get(0).getBusinessKey());
-                Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getNodeID(), beforeNode2.getOperationalInfo().get(0).getNodeID());
-
-                //get a transfer token, node1
-                KeyBag kb = new KeyBag();
-                kb.getKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
-                Holder<String> sourceNode = new Holder<String>();
-                Holder<XMLGregorianCalendar> expiration = new Holder<XMLGregorianCalendar>();
-                Holder<byte[]> token = new Holder<byte[]>();
-                custodyMary.getTransferToken(maryTokenNode1, kb, sourceNode, expiration, token);
-
-                //sam accepts the transfer token, node 2
-                TransferEntities transferEntities = new TransferEntities();
-                transferEntities.setAuthInfo(samTokenNode2);
-                transferEntities.setKeyBag(kb);
-                transferEntities.setTransferToken(new TransferToken());
-                transferEntities.getTransferToken().setExpirationTime(expiration.value);
-                transferEntities.getTransferToken().setNodeID(sourceNode.value);
-                transferEntities.getTransferToken().setOpaqueToken(token.value);
-                custodySam.transferEntities(transferEntities);
-                //stuff happens
-                //Thread.sleep(5000);
-                //confirm the transfer
-                timeout = TckPublisher.getSubscriptionTimeout();
-                OperationalInfos afterNode1 = null;
-                OperationalInfos afterNode2 = null;
-                while (timeout > 0) {
-                        logger.info("Waiting for the update...");
-                        try {
-                                operationalInfo.setAuthInfo(maryTokenNode1);
-                                //operationalInfo.getEntityKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
-                                afterNode1 = inquiryMary.getOperationalInfo(operationalInfo);
-                                if (afterNode1.getOperationalInfo().get(0).getAuthorizedName().equals(TckPublisher.getSamPublisherId())) {
-                                        logger.info("Mary's biz on node 1 is now owned by Sam");
-                                        //node 1 is up to date
-                                        operationalInfo.setAuthInfo(samTokenNode2);
-                                        afterNode2 = inquirySam.getOperationalInfo(operationalInfo);
-                                        if (afterNode2.getOperationalInfo().get(0).getAuthorizedName().equals(TckPublisher.getSamPublisherId())) {
-                                                //node 2 is up to date
-                                                logger.info("Mary's biz on node 2 is now owned by Sam");
-                                                break;
+                        }
+                        Assert.assertNotNull(beforeNode1);
+                        Assert.assertNotNull(beforeNode2);
+
+                        JAXB.marshal(beforeNode1, System.out);
+                        JAXB.marshal(beforeNode2, System.out);
+                        //confirm we're replicated correctly
+                        Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getAuthorizedName(), beforeNode2.getOperationalInfo().get(0).getAuthorizedName());
+                        Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getEntityKey(), beforeNode2.getOperationalInfo().get(0).getEntityKey());
+                        Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getEntityKey(), saveBusiness.getBusinessEntity().get(0).getBusinessKey());
+                        Assert.assertEquals(beforeNode1.getOperationalInfo().get(0).getNodeID(), beforeNode2.getOperationalInfo().get(0).getNodeID());
+
+                        //get a transfer token, node1
+                        KeyBag kb = new KeyBag();
+                        kb.getKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
+                        Holder<String> sourceNode = new Holder<String>();
+                        Holder<XMLGregorianCalendar> expiration = new Holder<XMLGregorianCalendar>();
+                        Holder<byte[]> token = new Holder<byte[]>();
+                        custodyMary.getTransferToken(maryTokenNode1, kb, sourceNode, expiration, token);
+
+                        //sam accepts the transfer token, node 2
+                        TransferEntities transferEntities = new TransferEntities();
+                        transferEntities.setAuthInfo(samTokenNode2);
+                        transferEntities.setKeyBag(kb);
+                        transferEntities.setTransferToken(new TransferToken());
+                        transferEntities.getTransferToken().setExpirationTime(expiration.value);
+                        transferEntities.getTransferToken().setNodeID(sourceNode.value);
+                        transferEntities.getTransferToken().setOpaqueToken(token.value);
+                        custodySam.transferEntities(transferEntities);
+                        //stuff happens
+                        //Thread.sleep(5000);
+                        //confirm the transfer
+                        timeout = TckPublisher.getSubscriptionTimeout();
+                        OperationalInfos afterNode1 = null;
+                        OperationalInfos afterNode2 = null;
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        operationalInfo.setAuthInfo(maryTokenNode1);
+                                        //operationalInfo.getEntityKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
+                                        afterNode1 = inquiryMary.getOperationalInfo(operationalInfo);
+                                        if (afterNode1.getOperationalInfo().get(0).getAuthorizedName().equals(TckPublisher.getSamPublisherId())) {
+                                                logger.info("Mary's biz on node 1 is now owned by Sam");
+                                                //node 1 is up to date
+                                                operationalInfo.setAuthInfo(samTokenNode2);
+                                                afterNode2 = inquirySamNode2.getOperationalInfo(operationalInfo);
+                                                if (afterNode2.getOperationalInfo().get(0).getAuthorizedName().equals(TckPublisher.getSamPublisherId())) {
+                                                        //node 2 is up to date
+                                                        logger.info("Mary's biz on node 2 is now owned by Sam");
+                                                        break;
+                                                } else {
+                                                        logger.info("Mary's biz on node 2 is still owned by Mary");
+                                                }
                                         } else {
-                                                logger.info("Mary's biz on node 2 is still owned by Mary");
+                                                logger.info("Mary's biz on node 1 is still owned by Mary");
                                         }
-                                } else {
-                                        logger.info("Mary's biz on node 1 is still owned by Mary");
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
                                 }
-                        } catch (Exception ex) {
-                                logger.warn(ex.getMessage());
-                        }
-                        timeout--;
-                        Thread.sleep(1000);
+                                timeout--;
+                                Thread.sleep(1000);
 
-                }
-                //operationalInfo.setAuthInfo(maryTokenNode1);
-                // operationalInfo.getEntityKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
+                        }
+                        //operationalInfo.setAuthInfo(maryTokenNode1);
+                        // operationalInfo.getEntityKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey());
 
-                Assert.assertNotNull(afterNode1);
-                Assert.assertNotNull(afterNode2);
-                if (TckCommon.isDebug()) {
-                        JAXB.marshal(afterNode1, System.out);
-                        JAXB.marshal(afterNode2, System.out);
+                        Assert.assertNotNull(afterNode1);
+                        Assert.assertNotNull(afterNode2);
+                        if (TckCommon.isDebug()) {
+                                JAXB.marshal(afterNode1, System.out);
+                                JAXB.marshal(afterNode2, System.out);
 
-                }
-                //confirm we're replicated correctly
-                Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getAuthorizedName(), afterNode2.getOperationalInfo().get(0).getAuthorizedName());
-                Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getEntityKey(), afterNode2.getOperationalInfo().get(0).getEntityKey());
-                Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getEntityKey(), saveBusiness.getBusinessEntity().get(0).getBusinessKey());
-                Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getNodeID(), afterNode2.getOperationalInfo().get(0).getNodeID());
-                //confirm that the entity now belongs to sam
+                        }
+                        //confirm we're replicated correctly
+                        Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getAuthorizedName(), afterNode2.getOperationalInfo().get(0).getAuthorizedName());
+                        Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getEntityKey(), afterNode2.getOperationalInfo().get(0).getEntityKey());
+                        Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getEntityKey(), saveBusiness.getBusinessEntity().get(0).getBusinessKey());
+                        Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getNodeID(), afterNode2.getOperationalInfo().get(0).getNodeID());
+                        //confirm that the entity now belongs to sam
 
-                Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getAuthorizedName(), TckPublisher.getSamPublisherId());
-                Assert.assertNotEquals(beforeNode1.getOperationalInfo().get(0).getNodeID(), afterNode1.getOperationalInfo().get(0).getNodeID());
+                        Assert.assertEquals(afterNode1.getOperationalInfo().get(0).getAuthorizedName(), TckPublisher.getSamPublisherId());
+                        Assert.assertNotEquals(beforeNode1.getOperationalInfo().get(0).getNodeID(), afterNode1.getOperationalInfo().get(0).getNodeID());
 
+                } finally {
+                        resetTmodels();
+                        resetBusinesses();
+                }
         }
 
         /**
@@ -447,7 +466,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
          * @throws Exception
          */
         @Test
-
+        @Ignore
         public void testReplicationTModelBusinessPublisherAssertionAddDelete() throws Exception {
                 Assume.assumeTrue(TckPublisher.isReplicationEnabled());
                 Assume.assumeTrue(TckPublisher.isJUDDI());
@@ -455,7 +474,8 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                         TckCommon.PrintMarker();
                         logger.info("testReplicationTModelBusinessPublisherAssertionAddDelete");
 
-                        restTmodels();
+                        resetTmodels();
+                        resetBusinesses();
 
                         TModel saveMaryPublisherTmodel = maryTModelNode1.saveMaryPublisherTmodel(maryTokenNode1);
 
@@ -476,7 +496,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                         while (timeout > 0) {
                                 logger.info("Waiting for the update...");
                                 try {
-                                        tModelDetail = inquirySam.getTModelDetail(findTModel);
+                                        tModelDetail = inquirySamNode2.getTModelDetail(findTModel);
                                         break;
                                 } catch (Exception ex) {
                                         logger.warn(ex.getMessage());
@@ -503,7 +523,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                         while (timeout > 0) {
                                 logger.info("Waiting for the update...");
                                 try {
-                                        businessDetail = inquirySam.getBusinessDetail(gbd);
+                                        businessDetail = inquirySamNode2.getBusinessDetail(gbd);
                                         break;
                                 } catch (Exception ex) {
                                         logger.warn(ex.getMessage());
@@ -528,12 +548,12 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                         AddPublisherAssertions apa = new AddPublisherAssertions();
                         apa.setAuthInfo(samTokenNode2);
                         apa.getPublisherAssertion().add(pa);
-                        publishSam.addPublisherAssertions(apa);
+                        publishSamNode2.addPublisherAssertions(apa);
 
                         logger.info("Confirming that the assertion is saved on node2 (sam, origin)");
                         List<AssertionStatusItem> assertionStatusReport = null;
                         boolean found = false;
-                        assertionStatusReport = publishSam.getAssertionStatusReport(samTokenNode2, null);
+                        assertionStatusReport = publishSamNode2.getAssertionStatusReport(samTokenNode2, null);
                         logger.info("Publisher assertions returned: " + assertionStatusReport.size());
                         for (int x = 0; x < assertionStatusReport.size(); x++) {
                                 JAXB.marshal(assertionStatusReport.get(x), System.out);
@@ -583,11 +603,11 @@ public class JUDDI_300_MultiNodeIntegrationTest {
 
                         }
                         Assert.assertTrue("Assertion wasn't replicated", found);
-                        
+
                         logger.info("Publisher Assertion replicated...");
                         logger.info("confirming the pa is still on node 2 origin (sam)");
                         found = false;
-                        assertionStatusReport = publishSam.getAssertionStatusReport(samTokenNode2, null);
+                        assertionStatusReport = publishSamNode2.getAssertionStatusReport(samTokenNode2, null);
                         logger.info("Publisher assertions returned: " + assertionStatusReport.size());
                         for (int x = 0; x < assertionStatusReport.size(); x++) {
                                 JAXB.marshal(assertionStatusReport.get(x), System.out);
@@ -602,16 +622,16 @@ public class JUDDI_300_MultiNodeIntegrationTest {
 
                         }
                         Assert.assertTrue("The PA is not found on node 2(origin), very strange", found);
-                        
+
                         //delete the pa
                         DeletePublisherAssertions dpa = new DeletePublisherAssertions();
                         dpa.setAuthInfo(samTokenNode2);
                         dpa.getPublisherAssertion().add(pa);
-                        String sam = TckCommon.DumpAllBusinesses(samTokenNode2, inquirySam);
+                        String sam = TckCommon.DumpAllBusinesses(samTokenNode2, inquirySamNode2);
                         String mary = TckCommon.DumpAllBusinesses(maryTokenNode1, inquiryMary);
                         logger.info("Publisher Assertion deletion...");
                         try {
-                                publishSam.deletePublisherAssertions(dpa);
+                                publishSamNode2.deletePublisherAssertions(dpa);
                         } catch (Exception ex) {
                                 ex.printStackTrace();
                                 logger.info("Sam's businesses " + sam);
@@ -663,7 +683,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                         while (timeout > 0) {
                                 logger.info("Waiting for the update...");
                                 try {
-                                        businessDetail = inquirySam.getBusinessDetail(gbd);
+                                        businessDetail = inquirySamNode2.getBusinessDetail(gbd);
 
                                 } catch (Exception ex) {
                                         logger.warn(ex.getMessage());
@@ -681,7 +701,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                         }
                         logger.info("Mary's business deletion was replicated");
 
-                        tModelDetail = inquirySam.getTModelDetail(findTModel);
+                        tModelDetail = inquirySamNode2.getTModelDetail(findTModel);
                         Assert.assertNotNull(tModelDetail);
                         Assert.assertNotNull(tModelDetail.getTModel());
                         Assert.assertNotNull(tModelDetail.getTModel().get(0));
@@ -693,7 +713,8 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 } finally {
 
                         samBizNode2.deleteSamSyndicatorBusiness(samTokenNode2);
-                        restTmodels();
+                        resetTmodels();
+                        resetBusinesses();
 
                 }
                 //check node2 for a "hidden" tmodel should be accessible via getDetails
@@ -706,32 +727,298 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 logger.info("testReplicationPublisherAssertionSet");
         }
 
+        /**
+         * covers adding and removing a service and a binding
+         *
+         * @throws Exception
+         */
         @Test
-        public void testReplicationServiceAdd() throws Exception {
+        public void testReplicationServiceBindingAddRemove() throws Exception {
                 Assume.assumeTrue(TckPublisher.isReplicationEnabled());
                 Assume.assumeTrue(TckPublisher.isJUDDI());
-                logger.info("testReplicationServiceAdd");
-        }
+                logger.info("testReplicationServiceBindingAddRemove");
 
-        @Test
-        public void testReplicationServiceDelete() throws Exception {
-                Assume.assumeTrue(TckPublisher.isReplicationEnabled());
-                Assume.assumeTrue(TckPublisher.isJUDDI());
-                logger.info("testReplicationServiceDelete");
-        }
+                try {
+                        TckCommon.PrintMarker();
 
-        @Test
-        public void testReplicationBindingAdd() throws Exception {
-                Assume.assumeTrue(TckPublisher.isReplicationEnabled());
-                Assume.assumeTrue(TckPublisher.isJUDDI());
-                logger.info("testReplicationBindingAdd");
-        }
+                        resetBusinesses();
+                        resetTmodels();
+
+                        samTModelNode2.saveSamSyndicatorTmodel(samTokenNode2);
+                        samBizNode2.saveSamSyndicatorBusiness(samTokenNode2);
+
+                        // getReplicationStatus();//block until synched
+                        //confirm sam's tmodel is on the other node
+                        GetTModelDetail findTModel = new GetTModelDetail();
+                        findTModel.setAuthInfo(maryTokenNode1);
+                        findTModel.getTModelKey().add(TckTModel.SAM_SYNDICATOR_TMODEL_KEY);
+                        TModelDetail tModelDetail = null;
+
+                        int timeout = TckPublisher.getSubscriptionTimeout();
+
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        tModelDetail = inquiryMary.getTModelDetail(findTModel);
+                                        break;
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
+                                        tModelDetail = null;
+
+                                }
+                                timeout--;
+                                Thread.sleep(1000);
+
+                        }
+
+                        Assert.assertNotNull(tModelDetail);
+                        Assert.assertNotNull(tModelDetail.getTModel());
+                        Assert.assertTrue(tModelDetail.getTModel().size() == 1);
+                        Assert.assertTrue(tModelDetail.getTModel().get(0).getTModelKey().equals(TckTModel.SAM_SYNDICATOR_TMODEL_KEY));
+
+                        GetBusinessDetail gbd = new GetBusinessDetail();
+                        gbd.setAuthInfo(maryTokenNode1);
+                        gbd.getBusinessKey().add(TckBusiness.SAM_BUSINESS_KEY);
+
+                        //confirm mary's biz made it too
+                        timeout = TckPublisher.getSubscriptionTimeout();
+                        BusinessDetail businessDetail = null;
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        businessDetail = inquiryMary.getBusinessDetail(gbd);
+                                        break;
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
+                                        businessDetail = null;
+
+                                }
+                                timeout--;
+                                Thread.sleep(1000);
+
+                        }
+
+                        Assert.assertNotNull(businessDetail);
+                        Assert.assertNotNull(businessDetail.getBusinessEntity());
+                        Assert.assertTrue(businessDetail.getBusinessEntity().get(0).getBusinessKey().equals(TckBusiness.SAM_BUSINESS_KEY));
+                        logger.info("Business replicated");
+
+                        //save a service
+                        samServiceNode2.saveSamSyndicatorService(samTokenNode2);
+
+                        GetServiceDetail gsd = new GetServiceDetail();
+                        gsd.setAuthInfo(maryTokenNode1);
+                        gsd.getServiceKey().add(TckBusinessService.SAM_SERVICE_KEY);
+
+                        //confirm sam's service made it too
+                        timeout = TckPublisher.getSubscriptionTimeout();
+                        ServiceDetail sd = null;
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        sd = inquiryMary.getServiceDetail(gsd);
+                                        break;
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
+                                        sd = null;
+
+                                }
+                                timeout--;
+                                Thread.sleep(1000);
+
+                        }
+
+                        Assert.assertNotNull(sd);
+                        Assert.assertNotNull(sd.getBusinessService());
+                        Assert.assertTrue(sd.getBusinessService().get(0).getBusinessKey().equals(TckBusiness.SAM_BUSINESS_KEY));
+                        Assert.assertTrue(sd.getBusinessService().get(0).getServiceKey().equals(TckBusinessService.SAM_SERVICE_KEY));
+                        logger.info("Service replicated");
+
+                        BindingTemplate newbt = new BindingTemplate();
+                        newbt.setServiceKey(TckBusinessService.SAM_SERVICE_KEY);
+                        newbt.setAccessPoint(new AccessPoint("http://localhost", "wsdlDeployment"));
+                        newbt.getDescription().add(new Description("a new accesspoint that's replicated!", "en"));
+                        SaveBinding saveBind = new SaveBinding();
+                        saveBind.setAuthInfo(samTokenNode2);
+                        saveBind.getBindingTemplate().add(newbt);
+                        logger.info("Binding saved");
+                        BindingDetail saveBinding = publishSamNode2.saveBinding(saveBind);
+
+                        GetBindingDetail bindingDetail = new GetBindingDetail();
+                        bindingDetail.setAuthInfo(maryTokenNode1);
+                        bindingDetail.getBindingKey().add(saveBinding.getBindingTemplate().get(0).getBindingKey());
+
+                        //confirm sam's binding made it too
+                        timeout = TckPublisher.getSubscriptionTimeout();
+                        BindingDetail savedMary = null;
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        savedMary = inquiryMary.getBindingDetail(bindingDetail);
+                                        break;
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
+                                        savedMary = null;
+
+                                }
+                                timeout--;
+                                Thread.sleep(1000);
+
+                        }
+                        Assert.assertNotNull(savedMary);
+                        Assert.assertNotNull(savedMary.getBindingTemplate());
+                        Assert.assertNotNull(savedMary.getBindingTemplate().get(0));
+                        Assert.assertEquals(savedMary.getBindingTemplate().get(0).getBindingKey(), saveBinding.getBindingTemplate().get(0).getBindingKey());
+                        Assert.assertEquals(savedMary.getBindingTemplate().get(0).getServiceKey(), saveBinding.getBindingTemplate().get(0).getServiceKey());
+                        logger.info("Binding was replicated");
+
+                        //delete the binding
+                        DeleteBinding db = new DeleteBinding();
+                        db.setAuthInfo(samTokenNode2);
+                        db.getBindingKey().add(saveBinding.getBindingTemplate().get(0).getBindingKey());
+                        publishSamNode2.deleteBinding(db);
+                        logger.info("binding deleted");
+
+                        //confirm deletion
+                        timeout = TckPublisher.getSubscriptionTimeout();
+                        BindingDetail gbindd = null;
+                        GetBindingDetail getBindingDetail = new GetBindingDetail();
+                        getBindingDetail.setAuthInfo(maryTokenNode1);
+                        getBindingDetail.getBindingKey().add(saveBinding.getBindingTemplate().get(0).getBindingKey());
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        gbindd = inquiryMary.getBindingDetail(getBindingDetail);
+
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
+                                        gbindd = null;
+                                        break;
+                                }
+                                timeout--;
+                                Thread.sleep(1000);
+
+                        }
+                        //check node2 for delete biz, should be gone
+
+                        if (gbindd != null) {
+                                Assert.fail(saveBinding.getBindingTemplate().get(0).getBindingKey() + " wasn't deleted on node 1");
+                        }
+                        logger.info("binding deletion was replicated");
+
+                        //delete the service
+                        DeleteService delsvc = new DeleteService();
+                        delsvc.setAuthInfo(samTokenNode2);
+                        delsvc.getServiceKey().add(TckBusinessService.SAM_SERVICE_KEY);
+                        publishSamNode2.deleteService(delsvc);
+                        logger.info("service deleted");
+
+                        ServiceDetail sdd = null;
+                        //confirm deletion
+                        GetServiceDetail getServiceDetail = new GetServiceDetail();
+                        getServiceDetail.setAuthInfo(maryTokenNode1);
+                        getServiceDetail.getServiceKey().add(TckBusinessService.SAM_SERVICE_KEY);
+                        timeout = TckPublisher.getSubscriptionTimeout();
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        sdd = inquiryMary.getServiceDetail(getServiceDetail);
+
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
+                                        sdd = null;
+                                        break;
+                                }
+                                timeout--;
+                                Thread.sleep(1000);
+
+                        }
+                        //check node2 for delete biz, should be gone
+
+                        if (sdd != null) {
+                                Assert.fail(TckBusinessService.SAM_SERVICE_KEY + " wasn't deleted on node 1");
+                        }
+                        logger.info("service deletion was replicated");
+
+                        //clean up
+                        samBizNode2.deleteSamSyndicatorBusiness(samTokenNode2);
+                        samTModelNode2.deleteSamSyndicatorTmodel(samTokenNode2);
+
+                        //delete both
+                        timeout = TckPublisher.getSubscriptionTimeout();
+                        businessDetail = null;
+
+                        while (timeout > 0) {
+                                logger.info("Waiting for the update...");
+                                try {
+                                        businessDetail = inquiryMary.getBusinessDetail(gbd);
+
+                                } catch (Exception ex) {
+                                        logger.warn(ex.getMessage());
+                                        businessDetail = null;
+                                        break;
+                                }
+                                timeout--;
+                                Thread.sleep(1000);
+
+                        }
+                        //check node2 for delete biz, should be gone
+
+                        if (businessDetail != null) {
+                                Assert.fail(TckBusiness.SAM_BUSINESS_KEY + " wasn't deleted on node 1");
+                        }
+                        logger.info("sam's business deletion was replicated");
+
+                        tModelDetail = inquiryMary.getTModelDetail(findTModel);
+                        Assert.assertNotNull(tModelDetail);
+                        Assert.assertNotNull(tModelDetail.getTModel());
+                        Assert.assertNotNull(tModelDetail.getTModel().get(0));
+                        Assert.assertEquals(tModelDetail.getTModel().get(0).getTModelKey(), TckTModel.SAM_SYNDICATOR_TMODEL_KEY);
+                        Assert.assertEquals(tModelDetail.getTModel().get(0).isDeleted(), true);
+                        logger.info("sam's tModel was deleted(hidden) replicated");
+                        // TckCommon.PrintMarker();
+
+                } finally {
+                        /*try {
+                                DeleteBusiness db = new DeleteBusiness();
+                                db.setAuthInfo(samTokenNode2);
+                                db.getBusinessKey().add(TckBusiness.SAM_BUSINESS_KEY);
+                                publishSamNode2.deleteBusiness(db);
+                                int timeout = TckPublisher.getSubscriptionTimeout();
+                                GetBusinessDetail findTModel = new GetBusinessDetail();
+                                findTModel.setAuthInfo(maryTokenNode1);
+                                findTModel.getBusinessKey().add(TckBusiness.SAM_BUSINESS_KEY);
+                                BusinessDetail tModelDetail = null;
+                                while (timeout > 0) {
+                                        logger.info("Waiting for the update...");
+                                        try {
+                                                tModelDetail = inquiryMary.getBusinessDetail(findTModel);
+                              //  JAXB.marshal(tModelDetail, System.out);
+                                                //
+                                        } catch (Exception ex) {
+                                                logger.warn(ex.getMessage());
+                                                tModelDetail = null;
+                                                break;
+
+                                        }
+                                        timeout--;
+                                        try {
+                                                Thread.sleep(1000);
+                                        } catch (InterruptedException ex) {
+
+                                        }
+
+                                }
+                                Assert.assertNull(tModelDetail);
+
+                        } catch (Exception ex) {
+                                ex.printStackTrace();
+                                Assert.fail(ex.getMessage());
+                        }*/
+                        resetTmodels();
+
+                }
 
-        @Test
-        public void testReplicationBindingDelete() throws Exception {
-                Assume.assumeTrue(TckPublisher.isReplicationEnabled());
-                Assume.assumeTrue(TckPublisher.isJUDDI());
-                logger.info("testReplicationBindingDelete");
         }
 
         /**
@@ -770,15 +1057,16 @@ public class JUDDI_300_MultiNodeIntegrationTest {
 
         }
 
-        private void restTmodels() {
+        private void resetTmodels() {
 
-                logger.info("resting tmodels");
+                logger.info("resetting tmodels");
                 DeleteTModel dtm = new DeleteTModel();
                 dtm.setAuthInfo(rootNode1Token);
                 dtm.getTModelKey().add(TckTModel.MARY_PUBLISHER_TMODEL_KEY);
                 try {
                         juddiApiServiceNode1.adminDeleteTModel(dtm);
                         logger.info("Node1 mary deleted");
+                        waitForTModelAdminDeletion(dtm.getTModelKey().get(0), inquirySamNode2, samTokenNode2);
                 } catch (Exception ex) {
                         logger.info("unable to delete tmodel " + ex.getMessage());
                 }
@@ -789,6 +1077,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 try {
                         juddiApiServiceNode1.adminDeleteTModel(dtm);
                         logger.info("Node1 joe deleted");
+                        waitForTModelAdminDeletion(dtm.getTModelKey().get(0), inquirySamNode2, samTokenNode2);
                 } catch (Exception ex) {
                         logger.info("unable to delete tmodel " + ex.getMessage());
                 }
@@ -799,6 +1088,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 try {
                         juddiApiServiceNode1.adminDeleteTModel(dtm);
                         logger.info("Node1 sam deleted");
+                        waitForTModelAdminDeletion(dtm.getTModelKey().get(0), inquirySamNode2, samTokenNode2);
                 } catch (Exception ex) {
                         logger.info("unable to delete tmodel " + ex.getMessage());
                 }
@@ -809,6 +1099,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 try {
                         juddiApiServiceNode2.adminDeleteTModel(dtm);
                         logger.info("Node2 mary deleted");
+                        waitForTModelAdminDeletion(dtm.getTModelKey().get(0), inquiryMary, maryTokenNode1);
                 } catch (Exception ex) {
                         logger.info("unable to delete tmodel " + ex.getMessage());
                 }
@@ -819,6 +1110,7 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 try {
                         juddiApiServiceNode2.adminDeleteTModel(dtm);
                         logger.info("Node2 joe deleted");
+                        waitForTModelAdminDeletion(dtm.getTModelKey().get(0), inquiryMary, maryTokenNode1);
                 } catch (Exception ex) {
                         logger.info("unable to delete tmodel " + ex.getMessage());
                 }
@@ -829,9 +1121,97 @@ public class JUDDI_300_MultiNodeIntegrationTest {
                 try {
                         juddiApiServiceNode2.adminDeleteTModel(dtm);
                         logger.info("Node2 sam deleted");
+                        waitForTModelAdminDeletion(dtm.getTModelKey().get(0), inquiryMary, maryTokenNode1);
                 } catch (Exception ex) {
                         logger.info("unable to delete tmodel " + ex.getMessage());
                 }
         }
 
+        private void resetBusinesses() {
+                logger.info("resetting businesses");
+                DeleteBusiness dtm = new DeleteBusiness();
+                dtm.setAuthInfo(rootNode1Token);
+                dtm.getBusinessKey().add(TckBusiness.MARY_BUSINESS_KEY);
+                try {
+                        publishMary.deleteBusiness(dtm);
+                        logger.info("Node1 mary deleted");
+                } catch (Exception ex) {
+                        logger.info("unable to delete business " + ex.getMessage());
+                }
+                dtm.setAuthInfo(rootNode2Token);
+                try {
+                        publishSamNode2.deleteBusiness(dtm);
+                        logger.info("Node2 mary deleted");
+                } catch (Exception ex) {
+                        logger.info("unable to delete business " + ex.getMessage());
+                }
+
+                dtm = new DeleteBusiness();
+                dtm.setAuthInfo(rootNode1Token);
+                dtm.getBusinessKey().add(TckBusiness.JOE_BUSINESS_KEY);
+                try {
+                        publishMary.deleteBusiness(dtm);
+                        logger.info("Node1 joe deleted");
+                } catch (Exception ex) {
+                        logger.info("unable to delete business " + ex.getMessage());
+                }
+                dtm.setAuthInfo(rootNode2Token);
+                try {
+                        publishSamNode2.deleteBusiness(dtm);
+                        logger.info("Node2 joe deleted");
+                } catch (Exception ex) {
+                        logger.info("unable to delete business " + ex.getMessage());
+                }
+
+                dtm = new DeleteBusiness();
+                dtm.setAuthInfo(rootNode1Token);
+                dtm.getBusinessKey().add(TckBusiness.SAM_BUSINESS_KEY);
+                try {
+                        publishMary.deleteBusiness(dtm);
+                        logger.info("Node1 sam deleted");
+                } catch (Exception ex) {
+                        logger.info("unable to delete business " + ex.getMessage());
+                }
+                dtm.setAuthInfo(rootNode2Token);
+                try {
+                        publishSamNode2.deleteBusiness(dtm);
+                        logger.info("Node2 sam deleted");
+                } catch (Exception ex) {
+                        logger.info("unable to delete business " + ex.getMessage());
+                }
+
+        }
+
+        private void waitForTModelAdminDeletion(String tModelKey, UDDIInquiryPortType inquiry, String token) {
+
+                int timeout = TckPublisher.getSubscriptionTimeout();
+                GetTModelDetail findTModel = new GetTModelDetail();
+                findTModel.setAuthInfo(token);
+                findTModel.getTModelKey().add(tModelKey);
+                TModelDetail tModelDetail = null;
+                while (timeout > 0) {
+                        logger.info("Waiting for the update...");
+                        try {
+                                tModelDetail = inquiry.getTModelDetail(findTModel);
+                                //  JAXB.marshal(tModelDetail, System.out);
+                                //
+                        } catch (Exception ex) {
+                                logger.warn(ex.getMessage());
+                                tModelDetail = null;
+                                break;
+
+                        }
+                        timeout--;
+                        try {
+                                Thread.sleep(1000);
+                        } catch (InterruptedException ex) {
+
+                        }
+
+                }
+                Assert.assertNull("the tModel with the key " + tModelKey + " wasn't deleted", tModelDetail);
+                logger.info("******************** " + tModelKey + " confired removed at all nodes");
+
+        }
+
 }

http://git-wip-us.apache.org/repos/asf/juddi/blob/d924443c/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationBase.java
----------------------------------------------------------------------
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationBase.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationBase.java
index 70a80c0..22191e1 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationBase.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationBase.java
@@ -485,8 +485,6 @@ public abstract class UDDI_090_SubscriptionListenerIntegrationBase {
                 try {
                         reset();
 
-                        String before = TckCommon.DumpAllTModels(authInfoJoe, inquiryJoe);
-
                         tckTModelJoe.saveJoePublisherTmodel(authInfoJoe);
                         tckTModelJoe.saveTModels(authInfoJoe, TckTModel.JOE_PUBLISHER_TMODEL_XML_SUBSCRIPTION3);
                         TModel saveMaryPublisherTmodel = tckTModelMary.saveMaryPublisherTmodel(authInfoMary);
@@ -518,9 +516,6 @@ public abstract class UDDI_090_SubscriptionListenerIntegrationBase {
                         boolean found = verifyDelivery("a new description");
 
                         if (!found) {
-                                logger.warn("Test failed, dumping business list");
-                                logger.warn("BEFORE " + before);
-                                logger.warn("After " + TckCommon.DumpAllBusinesses(authInfoJoe, inquiryJoe));
                                 TckCommon.PrintMarker();
                                 Assert.fail("Notification does not contain the correct service.");
                         }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org