No implementation defined for org.apache.commons.logging.LogFactory
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.
Wrong Solution
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.
Right Solution
Solution: Running an Axis SOAP client in Domino [or DB2]
My DB2 is installed into C:\Program Files\IBM\SQLLIB
1. Copy all your JARs to C:\Program Files\IBM\SQLLIB\java\jdk\jre\lib\ext
2. Open C:\Program Files\IBM\SQLLIB\java\jdk\jre\lib\security\
3. Open java.policy
4. Add:
permission java.util.PropertyPermission "java.protocol.handler.pkgs", "write";
5. Restart DB2

