IDP 2.4.5 and Oracle (container managed connection)

Marco Naimoli marco.naimoli at unipd.it
Thu Jul 14 04:04:46 EDT 2016


Hallo, my software versions are:
Shibboleth IDP: 2.4.5
Apache Tomcat: 6.0.45
Java 8
	
I'm trying to configure a dataconnector of type "RelationalDatabase"; DB 
is a Oracle RAC 11gr2; the dataconnector name
is "libretto"
The "Application Managed Connection" works well, but, following
directions found on pages
https://wiki.shibboleth.net/confluence/display/SHIB2/ResolverRDBMSDataConnector
and
https://wiki.shibboleth.net/confluence/display/SHIB2/OracleDBDataConnector
In the last page I read:
"Application Managed data connectors which use Oracle JDBC Thin driver 
seem to be losing connections after an idle period."

That's why I'd like to configure a "Container Managed Connection"
After configuration, IDP gives the following error
(found in idp-process.log)

-------------------------------------
08:57:47.900 - WARN 
[edu.internet2.middleware.shibboleth.common.config.service.ServletContextAttributeExporter:74] 
- This service may only be used when services are loaded within a web 
application context.
08:57:48.113 - ERROR 
[edu.internet2.middleware.shibboleth.common.config.attribute.resolver.dataConnector.RDBMSDataConnectorBeanDefinitionParser:126] 
- Unable to retrieve data source for data connector libretto from JNDI 
location java:comp/env/jdbc/oraidp using properties null
javax.naming.NoInitialContextException: Need to specify class name in 
environment or system property, or as an applet parameter, or in an 
application resource file:  java.naming.factory.initial
	at 
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) 
~[na:1.8.0_73]
	at 
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) 
~[na:1.8.0_73]
	at 
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350) 
~[na:1.8.0_73]
	at javax.naming.InitialContext.lookup(InitialContext.java:417) 
~[na:1.8.0_73]
	at 
edu.internet2.middleware.shibboleth.common.config.attribute.resolver.dataConnector.RDBMSDataConnectorBeanDefinitionParser.buildContainerManagedConnection(RDBMSDataConnectorBeanDefinitionParser.java:115) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.attribute.resolver.dataConnector.RDBMSDataConnectorBeanDefinitionParser.processConnectionManagement(RDBMSDataConnectorBeanDefinitionParser.java:90) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.attribute.resolver.dataConnector.RDBMSDataConnectorBeanDefinitionParser.doParse(RDBMSDataConnectorBeanDefinitionParser.java:65) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.attribute.resolver.AbstractResolutionPlugInBeanDefinitionParser.doParse(AbstractResolutionPlugInBeanDefinitionParser.java:68) 
[shibboleth-common-1.4.5.jar:na]
	at 
org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:84) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:56) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
edu.internet2.middleware.shibboleth.common.config.BaseSpringNamespaceHandler.parse(BaseSpringNamespaceHandler.java:92) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils.createBeanDefinition(SpringConfigurationUtils.java:181) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils.parseCustomElement(SpringConfigurationUtils.java:154) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils.parseCustomElements(SpringConfigurationUtils.java:233) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils.parseCustomElements(SpringConfigurationUtils.java:213) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.attribute.resolver.AttributeResolverBeanDefinitionParser.parse(AttributeResolverBeanDefinitionParser.java:53) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.BaseSpringNamespaceHandler.parse(BaseSpringNamespaceHandler.java:92) 
[shibboleth-common-1.4.5.jar:na]
	at 
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1297) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:141) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils.populateRegistry(SpringConfigurationUtils.java:89) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.BaseService.loadContext(BaseService.java:170) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.config.BaseReloadableService.initialize(BaseReloadableService.java:148) 
[shibboleth-common-1.4.5.jar:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[na:1.8.0_73]
	at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
~[na:1.8.0_73]
	at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
~[na:1.8.0_73]
	at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]
	at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_73]
	at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) 
[spring-beans-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) 
[spring-context-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) 
[spring-context-2.5.6.SEC03.jar:2.5.6.SEC03]
	at 
edu.internet2.middleware.shibboleth.common.attribute.AttributeAuthorityCLI.loadConfigurations(AttributeAuthorityCLI.java:206) 
[shibboleth-common-1.4.5.jar:na]
	at 
edu.internet2.middleware.shibboleth.common.attribute.AttributeAuthorityCLI.main(AttributeAuthorityCLI.java:95) 
[shibboleth-common-1.4.5.jar:na]
08:57:49.367 - ERROR 
[edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.RDBMSDataConnector:218] 
- RDBMS data connector libretto - Datasource is null
08:57:49.368 - ERROR 
[edu.internet2.middleware.shibboleth.common.config.BaseService:188] - 
Configuration was not loaded for shibboleth.AttributeResolver service, 
error creating components.  The root cause of this error was: 
edu.internet2.middleware.shibboleth.common.attribute.resolver.AttributeResolutionException: 
Datasource is null
-------------------------------------

I tried to change server.xml, context.xml , web.xml, but the result is
the same or other errors; and I've read that should be enough to change
$CATALINA_HOME/conf/Catalina/localhost/idp.xml
and shibboleth idp attribute-resolver.xml configuration file

idp.xml content is:
<Context docBase="/home/devidp/shibboleth-idp/war/idp.war"
          privileged="true"
          antiResourceLocking="false"
          antiJARLocking="false"
          unpackWAR="false"
          swallowOutput="true" >
   <Resource name="jdbc/oraidp"
      auth="Container"
      type="javax.sql.DataSource"
      driverClassName="oracle.jdbc.OracleDriver"
      validationQuery="SELECT 1 FROM dual"
      username="dbuser"
      password="dbpassword"
      url="jdbc:oracle:thin:@//db.server:1521/dbservice"
      maxActive="20" maxIdle="10" maxWait="-1" />
</Context>

I tried also a tnsnames like url definition, without luck.

attribute-resolver dataconnector:

     <resolver:DataConnector xsi:type="RelationalDatabase" 
xmlns="urn:mace:shibboleth:2.0:resolver:dc"
         id="libretto" >
      <ContainerManagedConnection 
resourceName="java:comp/env/jdbc/oraidp" />

      <QueryTemplate>
           <![CDATA[
                SELECT 1 AS A FROM DUAL
           ]]>
      </QueryTemplate>
     </resolver:DataConnector>

I tried also to use the <JNDIConnectionProperty> inside the 
<ContainerManagedConnection>
but I'm not sure of what value I should give to
java.naming.factory.initial
(I've tried
oracle.j2ee.iiop.IIOPInitialContextFactory
oracle.j2ee.rmi.RMIInitialContextFactory
oracle.j2ee.naming.ApplicationClientInitialContextFactory
but errors just change a bit:

-------------------------------------
14:48:24.509 - ERROR 
[edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.RDBMSDataConnector:218] 
- RDBMS data connector libretto - Datasource is null
14:48:24.509 - ERROR 
[edu.internet2.middleware.shibboleth.common.config.BaseService:188] - 
Configuration was not loaded for shibboleth.AttributeResolver service, 
error creating components.  The root cause of thi
s error was: 
edu.internet2.middleware.shibboleth.common.attribute.resolver.AttributeResolutionException: 
Datasource is null
14:48:58.017 - ERROR 
[edu.internet2.middleware.shibboleth.common.config.attribute.resolver.dataConnector.RDBMSDataConnectorBeanDefinitionParser:126] 
- Unable to retrieve data source for data connector libretto from JNDI 
location java:comp/env/jdbc/oraidp using properties 
{java.naming.factory.initial=oracle.j2ee.naming.ApplicationClientInitialContextFactory}
javax.naming.NoInitialContextException: Cannot instantiate class: 
oracle.j2ee.naming.ApplicationClientInitialContextFactory
         at 
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:674) 
~[na:1.8.0_73]
         at 
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) 
~[na:1.8.0_73]
-------------------------------------
)

Does anybody have a working configuration or point me into the right
direction ? Or: do I really need the ContainerManagedConnection ? Is it 
still true that Application Managed data connectors which use Oracle 
JDBC Thin driver seem to be losing connections after an idle period ?

Thank you
Marco


More information about the users mailing list