OSB/OSR/OER in One Domain - QName violates loader constraints
- by John Graves
For demos, testing and prototyping, I wanted a single domain which contained three servers:OSB - Oracle Service BusOSR - Oracle Service RegistryOER - Oracle Enterprise Repository
These three can work together to help with service governance in an enterprise. When building out the domain, I found errors in the OSR server due to some conflicting classes from the OSB. This wouldn't be an issue if each server was given a unique classpath setting with the node manager, but I was having the node manager use the standard startup scripts.
The domain's bin/setDomainEnv.sh script has a large set of extra libraries added for OSB which look like this:
if [ "${POST_CLASSPATH}" != "" ] ; then
POST_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jrf_11.1.1/jrf.jar${CLASSPATHSEP}${POST_CLASSPATH}"
export POST_CLASSPATH
else
POST_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jrf_11.1.1/jrf.jar"
export POST_CLASSPATH
fi
if [ "${PRE_CLASSPATH}" != "" ] ; then
PRE_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jdbc_11.1.1/ojdbc6dms.jar${CLASSPATHSEP}${PRE_CLASSPATH}"
export PRE_CLASSPATH
else
PRE_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jdbc_11.1.1/ojdbc6dms.jar"
export PRE_CLASSPATH
fi
POST_CLASSPATH="${POST_CLASSPATH}${CLASSPATHSEP}/oracle/fmwhome/Oracle_OSB1/soa/modules/oracle.soa.common.adapters_11.1.1/oracle.soa.common.adapters.jar\
${CLASSPATHSEP}${ALSB_HOME}/lib/version.jar\
${CLASSPATHSEP}${ALSB_HOME}/lib/alsb.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-ant.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-common.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-core.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-dameon.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/classes${CLASSPATHSEP}\
${ALSB_HOME}/lib/external/log4j_1.2.8.jar${CLASSPATHSEP}\
${DOMAIN_HOME}/config/osb"
I didn't take the time to sort out exactly which jar was causing the problem, but I simply surrounded this block with a conditional statement:
if [ "${SERVER_NAME}" == "osr_server1" ] ; then POST_CLASSPATH=""else
if [ "${POST_CLASSPATH}" != "" ] ; then
POST_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jrf_11.1.1/jrf.jar${CLASSPATHSEP}${POST_CLASSPATH}"
export POST_CLASSPATH
else
POST_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jrf_11.1.1/jrf.jar"
export POST_CLASSPATH
fi
if [ "${PRE_CLASSPATH}" != "" ] ; then
PRE_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jdbc_11.1.1/ojdbc6dms.jar${CLASSPATHSEP}${PRE_CLASSPATH}"
export PRE_CLASSPATH
else
PRE_CLASSPATH="${COMMON_COMPONENTS_HOME}/modules/oracle.jdbc_11.1.1/ojdbc6dms.jar"
export PRE_CLASSPATH
fi
POST_CLASSPATH="${POST_CLASSPATH}${CLASSPATHSEP}/oracle/fmwhome/Oracle_OSB1/soa/modules/oracle.soa.common.adapters_11.1.1/oracle.soa.common.adapters.jar\
${CLASSPATHSEP}${ALSB_HOME}/lib/version.jar\
${CLASSPATHSEP}${ALSB_HOME}/lib/alsb.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-ant.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-common.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-core.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/lib/j2ssh-dameon.jar\
${CLASSPATHSEP}${ALSB_HOME}/3rdparty/classes${CLASSPATHSEP}\
${ALSB_HOME}/lib/external/log4j_1.2.8.jar${CLASSPATHSEP}\
${DOMAIN_HOME}/config/osb"
fi
I could have also just done an if [ ${SERVER_NAME} = "osb_server1" ], but I would have also had to include the AdminServer because they are needed there too. Since the oer_server1 didn't mind, I did the negative case as shown above.
To help others find this post, I'm including the error that was reported in the OSR server before I made this change.
####<Mar 30, 2012 4:20:28 PM EST> <Error> <HTTP> <localhost.localdomain> <osr_server1> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <11d1def534ea1be0:30e96542:13662023753:-8000-000000000000001c> <1333084828916> <BEA-101017> <[ServletContext@470316600[app:registry module:registry.war path:/registry spec-version:null]] Root cause of ServletException.
java.lang.LinkageError: Class javax/xml/namespace/QName violates loader constraints
at com.idoox.wsdl.extensions.PopulatedExtensionRegistry.<init>(PopulatedExtensionRegistry.java:84)
at com.idoox.wsdl.factory.WSDLFactoryImpl.newDefinition(WSDLFactoryImpl.java:61)
at com.idoox.wsdl.xml.WSDLReaderImpl.parseDefinitions(WSDLReaderImpl.java:419)
at com.idoox.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:309)
at com.idoox.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:272)
at com.idoox.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:198)
at com.idoox.wsdl.util.WSDLUtil.readWSDL(WSDLUtil.java:126)
at com.systinet.wasp.admin.PackageRepositoryImpl.validateServicesNamespaceAndName(PackageRepositoryImpl.java:885)
at com.systinet.wasp.admin.PackageRepositoryImpl.registerPackage(PackageRepositoryImpl.java:807)
at com.systinet.wasp.admin.PackageRepositoryImpl.updateDir(PackageRepositoryImpl.java:611)
at com.systinet.wasp.admin.PackageRepositoryImpl.updateDir(PackageRepositoryImpl.java:643)
at com.systinet.wasp.admin.PackageRepositoryImpl.update(PackageRepositoryImpl.java:553)
at com.systinet.wasp.admin.PackageRepositoryImpl.init(PackageRepositoryImpl.java:242)
at com.idoox.wasp.ModuleRepository.loadModules(ModuleRepository.java:198)
at com.systinet.wasp.WaspImpl.boot(WaspImpl.java:383)
at org.systinet.wasp.Wasp.init(Wasp.java:151)
at com.systinet.transport.servlet.server.Servlet.init(Unknown Source)
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64)
at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:244)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)