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]
