Hi,
Profiling a program that uses the xmlsec library I see that a vast
amount of time is waste in translateURItoJCEID (in 86 times called a
4sec of 22 sec that the whole program time).
I made a little cache in order to not parse and xpath search the
config.xml node in order to find the provider again and again. With this
4 line change the total time spend in the function decrease to 200ms.
Perhaps can help somebody.
Regards,
Index: JCEMapper.java
===================================================================
RCS file:
/home/cvspublic/xml-security/src/org/apache/xml/security/algorithms/JCEMapper.java,v
retrieving revision 1.19
diff -u -r1.19 JCEMapper.java
--- JCEMapper.java 6 Mar 2004 11:39:49 -0000 1.19
+++ JCEMapper.java 13 Apr 2004 17:38:04 -0000
@@ -21,6 +21,8 @@
import java.security.Key;
import java.security.Provider;
import java.security.Security;
+import java.util.HashMap;
+import java.util.Map;
import javax.xml.transform.TransformerException;
@@ -48,6 +50,8 @@
/** Field _nscontext */
private static Element _nscontext = null;
+
+ private static Map uriToProvider = new HashMap();
/**
* Method init
@@ -179,7 +183,10 @@
log.debug("Request for URI " + AlgorithmURI);
try {
-
+ ProviderIdClass prov=(ProviderIdClass)
uriToProvider.get(AlgorithmURI);
+ if (prov!=null) {
+ return prov;
+ }
/*
Attr jceName = (Attr) XPathAPI.selectSingleNode(
JCEMapper._providerList,
@@ -204,7 +211,7 @@
log.debug("Found " + result.getAlgorithmID() + " from
provider "
+ result.getProviderId());
-
+ uriToProvider.put(AlgorithmURI,result);
return result;
}
}
|