http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/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 2e1fdbb..98c6c15 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
@@ -14,21 +14,53 @@
  * limitations under the License.
  *
  */
-
 package org.apache.juddi.api.impl;
 
 import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.Iterator;
 import java.util.List;
-import java.util.ArrayList;
-
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.jws.WebService;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityTransaction;
 import javax.xml.bind.JAXB;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
 import javax.xml.ws.Holder;
-
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api.util.PublicationQuery;
+import org.apache.juddi.api.util.QueryStatus;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.PersistenceManager;
+import org.apache.juddi.config.Property;
+import org.apache.juddi.mapping.MappingApiToModel;
+import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.model.BindingTemplate;
+import org.apache.juddi.model.BusinessEntity;
+import org.apache.juddi.model.BusinessService;
+import org.apache.juddi.model.ChangeRecord;
+import org.apache.juddi.model.Tmodel;
+import org.apache.juddi.model.UddiEntityPublisher;
+import org.apache.juddi.query.DeletePublisherAssertionByBusinessQuery;
+import org.apache.juddi.query.FetchBusinessEntitiesQuery;
+import org.apache.juddi.query.FetchTModelsQuery;
+import org.apache.juddi.query.FindBusinessByPublisherQuery;
+import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
+import org.apache.juddi.query.FindTModelByPublisherQuery;
+import org.apache.juddi.query.TModelQuery;
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.apache.juddi.replication.ReplicationNotifier;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.apache.juddi.v3.error.FatalErrorException;
+import org.apache.juddi.validation.ValidatePublish;
 import org.uddi.api_v3.AddPublisherAssertions;
 import org.uddi.api_v3.AssertionStatusItem;
 import org.uddi.api_v3.BindingDetail;
@@ -41,6 +73,8 @@ import org.uddi.api_v3.DeleteService;
 import org.uddi.api_v3.DeleteTModel;
 import org.uddi.api_v3.GetRegisteredInfo;
 import org.uddi.api_v3.InfoSelection;
+import org.uddi.api_v3.ListDescription;
+import org.uddi.api_v3.OperationalInfo;
 import org.uddi.api_v3.PublisherAssertion;
 import org.uddi.api_v3.RegisteredInfo;
 import org.uddi.api_v3.SaveBinding;
@@ -49,885 +83,1234 @@ import org.uddi.api_v3.SaveService;
 import org.uddi.api_v3.SaveTModel;
 import org.uddi.api_v3.ServiceDetail;
 import org.uddi.api_v3.TModelDetail;
+import org.uddi.repl_v3.ChangeRecordDelete;
+import org.uddi.repl_v3.ChangeRecordDeleteAssertion;
+import org.uddi.repl_v3.ChangeRecordHide;
+import org.uddi.repl_v3.ChangeRecordIDType;
+import org.uddi.repl_v3.ChangeRecordNewData;
+import org.uddi.repl_v3.ChangeRecordPublisherAssertion;
+import org.uddi.repl_v3.FromSignatures;
 import org.uddi.v3_service.DispositionReportFaultMessage;
 import org.uddi.v3_service.UDDIPublicationPortType;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.juddi.mapping.MappingApiToModel;
-import org.apache.juddi.mapping.MappingModelToApi;
-import org.apache.juddi.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.FatalErrorException;
-import org.apache.juddi.validation.ValidatePublish;
-import org.apache.juddi.query.FetchBusinessEntitiesQuery;
-import org.apache.juddi.query.FetchTModelsQuery;
-import org.apache.juddi.query.FindBusinessByPublisherQuery;
-import org.apache.juddi.query.FindTModelByPublisherQuery;
-import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
-import org.apache.juddi.query.DeletePublisherAssertionByBusinessQuery;
-import org.apache.juddi.query.TModelQuery;
-import org.apache.juddi.model.UddiEntityPublisher;
-import org.apache.juddi.api.util.PublicationQuery;
-import org.apache.juddi.api.util.QueryStatus;
-import org.apache.juddi.config.AppConfig;
-import org.apache.juddi.config.PersistenceManager;
-import org.apache.juddi.config.Property;
-import org.apache.juddi.query.util.DynamicQuery;
-import org.apache.juddi.query.util.FindQualifiers;
-import org.uddi.api_v3.ListDescription;
 
 /**
  * This class implements the UDDI Publication Service
+ *
  * @author <a href="mailto:[email protected]";>Jeff Faath</a> (and many others)
+ * @author <a href="mailto:[email protected]";>Alex O'Ree</a> added support 
for
+ * replication and several bug fixes
  */
-@WebService(serviceName="UDDIPublicationService", 
-                       
endpointInterface="org.uddi.v3_service.UDDIPublicationPortType",
-                       targetNamespace = "urn:uddi-org:v3_service")
+@WebService(serviceName = "UDDIPublicationService",
+     endpointInterface = "org.uddi.v3_service.UDDIPublicationPortType",
+     targetNamespace = "urn:uddi-org:v3_service")
 public class UDDIPublicationImpl extends AuthenticatedService implements 
UDDIPublicationPortType {
 
         private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
         private UDDIServiceCounter serviceCounter;
-    
+
+        private static DatatypeFactory df = null;
+
         public UDDIPublicationImpl() {
-            super();
-            serviceCounter = 
ServiceCounterLifecycleResource.getServiceCounter(UDDIPublicationImpl.class);
-        }
-       
-        
-        
-       public void addPublisherAssertions(AddPublisherAssertions body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-                       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       
-                       new 
ValidatePublish(publisher).validateAddPublisherAssertions(em, body);
-       
-                       List<org.uddi.api_v3.PublisherAssertion> 
apiPubAssertionList = body.getPublisherAssertion();
-                       for (org.uddi.api_v3.PublisherAssertion apiPubAssertion 
: apiPubAssertionList) {
-                               
-                               org.apache.juddi.model.PublisherAssertion 
modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
-                               
-                               
MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
-                               
-                               org.apache.juddi.model.PublisherAssertion 
existingPubAssertion = em.find(modelPubAssertion.getClass(), 
modelPubAssertion.getId());
-                               boolean persistNewAssertion = true;
-                               if (existingPubAssertion != null) {
-                                       if 
(modelPubAssertion.getTmodelKey().equalsIgnoreCase(existingPubAssertion.getTmodelKey())
 &&
-                                               
modelPubAssertion.getKeyName().equalsIgnoreCase(existingPubAssertion.getKeyName())
 &&
-                                               
modelPubAssertion.getKeyValue().equalsIgnoreCase(existingPubAssertion.getKeyValue()))
 {
-                                               // This pub assertion is 
already been "asserted".  Simply need to set the "check" value on the existing 
(and persistent) assertion
-                                               if 
(publisher.isOwner(existingPubAssertion.getBusinessEntityByFromKey()))
-                                                       
existingPubAssertion.setFromCheck("true");
-                                               if 
(publisher.isOwner(existingPubAssertion.getBusinessEntityByToKey()))
-                                                       
existingPubAssertion.setToCheck("true");
-                                               
-                                               persistNewAssertion = false;
-                                       }
-                                       else {
+                super();
+                serviceCounter = 
ServiceCounterLifecycleResource.getServiceCounter(UDDIPublicationImpl.class);
+                if (df == null) {
+                        try {
+                                df = DatatypeFactory.newInstance();
+                        } catch (DatatypeConfigurationException ex) {
+                                logger.fatal(ex);
+                        }
+                }
+        }
+
+        @Override
+        public void addPublisherAssertions(AddPublisherAssertions body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+
+                        new 
ValidatePublish(publisher).validateAddPublisherAssertions(em, body);
+
+                        List<org.uddi.api_v3.PublisherAssertion> 
apiPubAssertionList = body.getPublisherAssertion();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (org.uddi.api_v3.PublisherAssertion 
apiPubAssertion : apiPubAssertionList) {
+
+                                org.apache.juddi.model.PublisherAssertion 
modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
+
+                                
MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
+
+                                org.apache.juddi.model.PublisherAssertion 
existingPubAssertion = em.find(modelPubAssertion.getClass(), 
modelPubAssertion.getId());
+                                boolean persistNewAssertion = true;
+                                if (existingPubAssertion != null) {
+                                        if 
(modelPubAssertion.getTmodelKey().equalsIgnoreCase(existingPubAssertion.getTmodelKey())
+                                             && 
modelPubAssertion.getKeyName().equalsIgnoreCase(existingPubAssertion.getKeyName())
+                                             && 
modelPubAssertion.getKeyValue().equalsIgnoreCase(existingPubAssertion.getKeyValue()))
 {
+                                                // This pub assertion is 
already been "asserted".  Simply need to set the "check" value on the existing 
(and persistent) assertion
+                                                if 
(publisher.isOwner(existingPubAssertion.getBusinessEntityByFromKey())) {
+                                                        
existingPubAssertion.setFromCheck("true");
+                                                }
+                                                if 
(publisher.isOwner(existingPubAssertion.getBusinessEntityByToKey())) {
+                                                        
existingPubAssertion.setToCheck("true");
+                                                }
+
+                                                persistNewAssertion = false;
+                                        } else {
                                                // Otherwise, it is a new 
relationship between these entities.  Remove the old one so the new one can be 
added.
-                                               // TODO: the model only seems 
to allow one assertion per two business (primary key is fromKey and toKey). 
Spec seems to imply as 
-                                               // many relationships as 
desired (the differentiator would be the keyedRef values).
-                                               em.remove(existingPubAssertion);
-                                       }
-                               }
-       
-                               if (persistNewAssertion) {
-                                       org.apache.juddi.model.BusinessEntity 
beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getFromKey());
-                                       org.apache.juddi.model.BusinessEntity 
beTo = em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getToKey());
-                                       
modelPubAssertion.setBusinessEntityByFromKey(beFrom);
-                                       
modelPubAssertion.setBusinessEntityByToKey(beTo);
-       
-                                       modelPubAssertion.setFromCheck("false");
-                                       modelPubAssertion.setToCheck("false");
-       
-                                       em.persist(modelPubAssertion);
-                                       
-                                       if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey()))
-                                               
modelPubAssertion.setFromCheck("true");
-                                       if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey()))
-                                               
modelPubAssertion.setToCheck("true");
-                               }
-                               
-                       }
-       
-                       tx.commit();
+                                                // TODO: the model only seems 
to allow one assertion per two business (primary key is fromKey and toKey). 
Spec seems to imply as 
+                                                // many relationships as 
desired (the differentiator would be the keyedRef values).
+                                                
em.remove(existingPubAssertion);
+                                        }
+                                }
+
+                                if (persistNewAssertion) {
+                                        org.apache.juddi.model.BusinessEntity 
beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getFromKey());
+                                        org.apache.juddi.model.BusinessEntity 
beTo = em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getToKey());
+                                        
modelPubAssertion.setBusinessEntityByFromKey(beFrom);
+                                        
modelPubAssertion.setBusinessEntityByToKey(beTo);
+
+                                        
modelPubAssertion.setFromCheck("false");
+                                        modelPubAssertion.setToCheck("false");
+
+                                        if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey())) {
+                                                
modelPubAssertion.setFromCheck("true");
+                                        }
+                                        if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey())) {
+                                                
modelPubAssertion.setToCheck("true");
+                                        }
+                                        modelPubAssertion.setModified(new 
Date());
+                                        em.persist(modelPubAssertion);
+
+                                        
changes.add(getChangeRecord_NewAssertion(apiPubAssertion, modelPubAssertion, 
node));
+
+                                }
+
+                        }
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
+
                         long procTime = System.currentTimeMillis() - startTime;
-                        
serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, 
-                                QueryStatus.SUCCESS, procTime);                
        
+                        
serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS,
+                             QueryStatus.SUCCESS, procTime);
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    
serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, 
QueryStatus.FAILED, procTime);                      
-                    throw drfm;
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, 
QueryStatus.FAILED, procTime);
+                        throw drfm;
                 } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-       public void deleteBinding(DeleteBinding body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       
-                       new 
ValidatePublish(publisher).validateDeleteBinding(em, body);
-                       
-                       List<String> entityKeyList = body.getBindingKey();
-                       for (String entityKey : entityKeyList) {
-                               Object obj = 
em.find(org.apache.juddi.model.BindingTemplate.class, entityKey);
-       
-                               
((org.apache.juddi.model.BindingTemplate)obj).getBusinessService().setModifiedIncludingChildren(new
 Date());
-                               // JUDDI-421:  now the businessEntity parent 
will have it's modifiedIncludingChildren set
-                               
((org.apache.juddi.model.BindingTemplate)obj).getBusinessService().getBusinessEntity().setModifiedIncludingChildren(new
 Date());
-                               
-                               em.remove(obj);
-                       }
-       
-                       tx.commit();
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        public void deleteBinding(DeleteBinding body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+
+                        new 
ValidatePublish(publisher).validateDeleteBinding(em, body);
+
+                        List<String> entityKeyList = body.getBindingKey();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (String entityKey : entityKeyList) {
+                                deleteBinding(entityKey, em);
+                                
changes.add(getChangeRecord_deleteBinding(entityKey, node));
+                        }
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
+
                         long procTime = System.currentTimeMillis() - startTime;
-                        serviceCounter.update(PublicationQuery.DELETE_BINDING, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        serviceCounter.update(PublicationQuery.DELETE_BINDING,
+                             QueryStatus.SUCCESS, procTime);
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.DELETE_BINDING, 
QueryStatus.FAILED, procTime);                      
-                    throw drfm;
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-       public void deleteBusiness(DeleteBusiness body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-       
-                       new 
ValidatePublish(publisher).validateDeleteBusiness(em, body);
-                       
-                       List<String> entityKeyList = body.getBusinessKey();
-                       for (String entityKey : entityKeyList) {
-                               Object obj = 
em.find(org.apache.juddi.model.BusinessEntity.class, entityKey);
-                               em.remove(obj);
-                       }
-       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        
serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.SUCCESS, 
procTime);               
+                        serviceCounter.update(PublicationQuery.DELETE_BINDING, 
QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        /**
+         * deletes the referenced object, assuming authorization rules are
+         * already processed and there is already an open transaction
+         *
+         * @param entityKey
+         * @param em
+         * @throws DispositionReportFaultMessage
+         */
+        protected void deleteBinding(String entityKey, EntityManager em) 
throws DispositionReportFaultMessage {
+
+                Object obj = 
em.find(org.apache.juddi.model.BindingTemplate.class, entityKey);
+
+                ((org.apache.juddi.model.BindingTemplate) 
obj).getBusinessService().setModifiedIncludingChildren(new Date());
+                // JUDDI-421:  now the businessEntity parent will have it's 
modifiedIncludingChildren set
+                ((org.apache.juddi.model.BindingTemplate) 
obj).getBusinessService().getBusinessEntity().setModifiedIncludingChildren(new 
Date());
+
+                em.remove(obj);
+
+        }
+
+        public void deleteBusiness(DeleteBusiness body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+
+                        new 
ValidatePublish(publisher).validateDeleteBusiness(em, body);
+
+                        List<String> entityKeyList = body.getBusinessKey();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (String entityKey : entityKeyList) {
+                                deleteBusiness(entityKey, em);
+                                
changes.add(getChangeRecord_deleteBusiness(entityKey, node));
+                        }
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.SUCCESS, 
procTime);
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.DELETE_BUSINESS, 
QueryStatus.FAILED, procTime);                      
-                    throw drfm;
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-       public void deletePublisherAssertions(DeletePublisherAssertions body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-       
-                       new 
ValidatePublish(publisher).validateDeletePublisherAssertions(em, body);
-                       
-                       List<org.uddi.api_v3.PublisherAssertion> entityList = 
body.getPublisherAssertion();
-                       for (org.uddi.api_v3.PublisherAssertion entity : 
entityList) {
-                               org.apache.juddi.model.PublisherAssertionId 
pubAssertionId = new 
org.apache.juddi.model.PublisherAssertionId(entity.getFromKey(), 
entity.getToKey());
-                               Object obj = 
em.find(org.apache.juddi.model.PublisherAssertion.class, pubAssertionId);
-                               em.remove(obj);
-                       }
-       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        
serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, 
-                                QueryStatus.SUCCESS, procTime);
+                        
serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.FAILED, 
procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        /**
+         * deletes the referenced object, assuming authorization rules are
+         * already processed and there is already an open transaction
+         *
+         * @param entityKey
+         * @param em
+         * @throws DispositionReportFaultMessage
+         */
+        protected void deleteBusiness(String key, EntityManager em) throws 
DispositionReportFaultMessage {
+                Object obj = 
em.find(org.apache.juddi.model.BusinessEntity.class, key);
+                em.remove(obj);
+        }
+
+        public void deletePublisherAssertions(DeletePublisherAssertions body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+
+                        new 
ValidatePublish(publisher).validateDeletePublisherAssertions(em, body);
+
+                        List<org.uddi.api_v3.PublisherAssertion> entityList = 
body.getPublisherAssertion();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (org.uddi.api_v3.PublisherAssertion entity : 
entityList) {
+                                deletePublisherAssertion(entity, em);
+                                
changes.add(getChangeRecord_deletePublisherAssertion(entity, node));
+                        }
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS,
+                             QueryStatus.SUCCESS, procTime);
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    
serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, 
QueryStatus.FAILED, procTime);                      
-                    throw drfm;                        
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-       public void deleteService(DeleteService body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       
-                       new 
ValidatePublish(publisher).validateDeleteService(em, body);
-                       
-                       List<String> entityKeyList = body.getServiceKey();
-                       for (String entityKey : entityKeyList) {
-                               Object obj = 
em.find(org.apache.juddi.model.BusinessService.class, entityKey);
-                               
-                               
((org.apache.juddi.model.BusinessService)obj).getBusinessEntity().setModifiedIncludingChildren(new
 Date());
-                               
-                               em.remove(obj);
-                       }
-       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        serviceCounter.update(PublicationQuery.DELETE_SERVICE, 
-                                QueryStatus.SUCCESS, procTime);
+                        
serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, 
QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        /**
+         * deletes the referenced object, assuming authorization rules are
+         * already processed and there is already an open transaction
+         *
+         * @param entityKey
+         * @param em
+         * @throws DispositionReportFaultMessage
+         */
+        protected void 
deletePublisherAssertion(org.uddi.api_v3.PublisherAssertion entity, 
EntityManager em) throws DispositionReportFaultMessage {
+                org.apache.juddi.model.PublisherAssertionId pubAssertionId = 
new org.apache.juddi.model.PublisherAssertionId(entity.getFromKey(), 
entity.getToKey());
+                Object obj = 
em.find(org.apache.juddi.model.PublisherAssertion.class, pubAssertionId);
+                em.remove(obj);
+        }
+
+        public void deleteService(DeleteService body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+
+                        new 
ValidatePublish(publisher).validateDeleteService(em, body);
+
+                        List<String> entityKeyList = body.getServiceKey();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (String entityKey : entityKeyList) {
+                                deleteService(entityKey, em);
+                                
changes.add(getChangeRecord_deleteService(entityKey, node));
+                        }
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
+                        long procTime = System.currentTimeMillis() - startTime;
+                        serviceCounter.update(PublicationQuery.DELETE_SERVICE,
+                             QueryStatus.SUCCESS, procTime);
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.DELETE_SERVICE, 
QueryStatus.FAILED, procTime);                      
-                    throw drfm;                                               
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public void deleteTModel(DeleteTModel body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-       
-                       new ValidatePublish(publisher).validateDeleteTModel(em, 
body);
-       
-                       // tModels are only lazily deleted!
-                       List<String> entityKeyList = body.getTModelKey();
-                       for (String entityKey : entityKeyList) {
-                               Object obj = 
em.find(org.apache.juddi.model.Tmodel.class, entityKey);
-                               
((org.apache.juddi.model.Tmodel)obj).setDeleted(true);
-                               
-                       }
-                       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        serviceCounter.update(PublicationQuery.DELETE_TMODEL, 
QueryStatus.SUCCESS, procTime);                      
+                        serviceCounter.update(PublicationQuery.DELETE_SERVICE, 
QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        /**
+         * deletes the referenced object, assuming authorization rules are
+         * already processed and there is already an open transaction
+         *
+         * @param entityKey
+         * @param em
+         * @throws DispositionReportFaultMessage
+         */
+        protected void deleteService(String key, EntityManager em) throws 
DispositionReportFaultMessage {
+                Object obj = 
em.find(org.apache.juddi.model.BusinessService.class, key);
+                ((org.apache.juddi.model.BusinessService) 
obj).getBusinessEntity().setModifiedIncludingChildren(new Date());
+                em.remove(obj);
+        }
+
+        public void deleteTModel(DeleteTModel body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+
+                        new 
ValidatePublish(publisher).validateDeleteTModel(em, body);
+
+                        // tModels are only lazily deleted!
+                        List<String> entityKeyList = body.getTModelKey();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (String entityKey : entityKeyList) {
+                                deleteTModel(entityKey, em);
+                                
changes.add(getChangeRecord_deleteTModel(entityKey, node));
+                        }
+
+                        tx.commit();
+
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
+                        long procTime = System.currentTimeMillis() - startTime;
+                        serviceCounter.update(PublicationQuery.DELETE_TMODEL, 
QueryStatus.SUCCESS, procTime);
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.DELETE_TMODEL, 
QueryStatus.FAILED, procTime);                      
-                    throw drfm;                                               
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public List<AssertionStatusItem> getAssertionStatusReport(String 
authInfo,
-                       CompletionStatus completionStatus)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, authInfo);
-       
-                       List<org.uddi.api_v3.AssertionStatusItem> result = 
PublicationHelper.getAssertionStatusItemList(publisher, completionStatus, em);
-       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        
serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        serviceCounter.update(PublicationQuery.DELETE_TMODEL, 
QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        /**
+         * deletes the referenced object, assuming authorization rules are
+         * already processed and there is already an open transaction
+         *
+         * @param entityKey
+         * @param em
+         * @throws DispositionReportFaultMessage
+         */
+        protected void deleteTModel(String key, EntityManager em) {
+                Object obj = em.find(org.apache.juddi.model.Tmodel.class, key);
+                ((org.apache.juddi.model.Tmodel) obj).setDeleted(true);
+        }
+
+        public List<AssertionStatusItem> getAssertionStatusReport(String 
authInfo,
+             CompletionStatus completionStatus)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, authInfo);
+
+                        List<org.uddi.api_v3.AssertionStatusItem> result = 
PublicationHelper.getAssertionStatusItemList(publisher, completionStatus, em);
+
+                        tx.commit();
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT,
+                             QueryStatus.SUCCESS, procTime);
 
-                       return result;
+                        return result;
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    
serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, 
QueryStatus.FAILED, procTime);                      
-                    throw drfm;                                               
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-       public List<PublisherAssertion> getPublisherAssertions(String authInfo)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, authInfo);
-                       
-                       List<org.uddi.api_v3.PublisherAssertion> result = new 
ArrayList<org.uddi.api_v3.PublisherAssertion>(0);
-       
-                       List<?> businessKeysFound = null;
-                       businessKeysFound = 
FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
-                       
-                       List<org.apache.juddi.model.PublisherAssertion> 
pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, 
businessKeysFound, null);
-                        if (pubAssertionList!=null)
-                       for(org.apache.juddi.model.PublisherAssertion 
modelPubAssertion : pubAssertionList) {
-                               org.uddi.api_v3.PublisherAssertion 
apiPubAssertion = new org.uddi.api_v3.PublisherAssertion();
-       
-                               
MappingModelToApi.mapPublisherAssertion(modelPubAssertion, apiPubAssertion);
-                               
-                               result.add(apiPubAssertion);
-                       }
-                       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        
serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS, 
-                                QueryStatus.SUCCESS, procTime);                
      
-                       return result;
+                        
serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, 
QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        public List<PublisherAssertion> getPublisherAssertions(String authInfo)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, authInfo);
+
+                        List<org.uddi.api_v3.PublisherAssertion> result = new 
ArrayList<org.uddi.api_v3.PublisherAssertion>(0);
+
+                        List<?> businessKeysFound = null;
+                        businessKeysFound = 
FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
+
+                        List<org.apache.juddi.model.PublisherAssertion> 
pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, 
businessKeysFound, null);
+                        if (pubAssertionList != null) {
+                                for (org.apache.juddi.model.PublisherAssertion 
modelPubAssertion : pubAssertionList) {
+                                        org.uddi.api_v3.PublisherAssertion 
apiPubAssertion = new org.uddi.api_v3.PublisherAssertion();
+
+                                        
MappingModelToApi.mapPublisherAssertion(modelPubAssertion, apiPubAssertion);
+
+                                        result.add(apiPubAssertion);
+                                }
+                        }
+
+                        tx.commit();
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
+                             QueryStatus.SUCCESS, procTime);
+                        return result;
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    
serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS, 
-                            QueryStatus.FAILED, procTime);                     
 
-                    throw drfm;                                                
                
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public RegisteredInfo getRegisteredInfo(GetRegisteredInfo body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       
-                       new 
ValidatePublish(publisher).validateRegisteredInfo(body);
-
-                       List<?> businessKeysFound = null;
-                       businessKeysFound = 
FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
-       
-                       
-                       List<?> tmodelKeysFound = null;
-
-                       if 
(body.getInfoSelection().equals(InfoSelection.HIDDEN))
-                               tmodelKeysFound = 
FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new 
DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted",  Boolean.TRUE, 
DynamicQuery.PREDICATE_EQUALS));
-                       else if 
(body.getInfoSelection().equals(InfoSelection.VISIBLE))
-                               tmodelKeysFound = 
FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new 
DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted",  Boolean.FALSE, 
DynamicQuery.PREDICATE_EQUALS));
-                       else
-                               tmodelKeysFound = 
FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound);
-                               
-                       RegisteredInfo result = new RegisteredInfo();
-                       
-                       // Sort and retrieve the final results
-                       List<?> queryResults = 
FetchBusinessEntitiesQuery.select(em, new FindQualifiers(), businessKeysFound, 
null, null, null);
-                       if (queryResults.size() > 0) {
-                               result.setBusinessInfos(new 
org.uddi.api_v3.BusinessInfos());
-                               
-                               for (Object item : queryResults) {
-                                       org.apache.juddi.model.BusinessEntity 
modelBusinessEntity = (org.apache.juddi.model.BusinessEntity)item;
-                                       org.uddi.api_v3.BusinessInfo 
apiBusinessInfo = new org.uddi.api_v3.BusinessInfo();
-                                       
-                                       
MappingModelToApi.mapBusinessInfo(modelBusinessEntity, apiBusinessInfo);
-                                       
-                                       
result.getBusinessInfos().getBusinessInfo().add(apiBusinessInfo);
-                               }
-                       }
-       
-                       // Sort and retrieve the final results
-                       queryResults = FetchTModelsQuery.select(em, new 
FindQualifiers(), tmodelKeysFound, null, null, null);
-                       if (queryResults.size() > 0) {
-                               result.setTModelInfos(new 
org.uddi.api_v3.TModelInfos());
-                               
-                               for (Object item : queryResults) {
-                                       org.apache.juddi.model.Tmodel 
modelTModel = (org.apache.juddi.model.Tmodel)item;
-                                       org.uddi.api_v3.TModelInfo 
apiTModelInfo = new org.uddi.api_v3.TModelInfo();
-                                       
-                                       
MappingModelToApi.mapTModelInfo(modelTModel, apiTModelInfo);
-                                       
-                                       
result.getTModelInfos().getTModelInfo().add(apiTModelInfo);
-                               }
-                       }
-                       
-                       tx.commit();    
                         long procTime = System.currentTimeMillis() - startTime;
-                        
serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        
serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
+                             QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        public RegisteredInfo getRegisteredInfo(GetRegisteredInfo body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+
+                        new 
ValidatePublish(publisher).validateRegisteredInfo(body);
+
+                        List<?> businessKeysFound = null;
+                        businessKeysFound = 
FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
 
-                       return result;
+                        List<?> tmodelKeysFound = null;
+
+                        if 
(body.getInfoSelection().equals(InfoSelection.HIDDEN)) {
+                                tmodelKeysFound = 
FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new 
DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted", Boolean.TRUE, 
DynamicQuery.PREDICATE_EQUALS));
+                        } else if 
(body.getInfoSelection().equals(InfoSelection.VISIBLE)) {
+                                tmodelKeysFound = 
FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new 
DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted", Boolean.FALSE, 
DynamicQuery.PREDICATE_EQUALS));
+                        } else {
+                                tmodelKeysFound = 
FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound);
+                        }
+
+                        RegisteredInfo result = new RegisteredInfo();
+
+                        // Sort and retrieve the final results
+                        List<?> queryResults = 
FetchBusinessEntitiesQuery.select(em, new FindQualifiers(), businessKeysFound, 
null, null, null);
+                        if (queryResults.size() > 0) {
+                                result.setBusinessInfos(new 
org.uddi.api_v3.BusinessInfos());
+
+                                for (Object item : queryResults) {
+                                        org.apache.juddi.model.BusinessEntity 
modelBusinessEntity = (org.apache.juddi.model.BusinessEntity) item;
+                                        org.uddi.api_v3.BusinessInfo 
apiBusinessInfo = new org.uddi.api_v3.BusinessInfo();
+
+                                        
MappingModelToApi.mapBusinessInfo(modelBusinessEntity, apiBusinessInfo);
+
+                                        
result.getBusinessInfos().getBusinessInfo().add(apiBusinessInfo);
+                                }
+                        }
+
+                        // Sort and retrieve the final results
+                        queryResults = FetchTModelsQuery.select(em, new 
FindQualifiers(), tmodelKeysFound, null, null, null);
+                        if (queryResults.size() > 0) {
+                                result.setTModelInfos(new 
org.uddi.api_v3.TModelInfos());
+
+                                for (Object item : queryResults) {
+                                        org.apache.juddi.model.Tmodel 
modelTModel = (org.apache.juddi.model.Tmodel) item;
+                                        org.uddi.api_v3.TModelInfo 
apiTModelInfo = new org.uddi.api_v3.TModelInfo();
+
+                                        
MappingModelToApi.mapTModelInfo(modelTModel, apiTModelInfo);
+
+                                        
result.getTModelInfos().getTModelInfo().add(apiTModelInfo);
+                                }
+                        }
+
+                        tx.commit();
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
+                             QueryStatus.SUCCESS, procTime);
+
+                        return result;
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO, 
-                            QueryStatus.FAILED, procTime);                     
 
-                    throw drfm;                                                
                 
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public BindingDetail saveBinding(SaveBinding body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-                       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       publisher.populateKeyGeneratorKeys(em);
-                       ValidatePublish validator = new 
ValidatePublish(publisher);
-                       validator.validateSaveBinding(em, body, null, 
publisher);
-       
-                       BindingDetail result = new BindingDetail();
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
+                             QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        public BindingDetail saveBinding(SaveBinding body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+                        publisher.populateKeyGeneratorKeys(em);
+                        ValidatePublish validator = new 
ValidatePublish(publisher);
+                        validator.validateSaveBinding(em, body, null, 
publisher);
+
+                        BindingDetail result = new BindingDetail();
                         result.setListDescription(new ListDescription());
-                       List<org.uddi.api_v3.BindingTemplate> 
apiBindingTemplateList = body.getBindingTemplate();
-                       for (org.uddi.api_v3.BindingTemplate apiBindingTemplate 
: apiBindingTemplateList) {
-                               
-                               org.apache.juddi.model.BindingTemplate 
modelBindingTemplate = new org.apache.juddi.model.BindingTemplate();
-                                
-                               org.apache.juddi.model.BusinessService 
modelBusinessService = new org.apache.juddi.model.BusinessService();
-                               
modelBusinessService.setEntityKey(apiBindingTemplate.getServiceKey());
-                               
-                               
MappingApiToModel.mapBindingTemplate(apiBindingTemplate, modelBindingTemplate, 
modelBusinessService);
-       
-                               setOperationalInfo(em, modelBindingTemplate, 
publisher, false);
-       
-                               em.persist(modelBindingTemplate);
-                               
-                               
result.getBindingTemplate().add(apiBindingTemplate);
-                                
result.getListDescription().setActualCount(result.getListDescription().getActualCount()+1);
-                                
result.getListDescription().setIncludeCount(result.getListDescription().getIncludeCount()+1);
-                               validator.validateSaveBindingMax(em, 
modelBindingTemplate.getBusinessService().getEntityKey());
-                       }
-       
-                       tx.commit();
+                        List<org.uddi.api_v3.BindingTemplate> 
apiBindingTemplateList = body.getBindingTemplate();
+                        List<org.apache.juddi.model.ChangeRecord> changes = 
new ArrayList<ChangeRecord>();
+
+                        for (org.uddi.api_v3.BindingTemplate 
apiBindingTemplate : apiBindingTemplateList) {
+
+                                org.apache.juddi.model.BindingTemplate 
modelBindingTemplate = new org.apache.juddi.model.BindingTemplate();
+
+                                org.apache.juddi.model.BusinessService 
modelBusinessService = new org.apache.juddi.model.BusinessService();
+                                
modelBusinessService.setEntityKey(apiBindingTemplate.getServiceKey());
+
+                                
MappingApiToModel.mapBindingTemplate(apiBindingTemplate, modelBindingTemplate, 
modelBusinessService);
+
+                                setOperationalInfo(em, modelBindingTemplate, 
publisher, false);
+
+                                em.persist(modelBindingTemplate);
+
+                                
result.getBindingTemplate().add(apiBindingTemplate);
+                                
result.getListDescription().setActualCount(result.getListDescription().getActualCount()
 + 1);
+                                
result.getListDescription().setIncludeCount(result.getListDescription().getIncludeCount()
 + 1);
+                                validator.validateSaveBindingMax(em, 
modelBindingTemplate.getBusinessService().getEntityKey());
+                                
changes.add(getChangeRecord(modelBindingTemplate, apiBindingTemplate, node));
+                        }
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
                         long procTime = System.currentTimeMillis() - startTime;
-                        serviceCounter.update(PublicationQuery.SAVE_BINDING, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        serviceCounter.update(PublicationQuery.SAVE_BINDING,
+                             QueryStatus.SUCCESS, procTime);
 
-                       return result;
+                        return result;
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.SAVE_BINDING, 
-                            QueryStatus.FAILED, procTime);                     
 
-                    throw drfm;                                                
                 
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public BusinessDetail saveBusiness(SaveBusiness body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-               if (!body.getBusinessEntity().isEmpty()) {
-                log.debug("Inbound save business request for key " + 
body.getBusinessEntity().get(0).getBusinessKey());
-                 }
+                        long procTime = System.currentTimeMillis() - startTime;
+                        serviceCounter.update(PublicationQuery.SAVE_BINDING,
+                             QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        public BusinessDetail saveBusiness(SaveBusiness body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+                if (!body.getBusinessEntity().isEmpty()) {
+                        log.debug("Inbound save business request for key " + 
body.getBusinessEntity().get(0).getBusinessKey());
+                }
                 EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-                       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       publisher.populateKeyGeneratorKeys(em);
-                       ValidatePublish validator = new 
ValidatePublish(publisher);
-                       validator.validateSaveBusiness(em, body, null, 
publisher);
-       
-                       BusinessDetail result = new BusinessDetail();
-                       
-                       List<org.uddi.api_v3.BusinessEntity> 
apiBusinessEntityList = body.getBusinessEntity();
-                       for (org.uddi.api_v3.BusinessEntity apiBusinessEntity : 
apiBusinessEntityList) {
-                               
-                               org.apache.juddi.model.BusinessEntity 
modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
-                               
-                               
MappingApiToModel.mapBusinessEntity(apiBusinessEntity, modelBusinessEntity);
-
-                               setOperationalInfo(em, modelBusinessEntity, 
publisher);
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+                        publisher.populateKeyGeneratorKeys(em);
+                        ValidatePublish validator = new 
ValidatePublish(publisher);
+                        validator.validateSaveBusiness(em, body, null, 
publisher);
+
+                        BusinessDetail result = new BusinessDetail();
+
+                        List<org.uddi.api_v3.BusinessEntity> 
apiBusinessEntityList = body.getBusinessEntity();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+
+                        for (org.uddi.api_v3.BusinessEntity apiBusinessEntity 
: apiBusinessEntityList) {
+
+                                org.apache.juddi.model.BusinessEntity 
modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
+
+                                
MappingApiToModel.mapBusinessEntity(apiBusinessEntity, modelBusinessEntity);
+
+                                setOperationalInfo(em, modelBusinessEntity, 
publisher);
                                 log.debug("Saving business " + 
modelBusinessEntity.getEntityKey());
-       
-                               em.persist(modelBusinessEntity);
-       
-                               
result.getBusinessEntity().add(apiBusinessEntity);
-                       }
-                       
-                       //check how many business this publisher owns.
-                       validator.validateSaveBusinessMax(em);
-       
-                       tx.commit();
+
+                                em.persist(modelBusinessEntity);
+                                
changes.add(getChangeRecord(modelBusinessEntity, apiBusinessEntity, node));
+                                
result.getBusinessEntity().add(apiBusinessEntity);
+                        }
+
+                        //check how many business this publisher owns.
+                        validator.validateSaveBusinessMax(em);
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
                         long procTime = System.currentTimeMillis() - startTime;
-                        serviceCounter.update(PublicationQuery.SAVE_BUSINESS, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
+                             QueryStatus.SUCCESS, procTime);
 
-                       return result;
+                        return result;
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.SAVE_BUSINESS, 
-                            QueryStatus.FAILED, procTime);                     
 
-                    throw drfm;                                                
                        
-               } catch (Exception ex){
+                        long procTime = System.currentTimeMillis() - startTime;
+                        serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
+                             QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } catch (Exception ex) {
                         StringWriter sw = new StringWriter();
-                        if (body!=null)
-                        JAXB.marshal(body, sw);
-                  log.fatal("unexpected error!" + sw.toString(), ex);
-                  throw new FatalErrorException(new 
ErrorMessage("E_fatalError", ex.getMessage()));
+                        if (body != null) {
+                                JAXB.marshal(body, sw);
+                        }
+                        log.fatal("unexpected error!" + sw.toString(), ex);
+                        throw new FatalErrorException(new 
ErrorMessage("E_fatalError", ex.getMessage()));
                 } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public ServiceDetail saveService(SaveService body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       publisher.populateKeyGeneratorKeys(em);
-                       ValidatePublish validator = new 
ValidatePublish(publisher);
-                       validator.validateSaveService(em, body, null, 
publisher);
-                       
-                       ServiceDetail result = new ServiceDetail();
-       
-                       List<org.uddi.api_v3.BusinessService> 
apiBusinessServiceList = body.getBusinessService();
-                       for (org.uddi.api_v3.BusinessService apiBusinessService 
: apiBusinessServiceList) {
-                               
-                               org.apache.juddi.model.BusinessService 
modelBusinessService = new org.apache.juddi.model.BusinessService();
-                               org.apache.juddi.model.BusinessEntity 
modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
-                               
modelBusinessEntity.setEntityKey(apiBusinessService.getBusinessKey());
-                               
-                               
MappingApiToModel.mapBusinessService(apiBusinessService, modelBusinessService, 
modelBusinessEntity);
-       
-                               setOperationalInfo(em, modelBusinessService, 
publisher, false);
-
-                               em.persist(modelBusinessService);
-                               
-                               
result.getBusinessService().add(apiBusinessService);
-                               
-                               validator.validateSaveServiceMax(em, 
modelBusinessService.getBusinessEntity().getEntityKey());
-                       }
-                       
-                       
-                       tx.commit();
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        public ServiceDetail saveService(SaveService body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+                        publisher.populateKeyGeneratorKeys(em);
+                        ValidatePublish validator = new 
ValidatePublish(publisher);
+                        validator.validateSaveService(em, body, null, 
publisher);
+
+                        ServiceDetail result = new ServiceDetail();
+
+                        List<org.uddi.api_v3.BusinessService> 
apiBusinessServiceList = body.getBusinessService();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (org.uddi.api_v3.BusinessService 
apiBusinessService : apiBusinessServiceList) {
+
+                                org.apache.juddi.model.BusinessService 
modelBusinessService = new org.apache.juddi.model.BusinessService();
+                                org.apache.juddi.model.BusinessEntity 
modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
+                                
modelBusinessEntity.setEntityKey(apiBusinessService.getBusinessKey());
+
+                                
MappingApiToModel.mapBusinessService(apiBusinessService, modelBusinessService, 
modelBusinessEntity);
+
+                                setOperationalInfo(em, modelBusinessService, 
publisher, false);
+
+                                em.persist(modelBusinessService);
+
+                                
result.getBusinessService().add(apiBusinessService);
+                                
changes.add(getChangeRecord(modelBusinessService, apiBusinessService, node));
+                                validator.validateSaveServiceMax(em, 
modelBusinessService.getBusinessEntity().getEntityKey());
+                        }
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
                         long procTime = System.currentTimeMillis() - startTime;
-                        serviceCounter.update(PublicationQuery.SAVE_SERVICE, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        serviceCounter.update(PublicationQuery.SAVE_SERVICE,
+                             QueryStatus.SUCCESS, procTime);
 
-                       return result;
+                        return result;
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.SAVE_SERVICE, 
-                            QueryStatus.FAILED, procTime);                     
 
-                    throw drfm;                                                
                                                
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public TModelDetail saveTModel(SaveTModel body)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
-                       publisher.populateKeyGeneratorKeys(em);
-                       new ValidatePublish(publisher).validateSaveTModel(em, 
body, null, publisher);
-       
-                       TModelDetail result = new TModelDetail();
-       
-                       List<org.uddi.api_v3.TModel> apiTModelList = 
body.getTModel();
-                       for (org.uddi.api_v3.TModel apiTModel : apiTModelList) {
-                               
-                               org.apache.juddi.model.Tmodel modelTModel = new 
org.apache.juddi.model.Tmodel();
-                               
-                               MappingApiToModel.mapTModel(apiTModel, 
modelTModel);
-       
-                               setOperationalInfo(em, modelTModel, publisher);
-       
-                               em.persist(modelTModel);
-                               
-                               result.getTModel().add(apiTModel);
-                               
-                       }
-       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        serviceCounter.update(PublicationQuery.SAVE_TMODEL, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        serviceCounter.update(PublicationQuery.SAVE_SERVICE,
+                             QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        public TModelDetail saveTModel(SaveTModel body)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, body.getAuthInfo());
+                        publisher.populateKeyGeneratorKeys(em);
+                        new ValidatePublish(publisher).validateSaveTModel(em, 
body, null, publisher);
+
+                        TModelDetail result = new TModelDetail();
+
+                        List<org.uddi.api_v3.TModel> apiTModelList = 
body.getTModel();
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (org.uddi.api_v3.TModel apiTModel : apiTModelList) 
{
+
+                                org.apache.juddi.model.Tmodel modelTModel = 
new org.apache.juddi.model.Tmodel();
+
+                                MappingApiToModel.mapTModel(apiTModel, 
modelTModel);
+
+                                setOperationalInfo(em, modelTModel, publisher);
+
+                                em.persist(modelTModel);
+
+                                result.getTModel().add(apiTModel);
+                                changes.add(getChangeRecord(modelTModel, 
apiTModel, node));
+
+                        }
+
+                        tx.commit();
+                        for (int i = 0; i < changes.size(); i++) {
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        }
+                        long procTime = System.currentTimeMillis() - startTime;
+                        serviceCounter.update(PublicationQuery.SAVE_TMODEL,
+                             QueryStatus.SUCCESS, procTime);
 
-                       return result;
+                        return result;
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    serviceCounter.update(PublicationQuery.SAVE_TMODEL, 
-                            QueryStatus.FAILED, procTime);                     
 
-                    throw drfm;                                                
                                                 
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-
-       public void setPublisherAssertions(String authInfo,
-                       Holder<List<PublisherAssertion>> publisherAssertion)
-                       throws DispositionReportFaultMessage {
-               long startTime = System.currentTimeMillis();
-
-               EntityManager em = PersistenceManager.getEntityManager();
-               EntityTransaction tx = em.getTransaction();
-               try {
-                       tx.begin();
-       
-                       UddiEntityPublisher publisher = 
this.getEntityPublisher(em, authInfo);
-                       
-                       new 
ValidatePublish(publisher).validateSetPublisherAssertions(em, 
publisherAssertion);
-                       
-                       List<?> businessKeysFound = null;
-                       businessKeysFound = 
FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
-       
-                       // First, wipe out all previous assertions associated 
with this publisher
-                       DeletePublisherAssertionByBusinessQuery.delete(em, 
businessKeysFound);
-                       
-                       // Slate is clean for all assertions involving this 
publisher, now we simply need to add the new ones (and they will all be "new").
-                       List<org.uddi.api_v3.PublisherAssertion> 
apiPubAssertionList = publisherAssertion.value;
-                       for (org.uddi.api_v3.PublisherAssertion apiPubAssertion 
: apiPubAssertionList) {
-                               
-                               org.apache.juddi.model.PublisherAssertion 
modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
-                               
-                               
MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
-                               
-                               org.apache.juddi.model.BusinessEntity beFrom = 
em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getFromKey());
-                               org.apache.juddi.model.BusinessEntity beTo = 
em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getToKey());
-                               
modelPubAssertion.setBusinessEntityByFromKey(beFrom);
-                               
modelPubAssertion.setBusinessEntityByToKey(beTo);
-                               
-                               modelPubAssertion.setFromCheck("false");
-                               modelPubAssertion.setToCheck("false");
-                               
-                               em.persist(modelPubAssertion);
-       
-                               if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey()))
-                                       modelPubAssertion.setFromCheck("true");
-                               if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey()))
-                                       modelPubAssertion.setToCheck("true");
-                               
-                       }
-       
-                       tx.commit();
                         long procTime = System.currentTimeMillis() - startTime;
-                        
serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS, 
-                                QueryStatus.SUCCESS, procTime);                
      
+                        serviceCounter.update(PublicationQuery.SAVE_TMODEL,
+                             QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        @Override
+        public void setPublisherAssertions(String authInfo,
+             Holder<List<PublisherAssertion>> publisherAssertion)
+             throws DispositionReportFaultMessage {
+                long startTime = System.currentTimeMillis();
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = em.getTransaction();
+                try {
+                        tx.begin();
+
+                        UddiEntityPublisher publisher = 
this.getEntityPublisher(em, authInfo);
+
+                        new 
ValidatePublish(publisher).validateSetPublisherAssertions(em, 
publisherAssertion);
+
+                        List<?> businessKeysFound = null;
+                        businessKeysFound = 
FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
+
+                        //TODO this has to be reworked to record what was 
deleted.
+                        
+                        // First, wipe out all previous assertions associated 
with this publisher
+                        DeletePublisherAssertionByBusinessQuery.delete(em, 
businessKeysFound);
+
+                        // Slate is clean for all assertions involving this 
publisher, now we simply need to add the new ones (and they will all be "new").
+                        List<org.uddi.api_v3.PublisherAssertion> 
apiPubAssertionList = publisherAssertion.value;
+
+                        List<ChangeRecord> changes = new 
ArrayList<ChangeRecord>();
+                        for (org.uddi.api_v3.PublisherAssertion 
apiPubAssertion : apiPubAssertionList) {
+
+                                org.apache.juddi.model.PublisherAssertion 
modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
+
+                                
MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
+
+                                org.apache.juddi.model.BusinessEntity beFrom = 
em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getFromKey());
+                                org.apache.juddi.model.BusinessEntity beTo = 
em.find(org.apache.juddi.model.BusinessEntity.class, 
modelPubAssertion.getId().getToKey());
+                                
modelPubAssertion.setBusinessEntityByFromKey(beFrom);
+                                
modelPubAssertion.setBusinessEntityByToKey(beTo);
+
+                                modelPubAssertion.setFromCheck("false");
+                                modelPubAssertion.setToCheck("false");
+
+                                
+                                if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey())) {
+                                        modelPubAssertion.setFromCheck("true");
+                                }
+                                if 
(publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey())) {
+                                        modelPubAssertion.setToCheck("true");
+                                }
+                                em.persist(modelPubAssertion);
+
+                                
+                                
changes.add(getChangeRecord_NewAssertion(apiPubAssertion, modelPubAssertion, 
node));
+
+                        }
+
+                        tx.commit();
+                        for (int i=0; i < changes.size(); i++)
+                                ReplicationNotifier.Enqueue(changes.get(i));
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
+                             QueryStatus.SUCCESS, procTime);
                 } catch (DispositionReportFaultMessage drfm) {
-                    long procTime = System.currentTimeMillis() - startTime;
-                    
serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS, 
-                            QueryStatus.FAILED, procTime);                     
 
-                    throw drfm;                                                
                                                 
-               } finally {
-                       if (tx.isActive()) {
-                               tx.rollback();
-                       }
-                       em.close();
-               }
-       }
-
-       private void setOperationalInfo(EntityManager em, 
org.apache.juddi.model.BusinessEntity uddiEntity, UddiEntityPublisher 
publisher) throws DispositionReportFaultMessage {
-
-               uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-
-               Date now = new Date();
-               uddiEntity.setModified(now);
-               uddiEntity.setModifiedIncludingChildren(now);
-
-               String nodeId = "";
-               try 
-               { nodeId = 
AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); } 
-               catch (ConfigurationException ce) 
-               { throw new FatalErrorException(new 
ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
-               uddiEntity.setNodeId(nodeId);
-               
-               org.apache.juddi.model.BusinessEntity existingUddiEntity = 
em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
-               if (existingUddiEntity != null)
-                       uddiEntity.setCreated(existingUddiEntity.getCreated());
-               else
-                       uddiEntity.setCreated(now);
-               
-               List<org.apache.juddi.model.BusinessService> serviceList = 
uddiEntity.getBusinessServices();
-               for (org.apache.juddi.model.BusinessService service : 
serviceList)
-                       setOperationalInfo(em, service, publisher, true);
-               
-               
-               if (existingUddiEntity != null)
-                       em.remove(existingUddiEntity);
-               
-       }
-
-       private void setOperationalInfo(EntityManager em, 
org.apache.juddi.model.BusinessService uddiEntity, UddiEntityPublisher 
publisher, boolean isChild) throws DispositionReportFaultMessage {
-
-               uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-
-               Date now = new Date();
-               uddiEntity.setModified(now);
-               uddiEntity.setModifiedIncludingChildren(now);
-               
-               if(!isChild) {
-                       org.apache.juddi.model.BusinessEntity parent = 
em.find(org.apache.juddi.model.BusinessEntity.class, 
uddiEntity.getBusinessEntity().getEntityKey());
-                       parent.setModifiedIncludingChildren(now);
-                       em.persist(parent);
-               }
-
-               String nodeId = "";
-               try 
-               { nodeId = 
AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); } 
-               catch (ConfigurationException ce) 
-               { throw new FatalErrorException(new 
ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
-               uddiEntity.setNodeId(nodeId);
-               
-               org.apache.juddi.model.BusinessService existingUddiEntity = 
em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
-               if (existingUddiEntity != null) {
-                       uddiEntity.setCreated(existingUddiEntity.getCreated());
-               }
-               else
-                       uddiEntity.setCreated(now);
-               
-               List<org.apache.juddi.model.BindingTemplate> bindingList = 
uddiEntity.getBindingTemplates();
-               for (org.apache.juddi.model.BindingTemplate binding : 
bindingList)
-                       setOperationalInfo(em, binding, publisher, true);
-               
-               
-               if (existingUddiEntity != null)
-                       em.remove(existingUddiEntity);
-               
-       }
-
-       private void setOperationalInfo(EntityManager em, 
org.apache.juddi.model.BindingTemplate uddiEntity, UddiEntityPublisher 
publisher, boolean isChild) throws DispositionReportFaultMessage {
-
-               uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-
-               Date now = new Date();
-               uddiEntity.setModified(now);
-               uddiEntity.setModifiedIncludingChildren(now);
-
-               if(!isChild) {
-                       org.apache.juddi.model.BusinessService parent = 
em.find(org.apache.juddi.model.BusinessService.class, 
uddiEntity.getBusinessService().getEntityKey());
-                       parent.setModifiedIncludingChildren(now);
-                       em.persist(parent);
-                       
-                       // JUDDI-421:  now the businessEntity parent will have 
it's modifiedIncludingChildren set
-                       org.apache.juddi.model.BusinessEntity businessParent = 
em.find(org.apache.juddi.model.BusinessEntity.class, 
parent.getBusinessEntity().getEntityKey());
-                       businessParent.setModifiedIncludingChildren(now);
-                       em.persist(businessParent);
-               }
-
-               String nodeId = "";
-               try 
-               { nodeId = 
AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); } 
-               catch (ConfigurationException ce) 
-               { throw new FatalErrorException(new 
ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
-               uddiEntity.setNodeId(nodeId);
-               
-               org.apache.juddi.model.BindingTemplate existingUddiEntity = 
em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
-               if (existingUddiEntity != null)
-                       uddiEntity.setCreated(existingUddiEntity.getCreated());
-               else
-                       uddiEntity.setCreated(now);
-               
-               if (existingUddiEntity != null)
-                       em.remove(existingUddiEntity);
-               
-       }
-       
-       private void setOperationalInfo(EntityManager em, 
org.apache.juddi.model.Tmodel uddiEntity, UddiEntityPublisher publisher) throws 
DispositionReportFaultMessage {
-
-               uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
-               
-               Date now = new Date();
-               uddiEntity.setModified(now);
-               uddiEntity.setModifiedIncludingChildren(now);
-
-               String nodeId = "";
-               try 
-               { nodeId = 
AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); } 
-               catch (ConfigurationException ce) 
-               { throw new FatalErrorException(new 
ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
-               uddiEntity.setNodeId(nodeId);
-               
-               org.apache.juddi.model.Tmodel existingUddiEntity = 
em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
-               if (existingUddiEntity != null)
-                       uddiEntity.setCreated(existingUddiEntity.getCreated());
-               else
-                       uddiEntity.setCreated(now);
-               
-               if (existingUddiEntity != null)
-                       em.remove(existingUddiEntity);
-               
-       }
-       
+                        long procTime = System.currentTimeMillis() - startTime;
+                        
serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
+                             QueryStatus.FAILED, procTime);
+                        throw drfm;
+                } finally {
+                        if (tx.isActive()) {
+                                tx.rollback();
+                        }
+                        em.close();
+                }
+        }
+
+        private void setOperationalInfo(EntityManager em, 
org.apache.juddi.model.BusinessEntity uddiEntity, UddiEntityPublisher 
publisher) throws DispositionReportFaultMessage {
+
+                uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
+
+                Date now = new Date();
+                uddiEntity.setModified(now);
+                uddiEntity.setModifiedIncludingChildren(now);
+
+                String nodeId = "";
+                try {
+                        nodeId = 
AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
+                } catch (ConfigurationException ce) {
+                        throw new FatalErrorException(new 
ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
+                }
+                uddiEntity.setNodeId(nodeId);
+
+                org.apache.juddi.model.BusinessEntity existingUddiEntity = 
em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
+                if (existingUddiEntity != null) {
+                        uddiEntity.setCreated(existingUddiEntity.getCreated());
+                } else {
+                        uddiEntity.setCreated(now);
+                }
+
+                List<org.apache.juddi.model.BusinessService> serviceList = 
uddiEntity.getBusinessServices();
+                for (org.apache.juddi.model.BusinessService service : 
serviceList) {
+                        setOperationalInfo(em, service, publisher, true);
+                }
+
+                if (existingUddiEntity != null) {
+                        em.remove(existingUddiEntity);
+                }
+
+        }
+
+        private void setOperationalInfo(EntityManager em, 
org.apache.juddi.model.BusinessService uddiEntity, UddiEntityPublisher 
publisher, boolean isChild) throws DispositionReportFaultMessage {
+
+                uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
+
+                Date now = new Date();
+                uddiEntity.setModified(now);
+                uddiEntity.setModifiedIncludingChildren(now);
+
+                if (!isChild) {
+                        org.apache.juddi.model.BusinessEntity parent = 
em.find(org.apache.juddi.model.BusinessEntity.class, 
uddiEntity.getBusinessEntity().getEntityKey());
+                        parent.setModifiedIncludingChildren(now);
+                        em.persist(parent);
+                }
+
+                String nodeId = "";
+                try {
+                        nodeId = 
AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
+                } catch (ConfigurationException ce) {
+                        throw new FatalErrorException(new 
ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
+                }
+                uddiEntity.setNodeId(nodeId);
+
+                org.apache.juddi.model.BusinessService existingUddiEntity = 
em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
+                if (existingUddiEntity != null) {
+                        uddiEntity.setCreated(existingUddiEntity.getCreated());
+                } else {
+                        uddiEntity.setCreated(now);
+                }
+
+                List<org.apache.juddi.model.BindingTemplate> bindingList = 
uddiEntity.getBindingTemplates();
+         

<TRUNCATED>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to