You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by jf...@apache.org on 2008/11/21 04:53:44 UTC

svn commit: r719464 - in /webservices/juddi/branches/v3_trunk/juddi-core: ./ src/main/java/org/apache/juddi/api/impl/ src/main/java/org/apache/juddi/config/ src/main/java/org/apache/juddi/query/ src/main/java/org/apache/juddi/validation/ src/main/resou...

Author: jfaath
Date: Thu Nov 20 19:53:43 2008
New Revision: 719464

URL: http://svn.apache.org/viewvc?rev=719464&view=rev
Log:
cleaned up some inquiry api issues, added list description element, chunked the IN clause for sub-queries.

Modified:
    webservices/juddi/branches/v3_trunk/juddi-core/pom.xml
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BindingTemplateQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BusinessServiceQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBindingTemplatesQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessEntitiesQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessServicesQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchTModelsQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByTModelKeyQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByDiscoveryURLQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByNameQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateInquiry.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/juddi.properties

Modified: webservices/juddi/branches/v3_trunk/juddi-core/pom.xml
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/pom.xml?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/pom.xml (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/pom.xml Thu Nov 20 19:53:43 2008
@@ -47,7 +47,12 @@
         <version>2.4.2</version>
         <configuration>
           <suiteXmlFiles>
-            <suiteXmlFile>src/test/resources/suite-init.xml,src/test/resources/suite-save.xml,src/test/resources/suite-delete.xml,src/test/resources/suite-clean.xml</suiteXmlFile>
+            <suiteXmlFile>
+              src/test/resources/suite-init.xml,
+              src/test/resources/suite-save.xml,
+              src/test/resources/suite-delete.xml,
+              src/test/resources/suite-clean.xml
+            </suiteXmlFile>
           </suiteXmlFiles>
         </configuration>
       </plugin>

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java Thu Nov 20 19:53:43 2008
@@ -28,17 +28,13 @@
 import org.apache.juddi.query.FetchBusinessServicesQuery;
 import org.apache.juddi.query.FetchTModelsQuery;
 import org.apache.juddi.query.FindBindingByTModelKeyQuery;
-import org.apache.juddi.query.BindingTemplateQuery;
 import org.apache.juddi.query.FindBusinessByDiscoveryURLQuery;
 import org.apache.juddi.query.FindBusinessByIdentifierQuery;
 import org.apache.juddi.query.FindBusinessByNameQuery;
 import org.apache.juddi.query.FindServiceByNameQuery;
-import org.apache.juddi.query.BusinessServiceQuery;
 import org.apache.juddi.query.FindTModelByIdentifierQuery;
 import org.apache.juddi.query.FindTModelByNameQuery;
-import org.apache.juddi.query.util.DynamicQuery;
 import org.apache.juddi.query.PersistenceManager;
-import org.apache.juddi.util.JPAUtil;
 import org.apache.juddi.validation.ValidateInquiry;
 import org.apache.juddi.error.InvalidKeyPassedException;
 import org.apache.juddi.error.ErrorMessage;
@@ -61,6 +57,7 @@
 import org.uddi.api_v3.ServiceList;
 import org.uddi.api_v3.TModelDetail;
 import org.uddi.api_v3.TModelList;
+import org.uddi.api_v3.ListDescription;
 import org.uddi.v3_service.DispositionReportFaultMessage;
 import org.uddi.v3_service.UDDIInquiryPortType;
 import org.apache.juddi.api.datatype.GetPublisherDetail;
@@ -90,21 +87,16 @@
 		findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
 
 		List<?> keysFound = null;
-		if (body.getServiceKey() == null || body.getServiceKey().length() == 0) {
-			keysFound = FindBindingByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), keysFound);
-			//keysFound = FindBindingByCategoryQuery.select(em, findQualifiers, tmodelKeys, keysFound);
-		}
-		else {
-			DynamicQuery.Parameter keyRestriction = new DynamicQuery.Parameter(BindingTemplateQuery.ENTITY_ALIAS + "." + BusinessServiceQuery.KEY_NAME, body.getServiceKey(), DynamicQuery.PREDICATE_EQUALS);
-			if (body.getTModelBag() != null)
-				keysFound = FindBindingByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), keysFound, keyRestriction);
-			//keysFound = FindBindingByCategoryQuery.select(em, findQualifiers, tmodelKeys, keysFound, keyRestriction);
-		}
+		keysFound = FindBindingByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getServiceKey(), keysFound);
+		//keysFound = FindBindingByCategoryQuery.select(em, findQualifiers, tmodelKeys, body.getServiceKey(), keysFound);
+
+		BindingDetail result = new BindingDetail();
+		ListDescription listDesc = new ListDescription();
+		result.setListDescription(listDesc);
 		
 		// Sort and retrieve the final results with paging taken into account
-		List<?> queryResults = FetchBindingTemplatesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead());
+		List<?> queryResults = FetchBindingTemplatesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
 
-		BindingDetail result = new BindingDetail();
 		for (Object item : queryResults) {
 			org.apache.juddi.model.BindingTemplate modelBindingTemplate = (org.apache.juddi.model.BindingTemplate)item;
 			org.uddi.api_v3.BindingTemplate apiBindingTemplate = new org.uddi.api_v3.BindingTemplate();
@@ -142,9 +134,11 @@
 		keysFound = FindBusinessByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
 
 		BusinessList result = new BusinessList();
+		ListDescription listDesc = new ListDescription();
+		result.setListDescription(listDesc);
 
 		// Sort and retrieve the final results taking paging into account
-		List<?> queryResults = FetchBusinessEntitiesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead());
+		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());
 
@@ -185,13 +179,15 @@
 		findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());
 
 		List<?> keysFound = null;
-		//keysFound = FindServiceByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
-		keysFound = FindServiceByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
+		//keysFound = FindServiceByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey, keysFound);
+		keysFound = FindServiceByNameQuery.select(em, findQualifiers, body.getName(), body.getBusinessKey(), keysFound);
 
 		ServiceList result = new ServiceList();
+		ListDescription listDesc = new ListDescription();
+		result.setListDescription(listDesc);
 		
 		// Sort and retrieve the final results taking paging into account
-		List<?> queryResults = FetchBusinessServicesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead());
+		List<?> queryResults = FetchBusinessServicesQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
 		if (queryResults != null && queryResults.size() > 0)
 			result.setServiceInfos(new org.uddi.api_v3.ServiceInfos());
 
@@ -213,7 +209,7 @@
 	public TModelList findTModel(FindTModel body)
 			throws DispositionReportFaultMessage {
 
-		ValidateInquiry.validateFindTModel(body);
+		ValidateInquiry.validateFindTModel(body, false);
 		
 		// TODO: Perform necessary authentication logic
 		String authInfo = body.getAuthInfo();
@@ -231,9 +227,11 @@
 		keysFound = FindTModelByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
 
 		TModelList result = new TModelList();
+		ListDescription listDesc = new ListDescription();
+		result.setListDescription(listDesc);
 
 		// Sort and retrieve the final results taking paging into account
-		List<?> queryResults = FetchTModelsQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead());
+		List<?> queryResults = FetchTModelsQuery.select(em, findQualifiers, keysFound, body.getMaxRows(), body.getListHead(), listDesc);
 		if (queryResults != null && queryResults.size() > 0)
 			result.setTModelInfos(new org.uddi.api_v3.TModelInfos());
 		

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java Thu Nov 20 19:53:43 2008
@@ -323,7 +323,7 @@
 		RegisteredInfo result = new RegisteredInfo();
 		
 		// Sort and retrieve the final results
-		List<?> queryResults = FetchBusinessEntitiesQuery.select(em, new FindQualifiers(), businessKeysFound, null, null);
+		List<?> queryResults = FetchBusinessEntitiesQuery.select(em, new FindQualifiers(), businessKeysFound, null, null, null);
 		if (queryResults != null && queryResults.size() > 0)
 			result.setBusinessInfos(new org.uddi.api_v3.BusinessInfos());
 		
@@ -337,7 +337,7 @@
 		}
 
 		// Sort and retrieve the final results
-		queryResults = FetchTModelsQuery.select(em, new FindQualifiers(), tmodelKeysFound, null, null);
+		queryResults = FetchTModelsQuery.select(em, new FindQualifiers(), tmodelKeysFound, null, null, null);
 		if (queryResults != null && queryResults.size() > 0)
 			result.setTModelInfos(new org.uddi.api_v3.TModelInfos());
 		

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java Thu Nov 20 19:53:43 2008
@@ -18,4 +18,6 @@
 	public final static String JUDDI_KEYGENERATOR                ="juddi.keygenerator";
 	public final static String JUDDI_VALIDATOR                   ="juddi.validator";
 	public final static String JUDDI_USERSFILE                   ="juddi.usersfile";
+	public final static String JUDDI_MAX_ROWS                    ="juddi.maxRows";
+	public final static String JUDDI_MAX_IN_CLAUSE               ="juddi.maxInClause";
 }

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BindingTemplateQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BindingTemplateQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BindingTemplateQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BindingTemplateQuery.java Thu Nov 20 19:53:43 2008
@@ -25,6 +25,7 @@
 	public static final String ENTITY_NAME = "BindingTemplate";
 	public static final String ENTITY_ALIAS = "b";
 	public static final String KEY_NAME = "bindingKey";
+	public static final String KEY_NAME_PARENT = "businessService." + BusinessServiceQuery.KEY_NAME;
 	
 	protected static String selectSQL;
 

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BusinessServiceQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BusinessServiceQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BusinessServiceQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/BusinessServiceQuery.java Thu Nov 20 19:53:43 2008
@@ -25,6 +25,7 @@
 	public static final String ENTITY_NAME = "BusinessService";
 	public static final String ENTITY_ALIAS = "s";
 	public static final String KEY_NAME = "serviceKey";
+	public static final String KEY_NAME_PARENT = "businessEntity." + BusinessEntityQuery.KEY_NAME;
 	
 	protected static String selectSQL;
 

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java Thu Nov 20 19:53:43 2008
@@ -18,17 +18,29 @@
 package org.apache.juddi.query;
 
 import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
 
+import org.apache.commons.configuration.ConfigurationException;
+import org.uddi.api_v3.ListDescription;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.config.Property;
 import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.log4j.Logger;
 
 /**
  * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
  */
 public abstract class EntityQuery {
+	private static Logger log = Logger.getLogger(EntityQuery.class);
+
 	public static final String GENERAL_KEYWORD_TMODEL = "uddi:uddi-org:general_keywords";
 	
+	public static final int DEFAULT_MAXROWS = 100;
+	public static final int DEFAULT_MAXINCLAUSE = 1000;
+	
 	public static String buildAlias(String entityName) {
 		if (entityName == null || entityName.length() == 0)
 			return "x";
@@ -36,21 +48,101 @@
 		return entityName.substring(0, entityName.length() - 3);
 	}
 	
-	public static List<?> getPagedResult(EntityManager em, DynamicQuery dynamicQry, Integer maxRows, Integer listHead) {
-		
-		if (maxRows == null || maxRows <= 0)
-			maxRows = 10; //TODO: set to system default
+	/*
+	 * Used to retrieve the final results of find operations.  Handles paging as specified by user.  
+	 * 
+	 * TODO: This query will use an IN clause, however, it is not restricted per the global parameter.  This is so the query can
+	 * take advantage of sorting through SQL.  The fix would be to apply the parameter, but only if the IN list is greater than the
+	 * parameter.  In this case, sorting would have to be done in java.
+	 * 
+	 */
+	public static List<?> getPagedResult(EntityManager em, DynamicQuery dynamicQry, Integer maxRowsUser, Integer listHead, ListDescription listDesc) {
+		
+		int maxRows = DEFAULT_MAXROWS;
+		try {
+			maxRows = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_ROWS, DEFAULT_MAXROWS);
+		}
+		catch(ConfigurationException ce) {
+			log.error("Configuration exception occurred retrieving: " + Property.JUDDI_MAX_ROWS);
+		}
+		
+		if (maxRowsUser == null || maxRowsUser <= 0) {
+			if (maxRowsUser < maxRows)
+				maxRows = maxRowsUser;
+		}
 		
 		if (listHead == null || listHead <= 0)
-			listHead = 0;
+			listHead = 1;
 		
 		
 		Query qry = dynamicQry.buildJPAQuery(em);
-		qry.setMaxResults(maxRows);
-		qry.setFirstResult(listHead);
+		List<?> result = qry.getResultList();
+		int resultSize = result.size();
+
+		if (listDesc != null) {
+			listDesc.setActualCount(resultSize);
+			listDesc.setListHead(listHead);
+		}
+		
+		int startIndex = (listHead - 1) * maxRows;
+		if (startIndex >= resultSize) {
+			if (listDesc != null)
+				listDesc.setIncludeCount(0);
+
+			return Collections.emptyList();
+		}
+		else {
+			int endIndex = Math.min(startIndex + maxRows, resultSize);
+			if (listDesc != null)
+				listDesc.setIncludeCount(endIndex - startIndex);
+
+			return result.subList(startIndex, endIndex);
+		}
+	}
+	
+	/*
+	 * Used for all the find operation sub-queries.  Restricts size of the IN clause based on global parameter
+	 */
+	public static List<?> getQueryResult(EntityManager em, DynamicQuery dynamicQry, List<?> keysIn, String inListTerm) {
+		
+		List<Object> result = new ArrayList<Object>(0);
+		// If keysIn is null, then no IN list is applied to the query - we simply need to run the query.  Otherwise, the IN list is chunked based on
+		// the application property.
+		if (keysIn == null) {
+			Query qry = dynamicQry.buildJPAQuery(em);
+			result = qry.getResultList();
+		}
+		else {
+			int maxInClause = DEFAULT_MAXINCLAUSE;
+			try {
+				maxInClause = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_IN_CLAUSE, DEFAULT_MAXINCLAUSE);
+			}
+			catch(ConfigurationException ce) {
+				log.error("Configuration exception occurred retrieving: " + Property.JUDDI_MAX_IN_CLAUSE);
+			}
+			
+			int inParamsLeft = keysIn.size();
+			int startIndex = 0;
+			while(inParamsLeft > 0) {
+				int endIndex = startIndex + Math.min(inParamsLeft, maxInClause);
+				
+				List<?> subKeysIn = keysIn.subList(startIndex, endIndex);
+				dynamicQry.appendInListWithAnd(inListTerm, subKeysIn);
+				log.debug(dynamicQry);
+	
+				Query qry = dynamicQry.buildJPAQuery(em);
+				List<Object> resultChunk = qry.getResultList();
+				result.addAll(resultChunk);
+				
+				inParamsLeft = inParamsLeft - (endIndex - startIndex);
+				startIndex = endIndex;
+			}
+		}
 		
-		return qry.getResultList();
+		return result;
 		
 
 	}
+
+	
 }

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBindingTemplatesQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBindingTemplatesQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBindingTemplatesQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBindingTemplatesQuery.java Thu Nov 20 19:53:43 2008
@@ -25,6 +25,7 @@
 import org.apache.juddi.query.util.FindQualifiers;
 import org.apache.log4j.Logger;
 import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.api_v3.ListDescription;
 
 /**
  * The "select" method retrieves all the entities for the input key list and sorts according to the user settings.  Paging is taken into account when retrieving 
@@ -49,7 +50,7 @@
 		selectSQL = sql.toString();
 	}
 	
-	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead) throws DispositionReportFaultMessage {
+	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead, ListDescription listDesc) throws DispositionReportFaultMessage {
 		
 		// If keysIn is null or empty, then nothing to fetch.
 		if ((keysIn == null) || (keysIn.size() == 0))
@@ -62,7 +63,7 @@
 
 		log.debug(dynamicQry);
 		
-		return getPagedResult(em, dynamicQry, maxRows, listHead);
+		return getPagedResult(em, dynamicQry, maxRows, listHead, listDesc);
 	}
 	
 	private static void appendSortTables(DynamicQuery qry) {

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessEntitiesQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessEntitiesQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessEntitiesQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessEntitiesQuery.java Thu Nov 20 19:53:43 2008
@@ -25,6 +25,7 @@
 import org.apache.juddi.query.util.FindQualifiers;
 import org.apache.log4j.Logger;
 import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.api_v3.ListDescription;
 
 /**
  * The "select" method retrieves all the entities for the input key list and sorts according to the user settings.  Paging is taken into account when retrieving 
@@ -49,7 +50,7 @@
 		selectSQL = sql.toString();
 	}
 	
-	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead) throws DispositionReportFaultMessage {
+	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead, ListDescription listDesc) throws DispositionReportFaultMessage {
 		
 		// If keysIn is null or empty, then nothing to fetch.
 		if ((keysIn == null) || (keysIn.size() == 0))
@@ -62,7 +63,7 @@
 
 		log.debug(dynamicQry);
 		
-		return getPagedResult(em, dynamicQry, maxRows, listHead);
+		return getPagedResult(em, dynamicQry, maxRows, listHead, listDesc);
 	}
 	
 	private static void appendSortTables(DynamicQuery qry) {

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessServicesQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessServicesQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessServicesQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchBusinessServicesQuery.java Thu Nov 20 19:53:43 2008
@@ -25,6 +25,7 @@
 import org.apache.juddi.query.util.FindQualifiers;
 import org.apache.log4j.Logger;
 import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.api_v3.ListDescription;
 
 /**
  * The "select" method retrieves all the entities for the input key list and sorts according to the user settings.  Paging is taken into account when retrieving 
@@ -49,7 +50,7 @@
 		selectSQL = sql.toString();
 	}
 	
-	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead) throws DispositionReportFaultMessage {
+	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead, ListDescription listDesc) throws DispositionReportFaultMessage {
 		
 		// If keysIn is null or empty, then nothing to fetch.
 		if ((keysIn == null) || (keysIn.size() == 0))
@@ -62,7 +63,7 @@
 
 		log.debug(dynamicQry);
 		
-		return getPagedResult(em, dynamicQry, maxRows, listHead);
+		return getPagedResult(em, dynamicQry, maxRows, listHead, listDesc);
 	}
 	
 	private static void appendSortTables(DynamicQuery qry) {

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchTModelsQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchTModelsQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchTModelsQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FetchTModelsQuery.java Thu Nov 20 19:53:43 2008
@@ -25,6 +25,7 @@
 import org.apache.juddi.query.util.FindQualifiers;
 import org.apache.log4j.Logger;
 import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.api_v3.ListDescription;
 
 /**
  * The "select" method retrieves all the entities for the input key list and sorts according to the user settings.  Paging is taken into account when retrieving 
@@ -49,7 +50,7 @@
 		selectSQL = sql.toString();
 	}
 	
-	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead) throws DispositionReportFaultMessage {
+	public static List<?> select(EntityManager em, FindQualifiers fq, List<?> keysIn, Integer maxRows, Integer listHead, ListDescription listDesc) throws DispositionReportFaultMessage {
 		
 		// If keysIn is null or empty, then nothing to fetch.
 		if ((keysIn == null) || (keysIn.size() == 0))
@@ -62,7 +63,7 @@
 
 		log.debug(dynamicQry);
 		
-		return getPagedResult(em, dynamicQry, maxRows, listHead);
+		return getPagedResult(em, dynamicQry, maxRows, listHead, listDesc);
 	}
 	
 	private static void appendSortTables(DynamicQuery qry) {

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByTModelKeyQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByTModelKeyQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByTModelKeyQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByTModelKeyQuery.java Thu Nov 20 19:53:43 2008
@@ -19,7 +19,6 @@
 
 import java.util.List;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 
 import org.apache.juddi.query.util.DynamicQuery;
 import org.apache.juddi.query.util.FindQualifiers;
@@ -54,7 +53,7 @@
 		entityAliasChild = buildAlias(ENTITY_NAME_CHILD);
 	}
 
-	public static List<?> select(EntityManager em, FindQualifiers fq, TModelBag tModels, List<?> keysIn, DynamicQuery.Parameter... restrictions) {
+	public static List<?> select(EntityManager em, FindQualifiers fq, TModelBag tModels, String parentKey, List<?> keysIn, DynamicQuery.Parameter... restrictions) {
 		// If keysIn is not null and empty, then search is over.
 		if ((keysIn != null) && (keysIn.size() == 0))
 			return keysIn;
@@ -68,18 +67,13 @@
 		
 		DynamicQuery dynamicQry = new DynamicQuery(selectSQL);
 		appendConditions(dynamicQry, fq, tmodelKeys);
+		if (parentKey != null && parentKey.length() > 0)
+			dynamicQry.AND().pad().appendGroupedAnd(new DynamicQuery.Parameter(BindingTemplateQuery.ENTITY_ALIAS + "." + BindingTemplateQuery.KEY_NAME_PARENT, parentKey, DynamicQuery.PREDICATE_EQUALS));
+		
 		if (restrictions != null && restrictions.length > 0)
 			dynamicQry.AND().pad().appendGroupedAnd(restrictions);
 		
-		// TODO: Break up the IN clause into an amount that is configurable (see JUDDI-146)
-		dynamicQry.appendInListWithAnd(ENTITY_ALIAS + "." + KEY_NAME, keysIn);
-		
-		log.debug(dynamicQry);
-		
-		Query qry = dynamicQry.buildJPAQuery(em);
-		List<?> result = qry.getResultList();
-		
-		return result;
+		return getQueryResult(em, dynamicQry, keysIn, ENTITY_ALIAS + "." + KEY_NAME);
 	}
 	
 	

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByDiscoveryURLQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByDiscoveryURLQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByDiscoveryURLQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByDiscoveryURLQuery.java Thu Nov 20 19:53:43 2008
@@ -19,7 +19,6 @@
 
 import java.util.List;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 
 import org.apache.juddi.query.util.DynamicQuery;
 import org.apache.juddi.query.util.FindQualifiers;
@@ -70,15 +69,7 @@
 		if (restrictions != null && restrictions.length > 0)
 			dynamicQry.AND().pad().appendGroupedAnd(restrictions);
 
-		// TODO: Break up the IN clause into an amount that is configurable (see JUDDI-146)
-		dynamicQry.appendInListWithAnd(ENTITY_ALIAS + "." + KEY_NAME, keysIn);
-		
-		log.debug(dynamicQry);
-		
-		Query qry = dynamicQry.buildJPAQuery(em);
-		List<?> result = qry.getResultList();
-		
-		return result;
+		return getQueryResult(em, dynamicQry, keysIn, ENTITY_ALIAS + "." + KEY_NAME);
 	}
 	
 	/*

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java Thu Nov 20 19:53:43 2008
@@ -20,7 +20,6 @@
 import java.util.List;
 import java.util.Collections;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 
 import org.apache.juddi.query.util.DynamicQuery;
 import org.apache.juddi.query.util.FindQualifiers;
@@ -109,16 +108,8 @@
 		appendConditions(dynamicQry, fq, keyedRefs);
 		if (restrictions != null && restrictions.length > 0)
 			dynamicQry.AND().pad().appendGroupedAnd(restrictions);
-		
-		// TODO: Break up the IN clause into an amount that is configurable (see JUDDI-146)
-		dynamicQry.appendInListWithAnd(entityAlias + "." + keyName, keysIn);
-		
-		log.debug(dynamicQry);
-		
-		Query qry = dynamicQry.buildJPAQuery(em);
-		List<?> result = qry.getResultList();
-		
-		return result;
+
+		return getQueryResult(em, dynamicQry, keysIn, entityAlias + "." + keyName);
 	}
 	
 	

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java Thu Nov 20 19:53:43 2008
@@ -19,7 +19,6 @@
 
 import java.util.List;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 
 import org.apache.juddi.query.util.DynamicQuery;
 import org.apache.juddi.query.util.FindQualifiers;
@@ -94,15 +93,7 @@
 		if (restrictions != null && restrictions.length > 0)
 			dynamicQry.AND().pad().appendGroupedAnd(restrictions);
 
-		// TODO: Break up the IN clause into an amount that is configurable (see JUDDI-146)
-		dynamicQry.appendInListWithAnd(entityAlias + "." + keyName, keysIn);
-		
-		log.debug(dynamicQry);
-		
-		Query qry = dynamicQry.buildJPAQuery(em);
-		List<?> result = qry.getResultList();
-		
-		return result;
+		return getQueryResult(em, dynamicQry, keysIn, entityAlias + "." + keyName);
 	}
 	
 	/*

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByNameQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByNameQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByNameQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByNameQuery.java Thu Nov 20 19:53:43 2008
@@ -20,6 +20,7 @@
 import java.util.List;
 import javax.persistence.EntityManager;
 
+import org.apache.juddi.query.util.DynamicQuery;
 import org.apache.juddi.query.util.FindQualifiers;
 import org.uddi.api_v3.Name;
 
@@ -52,8 +53,14 @@
 		findQuery = new FindEntityByNamesQuery(BusinessServiceQuery.ENTITY_NAME, BusinessServiceQuery.ENTITY_ALIAS, BusinessServiceQuery.KEY_NAME, ENTITY_NAME_CHILD);
 	}
 
-	public static List<?> select(EntityManager em, FindQualifiers fq, List<Name> names, List<?> keysIn) {
-		return findQuery.select(em, fq, names, keysIn);
+	public static List<?> select(EntityManager em, FindQualifiers fq, List<Name> names, String parentKey, List<?> keysIn) {
+		if (parentKey != null && parentKey.length() > 0) {
+			DynamicQuery.Parameter param = new DynamicQuery.Parameter(BusinessServiceQuery.ENTITY_ALIAS + "." + BusinessServiceQuery.KEY_NAME_PARENT, parentKey, DynamicQuery.PREDICATE_EQUALS); 
+			return findQuery.select(em, fq, names, keysIn, param);
+		}
+		else
+			return findQuery.select(em, fq, names, keysIn);
+			
 	}
 	
 }

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java Thu Nov 20 19:53:43 2008
@@ -19,7 +19,6 @@
 
 import java.util.List;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 
 import org.apache.juddi.query.util.DynamicQuery;
 import org.apache.juddi.query.util.FindQualifiers;
@@ -64,15 +63,7 @@
 		if (restrictions != null && restrictions.length > 0)
 			dynamicQry.AND().pad().appendGroupedAnd(restrictions);
 		
-		// TODO: Break up the IN clause into an amount that is configurable (see JUDDI-146)
-		dynamicQry.appendInListWithAnd(ENTITY_ALIAS + "." + KEY_NAME, keysIn);
-		
-		log.debug(dynamicQry);
-		
-		Query qry = dynamicQry.buildJPAQuery(em);
-		List<?> result = qry.getResultList();
-		
-		return result;
+		return getQueryResult(em, dynamicQry, keysIn, ENTITY_ALIAS + "." + KEY_NAME);
 	}
 	
 	public static void appendConditions(DynamicQuery qry, FindQualifiers fq, Name name) {

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateInquiry.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateInquiry.java?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateInquiry.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateInquiry.java Thu Nov 20 19:53:43 2008
@@ -152,7 +152,7 @@
 
 		validateFindQualifiers(body.getFindQualifiers());
 		validateTModelBag(body.getTModelBag());
-		validateFindTModel(body.getFindTModel());
+		validateFindTModel(body.getFindTModel(), true);
 		ValidatePublish.validateDiscoveryUrls(body.getDiscoveryURLs());
 		ValidatePublish.validateIdentifierBag(body.getIdentifierBag());
 		ValidatePublish.validateCategoryBag(body.getCategoryBag());
@@ -169,7 +169,7 @@
 
 		validateFindQualifiers(body.getFindQualifiers());
 		validateTModelBag(body.getTModelBag());
-		validateFindTModel(body.getFindTModel());
+		validateFindTModel(body.getFindTModel(), true);
 		ValidatePublish.validateCategoryBag(body.getCategoryBag());
 		
 	}
@@ -184,16 +184,20 @@
 
 		validateFindQualifiers(body.getFindQualifiers());
 		validateTModelBag(body.getTModelBag());
-		validateFindTModel(body.getFindTModel());
+		validateFindTModel(body.getFindTModel(), true);
 		ValidatePublish.validateCategoryBag(body.getCategoryBag());
 		
 		
 	}
 	
-	public static void validateFindTModel(FindTModel body) throws DispositionReportFaultMessage  {
-		// No null input
-		//if (body == null)
-		//	throw new FatalErrorException(new ErrorMessage("errors.NullInput"));
+	public static void validateFindTModel(FindTModel body, boolean nullAllowed) throws DispositionReportFaultMessage  {
+		if (body == null) {
+			// When FindTModel objects are embedded in other find calls, null is allowed.
+			if (nullAllowed)
+				return;
+			else
+				throw new FatalErrorException(new ErrorMessage("errors.NullInput"));
+		}
 
 		if (body.getCategoryBag() == null && body.getIdentifierBag() == null && body.getName() == null)
 			throw new FatalErrorException(new ErrorMessage("errors.findtmodel.NoInput"));

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/juddi.properties
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/juddi.properties?rev=719464&r1=719463&r2=719464&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/juddi.properties (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/juddi.properties Thu Nov 20 19:53:43 2008
@@ -21,6 +21,14 @@
 juddi.maxNameLength=255
 juddi.maxNameElementsAllowed=5
 #
+#
+# The maximum number of rows returned in a find_* operation.  Each call can set
+# this independently, but this property defines a global maximum.
+juddi.maxRows=100
+# The maximum number of "IN" clause parameters.  Some RDMBS limit the number of 
+# parameters allowed in a SQL "IN" clause.
+juddi.maxInClause=1000
+#
 # The maximum number of UDDI artifacts allowed
 # per publisher. A value of '-1' indicates any 
 # number of artifacts is valid (These values can be



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