While writing a DB2 stored procedure that invoked a SOAP/WSDL web service using Apache Axis as part of WSIF, I ran into this doozie:
org.apache.commons.discovery.DiscoveryException: No implementation defined for org.apache.commons.logging.LogFactory
Ultimately, it’s caused by a too restrictive
lib/security/java.policy file that ships with DB2.
The standard way to define an implementation is to create the following
commons-logging.properties file and place it anywhere in your CLASSPATH (such as the root of a JAR file):
# Default #org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl # SimpleLog #org.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog # JDK 1.4 logger #org.apache.commons.logging.Log = org.apache.commons.logging.impl.Jdk14Logger # Avalon Toolkit #org.apache.commons.logging.Log = org.apache.commons.logging.impl.LogKitLogger # Log4j (Recommended by Axis) org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger
Alternatively, you can set the
org.apache.commons.logging.Log configuration attribute for LogFactory programmatically.
Solution: Running an Axis SOAP client in Domino [or DB2]
My DB2 is installed into
1. Copy all your JARs to
permission java.util.PropertyPermission "java.protocol.handler.pkgs", "write";
5. Restart DB2
One thought on “No implementation defined for org.apache.commons.logging.LogFactory”
Thank you very much for this, many people are having this problem, but indeed nowhere else have been the correct solution published.