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