SCOUT-95
Extend caching to business query managers.


git-svn-id: https://svn.apache.org/repos/asf/webservices/scout/trunk@935043 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java b/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java
index 4bb37e1..f93deb6 100644
--- a/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java
+++ b/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java
@@ -171,8 +171,18 @@
         {
             ConnectionImpl con = ((RegistryServiceImpl)getRegistryService()).getConnection();
             AuthToken auth = this.getAuthToken(con,registry);
-            PublisherAssertions result =
-                    registry.getPublisherAssertions(auth.getAuthInfo());
+            PublisherAssertions result = null;
+            try {
+                    result = registry.getPublisherAssertions(auth.getAuthInfo());
+        	} catch (RegistryException rve) {
+        		String username = getUsernameFromCredentials(con.getCredentials());
+        		if (AuthTokenSingleton.getToken(username) != null) {
+        			AuthTokenSingleton.deleteAuthToken(username);
+        		}
+        		auth = getAuthToken(con, registry);
+                result = registry.getPublisherAssertions(auth.getAuthInfo());
+        	}
+
             List<PublisherAssertion> publisherAssertionList = result.getPublisherAssertion();
             LinkedHashSet<Association> col = new LinkedHashSet<Association>();
             for (PublisherAssertion pas : publisherAssertionList) {
@@ -230,8 +240,17 @@
                  if(caller  && !other   )
                         confirm = Constants.COMPLETION_STATUS_TOKEY_INCOMPLETE;
 
-            report = registry.getAssertionStatusReport(auth.getAuthInfo(),confirm);
-            
+            report = null;
+            try {
+            	report = registry.getAssertionStatusReport(auth.getAuthInfo(),confirm);
+        	} catch (RegistryException rve) {
+        		String username = getUsernameFromCredentials(con.getCredentials());
+        		if (AuthTokenSingleton.getToken(username) != null) {
+        			AuthTokenSingleton.deleteAuthToken(username);
+        		}
+        		auth = getAuthToken(con, registry);
+            	report = registry.getAssertionStatusReport(auth.getAuthInfo(),confirm);
+        	}
             
             List<AssertionStatusItem> assertionStatusItemList = report.getAssertionStatusItem();
             LinkedHashSet<Association> col = new LinkedHashSet<Association>();
@@ -843,8 +862,19 @@
         	
             try
             {
-            	RegisteredInfo ri = registry.getRegisteredInfo(auth.getAuthInfo());
-                if (ri != null) {
+            	RegisteredInfo ri = null;
+            	try {
+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());
+            	} catch (RegistryException rve) {
+            		String username = getUsernameFromCredentials(con.getCredentials());
+            		if (AuthTokenSingleton.getToken(username) != null) {
+            			AuthTokenSingleton.deleteAuthToken(username);
+            		}
+            		auth = getAuthToken(con, registry);
+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());
+            	}
+
+            	if (ri != null) {
 						for (String key:keys) {
 							BusinessDetail detail = registry.getBusinessDetail(key);
                             col.add(((BusinessLifeCycleManagerImpl)registryService.getLifeCycleManagerImpl()).createOrganization(detail));
@@ -910,7 +940,18 @@
     		LinkedHashSet<Organization> orgs = null;
             try
             {
-            	RegisteredInfo ri = registry.getRegisteredInfo(auth.getAuthInfo());
+            	RegisteredInfo ri = null;
+            	try {
+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());
+            	} catch (RegistryException rve) {
+            		String username = getUsernameFromCredentials(con.getCredentials());
+            		if (AuthTokenSingleton.getToken(username) != null) {
+            			AuthTokenSingleton.deleteAuthToken(username);
+            		}
+            		auth = getAuthToken(con, registry);
+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());
+            	}
+
             	if (ri != null && ri.getBusinessInfos()!=null) {
             		List<BusinessInfo> bizInfoList = ri.getBusinessInfos().getBusinessInfo();
             		orgs = new LinkedHashSet<Organization>();
@@ -1002,6 +1043,11 @@
             username = pass.getUserName();
             pwd = new String(pass.getPassword());
         }
+        
+        if (AuthTokenSingleton.getToken(username) != null) {
+        	return (AuthToken) AuthTokenSingleton.getToken(username);
+        }
+        
         AuthToken token = null;
         try {
             token = ireg.getAuthToken(username, pwd);
@@ -1009,6 +1055,22 @@
         catch (Exception e) {
             throw new JAXRException(e);
         }
+        AuthTokenSingleton.addAuthToken(username, token);
+        
         return token;
     }
+    
+    private String getUsernameFromCredentials(Set credentials) {
+        String username = "", pwd = "";
+                
+        if (credentials != null) {
+        	Iterator it = credentials.iterator();
+        	while (it.hasNext()) {
+        		PasswordAuthentication pass = (PasswordAuthentication) it.next();
+        		username = pass.getUserName();
+        	}
+        }
+        return username;
+    }
+
 }
diff --git a/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerV3Impl.java b/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerV3Impl.java
index 5344928..ce99d52 100644
--- a/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerV3Impl.java
+++ b/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerV3Impl.java
@@ -148,8 +148,18 @@
         {

             ConnectionImpl con = ((RegistryServiceImpl)getRegistryService()).getConnection();

             AuthToken auth = this.getAuthToken(con,registry);

-            PublisherAssertions result =

-                    registry.getPublisherAssertions(auth.getAuthInfo());

+            PublisherAssertions result = null;

+            try {

+                    result = registry.getPublisherAssertions(auth.getAuthInfo());

+        	} catch (RegistryV3Exception rve) {

+        		String username = getUsernameFromCredentials(con.getCredentials());

+        		if (AuthTokenV3Singleton.getToken(username) != null) {

+        			AuthTokenV3Singleton.deleteAuthToken(username);

+        		}

+        		auth = getAuthToken(con, registry);

+                result = registry.getPublisherAssertions(auth.getAuthInfo());

+        	}

+

             List<PublisherAssertion> publisherAssertionList = result.getPublisherAssertion();

             LinkedHashSet<Association> col = new LinkedHashSet<Association>();

             for (PublisherAssertion pas : publisherAssertionList) {

@@ -202,8 +212,17 @@
                  if(caller  && !other   )

                         confirm = Constants.COMPLETION_STATUS_TOKEY_INCOMPLETE;

 

-            report = registry.getAssertionStatusReport(auth.getAuthInfo(),confirm);

-            

+            try { 

+            	report = registry.getAssertionStatusReport(auth.getAuthInfo(),confirm);

+        	} catch (RegistryV3Exception rve) {

+        		String username = getUsernameFromCredentials(con.getCredentials());

+        		if (AuthTokenV3Singleton.getToken(username) != null) {

+        			AuthTokenV3Singleton.deleteAuthToken(username);

+        		}

+        		auth = getAuthToken(con, registry);

+            	report = registry.getAssertionStatusReport(auth.getAuthInfo(),confirm);

+        	}

+

             

             List<AssertionStatusItem> assertionStatusItemList = report.getAssertionStatusItem();

             LinkedHashSet<Association> col = new LinkedHashSet<Association>();

@@ -815,7 +834,18 @@
         	

             try

             {

-            	RegisteredInfo ri = registry.getRegisteredInfo(auth.getAuthInfo());

+            	RegisteredInfo ri = null;

+            	try {

+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());

+            	} catch (RegistryV3Exception rve) {

+            		String username = getUsernameFromCredentials(con.getCredentials());

+            		if (AuthTokenV3Singleton.getToken(username) != null) {

+            			AuthTokenV3Singleton.deleteAuthToken(username);

+            		}

+            		auth = getAuthToken(con, registry);

+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());

+            	}

+

                 if (ri != null) {

                     BusinessInfos infos = ri.getBusinessInfos();

                     if (infos != null) {

@@ -885,7 +915,18 @@
     		LinkedHashSet<Organization> orgs = null;

             try

             {

-            	RegisteredInfo ri = registry.getRegisteredInfo(auth.getAuthInfo());

+            	RegisteredInfo ri = null;

+            	try {

+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());

+            	} catch (RegistryV3Exception rve) {

+            		String username = getUsernameFromCredentials(con.getCredentials());

+            		if (AuthTokenV3Singleton.getToken(username) != null) {

+            			AuthTokenV3Singleton.deleteAuthToken(username);

+            		}

+            		auth = getAuthToken(con, registry);

+            		ri = registry.getRegisteredInfo(auth.getAuthInfo());

+            	}

+

             	if (ri != null && ri.getBusinessInfos()!=null) {

             		List<BusinessInfo> bizInfoList = ri.getBusinessInfos().getBusinessInfo();

             		orgs = new LinkedHashSet<Organization>();

@@ -977,6 +1018,11 @@
             username = pass.getUserName();

             pwd = new String(pass.getPassword());

         }

+

+        if (AuthTokenV3Singleton.getToken(username) != null) {

+        	return (AuthToken) AuthTokenV3Singleton.getToken(username);

+        }

+        

         AuthToken token = null;

         try {

             token = ireg.getAuthToken(username, pwd);

@@ -984,6 +1030,22 @@
         catch (Exception e) {

             throw new JAXRException(e);

         }

+        AuthTokenV3Singleton.addAuthToken(username, token);

+

         return token;

     }

+    

+    private String getUsernameFromCredentials(Set credentials) {

+        String username = "", pwd = "";

+                

+        if (credentials != null) {

+        	Iterator it = credentials.iterator();

+        	while (it.hasNext()) {

+        		PasswordAuthentication pass = (PasswordAuthentication) it.next();

+        		username = pass.getUserName();

+        	}

+        }

+        return username;

+    }

+

 }