[keycloak-user] Upgrade from 1.1.0.Final to 1.4.0.Final - Liquibase script failing

Stephen Flynn stephen.flynn at jftechnology.com
Mon Aug 3 12:22:01 EDT 2015


Hi Marek,

I ran the upgrades incrementally (1.1.0.Final to 1.2.0.Final, 1.2.0.Final to 
1.3.1.Final,etc) and fixed both issues in the 1.2.0.Final source after which 
everything ran smoothly.

So I can't say that I'm 100% sure that a single upgrade from 1.1.0.Final to 
1.4.0.Final would work if you fixed the BigDecimal issue in the 1.4.0.Final 
source - but, without trying it out, I would be very surprised if it didn't work 
fine (assuming the second issue is fixed already).

BTW - both issues will also break upgradesfrom 1.1.0.Final to 1.2.0.Final and 
1.3.1.Final (against Oracle) and, though I haven't explicitly tested it, I would 
very surprised if the second issue doesn't break fresh installs of1.2.0.Final 
and 1.3.1.Final as well.

best rgds,

Steve F.



===================================================

*Stephen Flynn*

*Director, JF Technology (UK) Ltd*

Cell (UK) : 	+44 7768 003 882
Phone : 	+44 20 7833 8346
IM : 	xmpp:stephen.flynn at jftechnology.com
IM : 	aim:stephen.flynn at jftechnology.com
Website : 	http://www.jftechnology.com
Tech support : 	support at jftechnology.com <mailto:support at jftechnology.com>

===================================================

On 03/08/2015 16:58, Marek Posolda wrote:
> The second issue is already fixed in latest Keycloak master and in 1.4.0.Final 
> sources. That leaves just the BigDecimal issue. So if you fix just the 
> BigDecimal issue in JpaUpdate1_2_0_Beta1.java in 1.4 sources, are you able to 
> upgrade from 1.1.0.Final to 1.4.0.Final ?
>
> Thanks,
> Marek
>
> On 3.8.2015 17:42, Stephen Flynn wrote:
>>
>> In case this helps...
>>
>> I had a quick peek at the source - there were two issues that made Oracle 
>> choke in my environment. First the BigDecimal issue in the custom change 
>> JpaUpdate1_2_0_Beta1.java as initially reported. Secondly in the custom 
>> change JpaUpdate1_2_0_CR1.java there was a prepared statement that Oracle 10 
>> doesn't like as it expects a boolean 'TRUE' to be represented by the 
>> numerical value '1'.
>>
>> I hacked the following two lines and that appears to fix the upgrade to 
>> 1.2.0.Final (for Oracle10 at least). The remaining liquibase scripts then ran 
>> without issue.
>>
>> best rgds,
>>
>> Steve F.
>>
>>
>>
>> diff --git 
>> a/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_Beta1.javab/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_Beta1.java
>> index 89e7885..895a785 100644
>> --- 
>> a/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_Beta1.java
>> +++ 
>> b/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_Beta1.java
>> @@ -293,7 +293,7 @@
>>                      }
>>
>>                      Object acmObj = resultSet.getObject("ALLOWED_CLAIMS_MASK");
>> -                    long mask = (acmObj != null) ? (Long) acmObj : 
>> ClaimMask.ALL;
>> +                    long mask = (acmObj != null) ? ((Number) 
>> acmObj).longValue() : ClaimMask.ALL;
>>
>>                      MigrationProvider migrationProvider = 
>> this.kcSession.getProvider(MigrationProvider.class);
>>                      List<ProtocolMapperRepresentation> protocolMappers = 
>> migrationProvider.getMappersForClaimMask(mask);
>>
>>
>> diff --git 
>> a/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_CR1.javab/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_CR1.java
>> index 5c8a2eb..dbeedf7 100644
>> --- 
>> a/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_CR1.java
>> +++ 
>> b/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_2_0_CR1.java
>> @@ -17,7 +17,7 @@
>>          String realmClientTableName = 
>> database.correctObjectName("REALM_CLIENT", Table.class);
>>
>>          try {
>> -            PreparedStatement statement = 
>> jdbcConnection.prepareStatement("select CLIENT.REALM_ID, CLIENT.ID CLIENT_ID 
>> from CLIENT where CLIENT.CONSENT_REQUIRED = true");
>> +            PreparedStatement statement = 
>> jdbcConnection.prepareStatement("select CLIENT.REALM_ID, CLIENT.ID CLIENT_ID 
>> from CLIENT where CLIENT.CONSENT_REQUIRED = 1");
>>              try {
>>                  ResultSet resultSet = statement.executeQuery();
>>                  try {
>>
>>
>> ===================================================
>>
>> *Stephen Flynn*
>>
>> *Director, JF Technology (UK) Ltd*
>>
>> Cell (UK) : 	+44 7768 003 882
>> Phone : 	+44 20 7833 8346
>> IM : 	xmpp:stephen.flynn at jftechnology.com
>> IM : 	aim:stephen.flynn at jftechnology.com
>> Website : 	http://www.jftechnology.com
>> Tech support : 	support at jftechnology.com <mailto:support at jftechnology.com>
>>
>> ===================================================
>>
>> On 03/08/2015 15:53, Bill Burke wrote:
>>> I could do a 1.4.1 when you fix it.
>>>
>>> On 8/3/2015 10:51 AM, Marek Posolda wrote:
>>>> Thanks for the detailed report. I've created JIRA for this and will be
>>>> fixed for next release https://issues.jboss.org/browse/KEYCLOAK-1725 .
>>>>
>>>> Marek
>>>>
>>>> On 2.8.2015 15:11, Bill Burke wrote:
>>>>> You probably have to export your database to json and re-import it until
>>>>> we track this down.
>>>>>
>>>>> On 8/1/2015 11:19 AM, Stephen Flynn wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> I'm trying to upgrade Keycloak from 1.1.0.Final to 1.4.0.Final.
>>>>>>
>>>>>> The liquibase db scripts are failing. The particular script that is
>>>>>> failing is 'jpa-changelog-1.2.0.Beta1.xml' with the exception 'Caused
>>>>>> by: java.lang.ClassCastException: java.math.BigDecimal cannot be cast to
>>>>>> java.lang.Long'. More stack trace below.
>>>>>>
>>>>>> Any ideas as to why this might be happening ? Is there anything else I
>>>>>> can provide to give more insight ?
>>>>>>
>>>>>> best rgds,
>>>>>>
>>>>>> Steve F.
>>>>>>
>>>>>>
>>>>>>          Environment is...
>>>>>>
>>>>>>    * wildfly-9.0.1.Final + keycloak-overlay-1.4.0.Final
>>>>>>    * jdk1.7.0_51
>>>>>>    * Oracle 10 + odbcj6.jar (11.2.0.2.0)
>>>>>>
>>>>>>
>>>>>>          Liquibase change log from the DB
>>>>>>
>>>>>>    *   1.0.0.Final sthorger at redhat.com
>>>>>>      META-INF/jpa-changelog-1.0.0.Final.xml 2014-12-04
>>>>>>      00:55:28.95072              1 EXECUTED
>>>>>>    *   1.1.0.Beta1 sthorger at redhat.com
>>>>>>      META-INF/jpa-changelog-1.1.0.Beta1.xml 2014-12-04
>>>>>>      00:55:30.070692             2 EXECUTED
>>>>>>    *   1.1.0.Final sthorger at redhat.com
>>>>>>      META-INF/jpa-changelog-1.1.0.Final.xml 2015-01-30
>>>>>>      00:55:27.065618             3 EXECUTED
>>>>>>
>>>>>>
>>>>>>          Error message in log...
>>>>>>
>>>>>> 15:12:31,238 INFO [org.keycloak.services.resources.KeycloakApplication]
>>>>>> (ServerService Thread Pool -- 69) Load config from
>>>>>> /apps/wildfly/wildfly-9.0.1.Final/standalone/configuration/keycloak-server.json 
>>>>>>
>>>>>>
>>>>>> 15:12:34,416 INFO
>>>>>> [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider]
>>>>>>
>>>>>> (ServerService Thread Pool -- 69) Updating database
>>>>>> 15:12:35,982 ERROR
>>>>>> [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider]
>>>>>>
>>>>>> (ServerService Thread Pool -- 69) Change Set
>>>>>> META-INF/jpa-changelog-1.2.0.Beta1.xml::1.2.0.Beta1::psilva at redhat.com
>>>>>> failed.  Error: liquibase.exception.CustomChangeException: Update
>>>>>> 1.2.0.Beta1: Exception when updating data from previous version:
>>>>>> liquibase.exception.UnexpectedLiquibaseException:
>>>>>> liquibase.exception.CustomChangeException: Update 1.2.0.Beta1: Exception
>>>>>> when updating data from previous version
>>>>>>           at
>>>>>> liquibase.change.custom.CustomChangeWrapper.generateStatements(CustomChangeWrapper.java:185) 
>>>>>>
>>>>>>
>>>>>>           at
>>>>>> liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1208) 
>>>>>>
>>>>>>
>>>>>>           at liquibase.changelog.ChangeSet.execute(ChangeSet.java:550)
>>>>>>           at
>>>>>> liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:43)
>>>>>>           at
>>>>>> liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73)
>>>>>>           at liquibase.Liquibase.update(Liquibase.java:200)
>>>>>>           at liquibase.Liquibase.update(Liquibase.java:181)
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider.update(LiquibaseJpaUpdaterProvider.java:84) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-liquibase-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.lazyInit(DefaultJpaConnectionProviderFactory.java:150) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.create(DefaultJpaConnectionProviderFactory.java:39) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.create(DefaultJpaConnectionProviderFactory.java:27) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:99) 
>>>>>>
>>>>>>
>>>>>> [keycloak-services-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.models.jpa.JpaRealmProviderFactory.create(JpaRealmProviderFactory.java:34) 
>>>>>>
>>>>>>
>>>>>> [keycloak-model-jpa-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.models.jpa.JpaRealmProviderFactory.create(JpaRealmProviderFactory.java:16) 
>>>>>>
>>>>>>
>>>>>> [keycloak-model-jpa-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:99) 
>>>>>>
>>>>>>
>>>>>> [keycloak-services-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.models.cache.DefaultCacheRealmProvider.getDelegate(DefaultCacheRealmProvider.java:70) 
>>>>>>
>>>>>>
>>>>>> [keycloak-invalidation-cache-model-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.models.cache.DefaultCacheRealmProvider.getRealm(DefaultCacheRealmProvider.java:163) 
>>>>>>
>>>>>>
>>>>>> [keycloak-invalidation-cache-model-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.services.managers.ApplianceBootstrap.bootstrap(ApplianceBootstrap.java:40) 
>>>>>>
>>>>>>
>>>>>> [keycloak-services-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.services.managers.ApplianceBootstrap.bootstrap(ApplianceBootstrap.java:31) 
>>>>>>
>>>>>>
>>>>>> [keycloak-services-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.services.resources.KeycloakApplication.setupDefaultRealm(KeycloakApplication.java:158) 
>>>>>>
>>>>>>
>>>>>> [keycloak-services-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.services.resources.KeycloakApplication.<init>(KeycloakApplication.java:88) 
>>>>>>
>>>>>>
>>>>>> [keycloak-services-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at
>>>>>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
>>>>>>
>>>>>>
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at
>>>>>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
>>>>>>
>>>>>>
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at
>>>>>> java.lang.reflect.Constructor.newInstance(Constructor.java:526)
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at
>>>>>> org.jboss.resteasy.core.ConstructorInjectorImpl.construct(ConstructorInjectorImpl.java:148) 
>>>>>>
>>>>>>
>>>>>> [resteasy-jaxrs-3.0.11.Final.jar:]
>>>>>>           at
>>>>>> org.jboss.resteasy.spi.ResteasyProviderFactory.createProviderInstance(ResteasyProviderFactory.java:2211) 
>>>>>>
>>>>>>
>>>>>> [resteasy-jaxrs-3.0.11.Final.jar:]
>>>>>>           at
>>>>>> org.jboss.resteasy.spi.ResteasyDeployment.createApplication(ResteasyDeployment.java:295) 
>>>>>>
>>>>>>
>>>>>> [resteasy-jaxrs-3.0.11.Final.jar:]
>>>>>>           at
>>>>>> org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:236)
>>>>>>
>>>>>> [resteasy-jaxrs-3.0.11.Final.jar:]
>>>>>>           at
>>>>>> org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:112) 
>>>>>>
>>>>>>
>>>>>> [resteasy-jaxrs-3.0.11.Final.jar:]
>>>>>>           at
>>>>>> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:36) 
>>>>>>
>>>>>>
>>>>>> [resteasy-jaxrs-3.0.11.Final.jar:]
>>>>>>           at
>>>>>> io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117) 
>>>>>>
>>>>>>
>>>>>> [undertow-servlet-1.2.9.Final.jar:1.2.9.Final]
>>>>>>           at
>>>>>> org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:78) 
>>>>>>
>>>>>>
>>>>>>           at
>>>>>> io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103) 
>>>>>>
>>>>>>
>>>>>> [undertow-servlet-1.2.9.Final.jar:1.2.9.Final]
>>>>>>           at
>>>>>> io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:230) 
>>>>>>
>>>>>>
>>>>>> [undertow-servlet-1.2.9.Final.jar:1.2.9.Final]
>>>>>>           at
>>>>>> io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:131) 
>>>>>>
>>>>>>
>>>>>> [undertow-servlet-1.2.9.Final.jar:1.2.9.Final]
>>>>>>           at
>>>>>> io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:511) 
>>>>>>
>>>>>>
>>>>>> [undertow-servlet-1.2.9.Final.jar:1.2.9.Final]
>>>>>>           at
>>>>>> org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:101) 
>>>>>>
>>>>>>
>>>>>>           at
>>>>>> org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82) 
>>>>>>
>>>>>>
>>>>>>           at
>>>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at
>>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
>>>>>>
>>>>>>
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at
>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
>>>>>>
>>>>>>
>>>>>> [rt.jar:1.7.0_51]
>>>>>>           at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
>>>>>>           at org.jboss.threads.JBossThread.run(JBossThread.java:320)
>>>>>> Caused by: liquibase.exception.CustomChangeException: Update
>>>>>> 1.2.0.Beta1: Exception when updating data from previous version
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.updater.liquibase.custom.JpaUpdate1_2_0_Beta1.generateStatementsImpl(JpaUpdate1_2_0_Beta1.java:43) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-liquibase-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.generateStatements(CustomKeycloakTask.java:79) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-liquibase-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> liquibase.change.custom.CustomChangeWrapper.generateStatements(CustomChangeWrapper.java:178) 
>>>>>>
>>>>>>
>>>>>>           ... 44 more
>>>>>> Caused by: java.lang.ClassCastException: java.math.BigDecimal cannot be
>>>>>> cast to java.lang.Long
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.updater.liquibase.custom.JpaUpdate1_2_0_Beta1.addDefaultProtocolMappers(JpaUpdate1_2_0_Beta1.java:296) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-liquibase-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           at
>>>>>> org.keycloak.connections.jpa.updater.liquibase.custom.JpaUpdate1_2_0_Beta1.generateStatementsImpl(JpaUpdate1_2_0_Beta1.java:41) 
>>>>>>
>>>>>>
>>>>>> [keycloak-connections-jpa-liquibase-1.4.0.Final.jar:1.4.0.Final]
>>>>>>           ... 46 more
>>>>>>
>>>>>> -- 
>>>>>> ===================================================
>>>>>>
>>>>>> *Stephen Flynn*
>>>>>>
>>>>>> *Director, JF Technology (UK) Ltd*
>>>>>>
>>>>>> Cell (UK) :     +44 7768 003 882
>>>>>> Phone :     +44 20 7833 8346
>>>>>> IM : xmpp:stephen.flynn at jftechnology.com
>>>>>> IM : aim:stephen.flynn at jftechnology.com
>>>>>> Website : http://www.jftechnology.com
>>>>>> Tech support : support at jftechnology.com
>>>>>> <mailto:support at jftechnology.com>
>>>>>>
>>>>>> ===================================================
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> keycloak-user mailing list
>>>>>> keycloak-user at lists.jboss.org
>>>>>> https://lists.jboss.org/mailman/listinfo/keycloak-user
>>>>>>
>>>>
>>>
>>
>>
>>
>> _______________________________________________
>> keycloak-user mailing list
>> keycloak-user at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/keycloak-user
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-user/attachments/20150803/5fb46c56/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stephen_flynn.vcf
Type: text/x-vcard
Size: 233 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/keycloak-user/attachments/20150803/5fb46c56/attachment-0001.vcf 


More information about the keycloak-user mailing list