Shibboleth IdP plugin release - JDBC StorageService
John C. Pfeifer
pfeifer at umd.edu
Wed Jul 6 12:36:31 UTC 2022
I run Postgres w/ Commons DBCP in my production environment. I just tried the new plugin in my local development env and didn’t see any issue with logging…but there are issues. I see in the logs:
shib-idp;idp-process.log;net.shibboleth.idp.session.SessionException: Session IDs are too large for StorageService, check configuration
In idp.properites:
idp.session.StorageService = shibboleth.JPAStorageService
The storage service configuration (post conversion) in global.xml is:
<bean id="shibboleth.JPAStorageService"
parent="shibboleth.JDBCStorageService"
p:cleanupInterval="%{idp.storage.cleanupInterval:PT10M}"
p:dataSource-ref="shibboleth.JPAStorageService.DataSource"/>
<bean id="shibboleth.JPAStorageService.DataSource"
class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" lazy-init="true"
p:driverClassName="org.postgresql.Driver"
p:url="%{edu.umd.idp.dbConnection}"
p:password="%{idp.postgres.password}" />
//
John Pfeifer
Division of Information Technology
University of Maryland, College Park
> On Jul 6, 2022, at 6:15 AM, Martin Hitschel via users <users at shibboleth.net> wrote:
>
> Dear list,
>
> by now we've had two customers trying the new plugin. One with MySQL and
> Hikari, that one works well with the new plugin.
>
> The other has PostGres and Tomcat DBCP2, that one does not work. Upon
> conversion of global.xml to the new plugin and Tomcat restart, the IdP
> does not log anymore to the process log. In the journalctl, we see no
> real error except that it can't find the class for Logging and the
> memoryStorageServive class, which seems strange to us.
>
> Here's global.xml before:
>
> (...)
>
> <bean id="shibboleth.PostgreSQLDataSource"
> class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"
> p:driverClassName="org.postgresql.Driver"
> p:url="jdbc:postgresql://localhost/shibboleth"
> p:username="shibboleth"
> p:password="%{psql.password}"
> p:validationQuery="select 1"
> p:validationQueryTimeout="5" />
>
> <bean id="shibboleth.JPAStorageService"
> class="org.opensaml.storage.impl.JPAStorageService"
> p:cleanupInterval="%{idp.storage.cleanupInterval:PT10M}"
>
> c:factory-ref="shibboleth.JPAStorageService.entityManagerFactory" />
>
> <bean id="shibboleth.JPAStorageService.entityManagerFactory"
>
> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
> <property name="packagesToScan" value="org.opensaml.storage.impl"/>
> <property name="dataSource" ref="shibboleth.PostgreSQLDataSource"/>
> <property name="jpaVendorAdapter"
> ref="shibboleth.JPAStorageService.JPAVendorAdapter"/>
> <property name="jpaDialect">
> <bean
> class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
> </property>
> </bean>
>
> <bean id="shibboleth.JPAStorageService.JPAVendorAdapter"
>
> class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
> p:generateDdl="true"
> p:database="POSTGRESQL"
> p:databasePlatform="org.hibernate.dialect.PostgreSQL9Dialect" />
>
> (...)
>
> After conversion, it looks like this:
>
> (...)
>
> <bean id="shibboleth.PostgreSQLDataSource"
> class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"
> p:driverClassName="org.postgresql.Driver"
> p:url="jdbc:postgresql://localhost/shibboleth"
> p:username="shibboleth"
> p:password="%{psql.password}"
> p:validationQuery="select 1"
> p:validationQueryTimeout="5" />
>
> <bean id="shibboleth.JPAStorageService"
> parent="shibboleth.JDBCStorageService"
> p:cleanupInterval="%{idp.storage.cleanupInterval:PT10M}"
> p:dataSource-ref="shibboleth.PostgreSQLDataSource"/>
> (...)
>
> There are also httpclient beans in global.xml, but they do not seem to
> matter. Actually, journalctl outputs that the correct number of beans
> have been loaded from the file.
>
> We've tried back and forth, with the old config the IdP logs and works,
> with the new it does not log and does not write/read to/from the database.
>
> We've also tried Hikari, that had the same issues.
>
> Cheers
>
> Martin
>
>
> Am 14.06.22 um 17:31 schrieb Cantor, Scott via announce:
>> The Shibboleth Project has released a new plugin for the IdP software
>> that replaces the built-in but now deprecated Hibernate/JPA-based
>> storage option with a JDBC-based implementation.
>>
>> https://shibboleth.atlassian.net/wiki/spaces/IDPPLUGINS/pages/2989096970/JDBCStorageService
>>
>> This plugin is a drop in replacement for the JPA version, same
>> database schema and essentially similar configuration (docs describe
>> how to switch). Due to reliability challenges and the lack of
>> appropriately signed Java artifacts for Hibernate, we will be removing
>> the original code in the next major IdP release (V5) sometime next year.
>>
>> We are making the replacement available now so people can move to it
>> ahead of time (and help find any bugs so we can get it into shape). It
>> also features control over the SQL for special cases and includes
>> internal locking at the code level to reduce contention at least
>> within a particular server node in a cluster in the hopes that it will
>> reduce the constant "deadlocks that aren't actually deadlocks" caused
>> by modern database mis-design.
>>
>> We hope it will be more reliable (better performance is not the goal,
>> stability is), but that locking is optional and not on by default.
>>
>> Bugs can be reported against the JJDBC project.
>>
>> Enjoy,
>> -- Scott
>>
>> --
>> To unsubscribe from this list send an email to
>> announce-unsubscribe at shibboleth.net
>
> --
> Dr. Martin Hitschel, Senior Consultant
>
> DAASI International
> Europaplatz 3 D-72072 Tübingen Germany
> phone: +49 7071 407109-0
> fax: +49 7071 407109-9 email: martin.hitschel at daasi.de
> web: www.daasi.de
>
> Sitz der Gesellschaft: Tübingen
> Registergericht: Amtsgericht Stuttgart, HRB 382175
> Geschäftsleitung: Peter Gietz
>
> --
> For Consortium Member technical support, see https://shibboleth.atlassian.net/wiki/x/ZYEpPw
> To unsubscribe from this list send an email to users-unsubscribe at shibboleth.net
More information about the users
mailing list