You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by ks...@apache.org on 2013/04/05 02:20:48 UTC
svn commit: r1464796 - in /juddi/trunk:
juddi-core/src/main/java/org/apache/juddi/api/impl/
juddi-core/src/test/java/org/apache/juddi/api/impl/
uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/
uddi-tck/src/test/java/org/apache/juddi/v3/tck/
Author: kstam
Date: Fri Apr 5 00:20:47 2013
New Revision: 1464796
URL: http://svn.apache.org/r1464796
Log:
JUDDI-573 fixing performance issue while querying for busineses with lots of services. There is no need o re-query each service in this case. This optimization brought the query time down to less then 1 second.
Added:
juddi/trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_040_BusinessServiceTestPerformance.java
Modified:
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java
juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_040_BusinessServiceLoadTest.java
juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_110_FindServicesIntegrationTest.java
Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java?rev=1464796&r1=1464795&r2=1464796&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/InquiryHelper.java Fri Apr 5 00:20:47 2013
@@ -201,6 +201,9 @@ public class InquiryHelper {
keysFound = FindBusinessByCategoryGroupQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
keysFound = FindBusinessByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
+ // If there no keys in the bag then remove the empty TModelBag
+ if (body.getTModelBag().getTModelKey().size()==0) body.setTModelBag(null);
+
return keysFound;
}
@@ -208,7 +211,6 @@ public class InquiryHelper {
return getBusinessListFromKeys(body, findQualifiers, em, keysFound, null, null, null, null);
}
- @SuppressWarnings("unchecked")
public static BusinessList getBusinessListFromKeys(FindBusiness body, FindQualifiers findQualifiers, EntityManager em, List<?> keysFound,
Date modifiedAfter, Date modifiedBefore, Holder<Integer> subscriptionStartIndex, Integer subscriptionMaxRows)
throws DispositionReportFaultMessage {
@@ -218,28 +220,8 @@ public class InquiryHelper {
result.setListDescription(listDesc);
// Sort and retrieve the final results taking paging into account
- List<?> queryResults = FetchBusinessEntitiesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
- List<?> serviceResults = null;
- for (int i = 0; i<queryResults.size(); i++) {
- org.apache.juddi.model.BusinessEntity be = (org.apache.juddi.model.BusinessEntity) queryResults.get(i);
-
- List<Object> keysIn = new ArrayList<Object>();
- List<org.apache.juddi.model.BusinessService> services = be.getBusinessServices();
- for (int j = 0; j<services.size(); j++) {
- keysIn.add(services.get(j).getEntityKey());
- }
-
- serviceResults = FindServiceByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), null, keysIn);
- if (serviceResults == null) {
- be.setBusinessServices(null);
- } else {
- ListDescription ldesc = new ListDescription();
- result.setListDescription(listDesc);
- List<?> srvcs = FetchBusinessServicesQuery.select(em, findQualifiers, serviceResults, body.getMaxRows(),
- body.getListHead(), ldesc);
- be.setBusinessServices((List<org.apache.juddi.model.BusinessService>)srvcs);
- }
- }
+ List<?> queryResults = FetchBusinessEntitiesQuery.select(
+ em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
if (queryResults != null && queryResults.size() > 0)
result.setBusinessInfos(new org.uddi.api_v3.BusinessInfos());
@@ -304,7 +286,6 @@ public class InquiryHelper {
body.setTModelBag(new TModelBag());
doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
-
keysFound = FindServiceByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getBusinessKey(), keysFound);
if (findQualifiers.isCombineCategoryBags()) {
keysFound = FindServiceByCombinedCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
@@ -347,7 +328,7 @@ public class InquiryHelper {
org.apache.juddi.model.BusinessService modelBusinessService = (org.apache.juddi.model.BusinessService)item;
org.uddi.api_v3.ServiceInfo apiServiceInfo = new org.uddi.api_v3.ServiceInfo();
- logger.info(modelBusinessService.getEntityKey() + " is modified " + modelBusinessService.getModifiedIncludingChildren() + " " + modelBusinessService.getModifiedIncludingChildren().getTime() );
+ logger.debug(modelBusinessService.getEntityKey() + " is modified " + modelBusinessService.getModifiedIncludingChildren() + " " + modelBusinessService.getModifiedIncludingChildren().getTime() );
if (modifiedAfter != null && modifiedAfter.after(modelBusinessService.getModifiedIncludingChildren())) {
currentIndex++;
continue;
Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java?rev=1464796&r1=1464795&r2=1464796&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java Fri Apr 5 00:20:47 2013
@@ -33,6 +33,7 @@ import org.apache.juddi.config.AppConfig
import org.apache.juddi.config.PersistenceManager;
import org.apache.juddi.config.Property;
import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.query.util.FindQualifiers;
import org.apache.juddi.v3.error.ErrorMessage;
import org.apache.juddi.v3.error.InvalidKeyPassedException;
import org.apache.juddi.validation.ValidateInquiry;
@@ -232,12 +233,12 @@ public class UDDIInquiryImpl extends Aut
if (keysFound.size() == 0) {
if (body.getBusinessKey() != null) {
- // Check that we were passed a valid serviceKey per
+ // Check that we were passed a valid businessKey per
// 5.1.12.4 of the UDDI v3 spec
String businessKey = body.getBusinessKey();
org.apache.juddi.model.BusinessEntity modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey);
if (modelBusinessEntity == null) {
- throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceNotFound", businessKey));
+ throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", businessKey));
}
}
}
Added: juddi/trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_040_BusinessServiceTestPerformance.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_040_BusinessServiceTestPerformance.java?rev=1464796&view=auto
==============================================================================
--- juddi/trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_040_BusinessServiceTestPerformance.java (added)
+++ juddi/trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_040_BusinessServiceTestPerformance.java Fri Apr 5 00:20:47 2013
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2001-2009 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.api.impl;
+
+import java.rmi.RemoteException;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.Registry;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.apache.juddi.v3.tck.TckBusiness;
+import org.apache.juddi.v3.tck.TckBusinessService;
+import org.apache.juddi.v3.tck.TckPublisher;
+import org.apache.juddi.v3.tck.TckSecurity;
+import org.apache.juddi.v3.tck.TckTModel;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.uddi.api_v3.BusinessList;
+import org.uddi.api_v3.FindBusiness;
+import org.uddi.api_v3.FindService;
+import org.uddi.api_v3.Name;
+import org.uddi.api_v3.ServiceList;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.v3_service.UDDISecurityPortType;
+
+/**
+ * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
+ */
+public class API_040_BusinessServiceTestPerformance
+{
+ private static Log logger = LogFactory.getLog(API_040_BusinessServiceTest.class);
+
+ private static API_010_PublisherTest api010 = new API_010_PublisherTest();
+ protected static TckTModel tckTModel = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl());
+ protected static TckBusiness tckBusiness = new TckBusiness(new UDDIPublicationImpl(), new UDDIInquiryImpl());
+ protected static TckBusinessService tckBusinessService = new TckBusinessService(new UDDIPublicationImpl(), new UDDIInquiryImpl());
+ private static UDDIInquiryImpl inquiry = new UDDIInquiryImpl();
+
+ int numberOfBusinesses=100;
+ int numberOfServices=100;
+
+ protected static String authInfoJoe = null;
+ protected static String authInfoSam = null;
+
+ @BeforeClass
+ public static void setup() throws ConfigurationException {
+ Registry.start();
+ logger.debug("Getting auth tokens..");
+ try {
+ api010.saveJoePublisher();
+ UDDISecurityPortType security = new UDDISecurityImpl();
+ authInfoJoe = TckSecurity.getAuthToken(security, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword());
+ } catch (RemoteException e) {
+ logger.error(e.getMessage(), e);
+ Assert.fail("Could not obtain authInfo token.");
+ }
+ }
+ @Test
+ public void find20Businesses() throws DispositionReportFaultMessage {
+ tckTModel.saveJoePublisherTmodel(authInfoJoe);
+ long startSave = System.currentTimeMillis();
+ //loading up 100 businesses, with a 100 services each
+ tckBusiness.saveJoePublisherBusinesses(authInfoJoe, numberOfBusinesses);
+ for (int i=0; i<numberOfBusinesses; i++) {
+ tckBusinessService.saveJoePublisherServices(authInfoJoe, i, numberOfServices);
+ }
+ long saveDuration = System.currentTimeMillis() - startSave;
+ System.out.println("Saved " + numberOfBusinesses + " businesses with each " + numberOfServices + " services in " + saveDuration + "ms");
+
+ //find 20 businesses by name
+ FindBusiness fb = new FindBusiness();
+ org.uddi.api_v3.FindQualifiers apiFq = new org.uddi.api_v3.FindQualifiers();
+ apiFq.getFindQualifier().add(FindQualifiers.APPROXIMATE_MATCH);
+ apiFq.getFindQualifier().add(FindQualifiers.CASE_INSENSITIVE_MATCH);
+ fb.setFindQualifiers(apiFq);
+ Name name = new Name();
+ name.setValue("John%");
+ fb.getName().add(name);
+ fb.setMaxRows(20);
+ long startFind = System.currentTimeMillis();
+ BusinessList result = inquiry.findBusiness(fb);
+ long findDuration = System.currentTimeMillis() - startFind;
+ System.out.println("Find 20 businesses took " + findDuration + "ms. Size=" + result.getBusinessInfos().getBusinessInfo().size());
+ // it takes less then 1 second, make sure it stays faster then 5 seconds
+ Assert.assertTrue(findDuration < 5000);
+
+ long startDelete = System.currentTimeMillis();
+ for (int i=0; i<numberOfBusinesses; i++) {
+ tckBusinessService.deleteJoePublisherServices(authInfoJoe, i, numberOfServices);
+ }
+ long deleteDuration = System.currentTimeMillis() - startDelete;
+ System.out.println("Delete all business and services in " + deleteDuration + "ms");
+ tckBusiness.deleteJoePublisherBusinesses(authInfoJoe, numberOfBusinesses);
+ tckTModel.deleteJoePublisherTmodel(authInfoJoe);
+ }
+
+}
Modified: juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java
URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java?rev=1464796&r1=1464795&r2=1464796&view=diff
==============================================================================
--- juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java (original)
+++ juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusinessService.java Fri Apr 5 00:20:47 2013
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.jaxb.EntityCreator;
import org.junit.Assert;
+import org.uddi.api_v3.BindingTemplate;
import org.uddi.api_v3.BusinessService;
import org.uddi.api_v3.DeleteService;
import org.uddi.api_v3.FindQualifiers;
@@ -76,8 +77,8 @@ public class TckBusinessService
saveService2(authInfoJoe, JOE_SERVICE_KEY, JOE_SERVICE_XML_2, JOE_SERVICE_KEY_2);
}
- public void saveJoePublisherServices(String authInfoJoe, int numberOfCopies) {
- saveServices(authInfoJoe, JOE_SERVICE_XML, JOE_SERVICE_KEY, numberOfCopies);
+ public void saveJoePublisherServices(String authInfoJoe, int businessInt, int numberOfCopies) {
+ saveServices(authInfoJoe, businessInt, JOE_SERVICE_XML, JOE_SERVICE_KEY, numberOfCopies);
}
public void deleteJoePublisherService(String authInfoJoe) {
@@ -97,40 +98,48 @@ public class TckBusinessService
}
- public void deleteJoePublisherServices(String authInfoJoe, int numberOfCopies) {
- deleteServices(authInfoJoe, JOE_SERVICE_KEY, numberOfCopies);
+ public void deleteJoePublisherServices(String authInfoJoe, int businessInt, int numberOfCopies) {
+ deleteServices(authInfoJoe, businessInt,JOE_SERVICE_KEY, numberOfCopies);
}
public void saveSamSyndicatorService(String authInfoSam) {
saveService(authInfoSam, SAM_SERVICE_XML, SAM_SERVICE_KEY);
}
- public void saveSamSyndicatorServices(String authInfoSam, int numberOfCopies) {
- saveServices(authInfoSam, SAM_SERVICE_XML, SAM_SERVICE_KEY, numberOfCopies);
+ public void saveSamSyndicatorServices(String authInfoSam, int businessInt, int numberOfCopies) {
+ saveServices(authInfoSam, businessInt, SAM_SERVICE_XML, SAM_SERVICE_KEY, numberOfCopies);
}
public void deleteSamSyndicatorService(String authInfoSam) {
deleteService(authInfoSam, SAM_SERVICE_KEY);
}
- public void deleteSamSyndicatorServices(String authInfoSam, int numberOfCopies) {
- deleteServices(authInfoSam, SAM_SERVICE_KEY, numberOfCopies);
+ public void deleteSamSyndicatorServices(String authInfoSam, int businessInt, int numberOfCopies) {
+ deleteServices(authInfoSam, businessInt, SAM_SERVICE_KEY, numberOfCopies);
}
- public void saveServices(String authInfo, String serviceXML, String serviceKey, int numberOfCopies) {
+ public void saveServices(String authInfo, int businessInt, String serviceXML, String serviceKey, int numberOfCopies) {
+ SaveService ss = null;
try {
org.uddi.api_v3.BusinessService bsIn = (org.uddi.api_v3.BusinessService)EntityCreator.buildFromDoc(serviceXML, "org.uddi.api_v3");
String serviceName = bsIn.getName().get(0).getValue();
String bindingKey = bsIn.getBindingTemplates().getBindingTemplate().get(0).getBindingKey();
for (int i=0; i<numberOfCopies; i++) {
// save the entity
- SaveService ss = new SaveService();
+ ss = new SaveService();
ss.setAuthInfo(authInfo);
bsIn.getName().get(0).setValue(serviceName + "-" + i);
-
- bsIn.setServiceKey(serviceKey + "-" + i);
- bsIn.getBindingTemplates().getBindingTemplate().get(0).setBindingKey(bindingKey + "-" + i);
+ bsIn.setBusinessKey(TckBusiness.JOE_BUSINESS_KEY + "-" + businessInt);
+ bsIn.setServiceKey(serviceKey + "-" + businessInt + "-" + i);
+ bsIn.getBindingTemplates().getBindingTemplate().get(0).setBindingKey(bindingKey + "-" + businessInt + "-" + i);
+ bsIn.getBindingTemplates().getBindingTemplate().get(0).setServiceKey(serviceKey + "-" + businessInt + "-" + i);
ss.getBusinessService().add(bsIn);
+
+ BindingTemplate bt = bsIn.getBindingTemplates().getBindingTemplate().get(0);
+ if (! bt.getServiceKey().equals(serviceKey + "-" + businessInt + "-" + i)) {
+ System.out.println("not the same");
+ }
+
publication.saveService(ss);
logger.debug("Add service with key " + bsIn.getServiceKey());
}
@@ -223,16 +232,15 @@ public class TckBusinessService
}
}
- public void deleteServices(String authInfo, String serviceKey, int numberOfCopies) {
+ public void deleteServices(String authInfo, int businessInt, String serviceKey, int numberOfCopies) {
try {
for (int i=0; i<numberOfCopies; i++) {
// Delete the entity and make sure it is removed
DeleteService ds = new DeleteService();
ds.setAuthInfo(authInfo);
-
- ds.getServiceKey().add(serviceKey + "-" + i);
+ ds.getServiceKey().add(serviceKey + "-" + businessInt + "-" + i);
publication.deleteService(ds);
- logger.debug("Deleted Service with key " + serviceKey + "-" + i);
+ logger.debug("Deleted Service with key " + businessInt + "-" + serviceKey + "-" + i);
}
}
catch(Exception e) {
Modified: juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_040_BusinessServiceLoadTest.java
URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_040_BusinessServiceLoadTest.java?rev=1464796&r1=1464795&r2=1464796&view=diff
==============================================================================
--- juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_040_BusinessServiceLoadTest.java (original)
+++ juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_040_BusinessServiceLoadTest.java Fri Apr 5 00:20:47 2013
@@ -27,11 +27,11 @@ public class UDDI_040_BusinessServiceLoa
tckTModel.saveJoePublisherTmodel(authInfoJoe);
tckBusiness.saveJoePublisherBusiness(authInfoJoe);
long startSave = System.currentTimeMillis();
- tckBusinessService.saveJoePublisherServices(authInfoJoe, numberOfServices);
+ tckBusinessService.saveJoePublisherServices(authInfoJoe, 0, numberOfServices);
long saveDuration = System.currentTimeMillis() - startSave;
System.out.println("Save " + numberOfServices + " Joes Services Duration=" + saveDuration);
long startDelete = System.currentTimeMillis();
- tckBusinessService.deleteJoePublisherServices(authInfoJoe, numberOfServices);
+ tckBusinessService.deleteJoePublisherServices(authInfoJoe, 0, numberOfServices);
long deleteDuration = System.currentTimeMillis() - startDelete;
System.out.println("Delete " + numberOfServices + " Joes Services Duration= " + deleteDuration);
tckBusiness.deleteJoePublisherBusiness(authInfoJoe);
@@ -43,11 +43,11 @@ public class UDDI_040_BusinessServiceLoa
tckTModel.saveSamSyndicatorTmodel(authInfoSam);
tckBusiness.saveSamSyndicatorBusiness(authInfoSam);
long startSave = System.currentTimeMillis();
- tckBusinessService.saveSamSyndicatorServices(authInfoSam, numberOfServices);
+ tckBusinessService.saveSamSyndicatorServices(authInfoSam, 0, numberOfServices);
long saveDuration = System.currentTimeMillis() - startSave;
System.out.println("Save " + numberOfServices + " Sams Services Duration=" + saveDuration);
long startDelete = System.currentTimeMillis();
- tckBusinessService.deleteSamSyndicatorServices(authInfoSam, numberOfServices);
+ tckBusinessService.deleteSamSyndicatorServices(authInfoSam, 0, numberOfServices);
long deleteDuration = System.currentTimeMillis() - startDelete;
System.out.println("Delete " + numberOfServices + " Sams Services Duration= " + deleteDuration);
tckBusiness.deleteSamSyndicatorBusiness(authInfoSam);
Modified: juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_110_FindServicesIntegrationTest.java
URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_110_FindServicesIntegrationTest.java?rev=1464796&r1=1464795&r2=1464796&view=diff
==============================================================================
--- juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_110_FindServicesIntegrationTest.java (original)
+++ juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_110_FindServicesIntegrationTest.java Fri Apr 5 00:20:47 2013
@@ -123,8 +123,8 @@ public class UDDI_110_FindServicesIntegr
+ "found " + size);
} else {
List<BusinessInfo> biList = bl.getBusinessInfos().getBusinessInfo();
- if (biList.get(0).getServiceInfos().getServiceInfo().size() != 1) {
- Assert.fail("Should have found only one ServiceInfo");
+ if (biList.get(0).getServiceInfos().getServiceInfo().size() != 2) {
+ Assert.fail("Should have found two ServiceInfos");
} else {
List<ServiceInfo> siList = biList.get(0).getServiceInfos().getServiceInfo();
ServiceInfo si = siList.get(0);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org