Hi, in the last weeks we have no longer observed these "null" problems. Unfortunately the performance especially when searching users by attribute values is not great. I tried to summarize the situation in a dba.stackexchange.com question [1]. Maybe someone from this list can give a syncope (or general DBA/MariaDB) perspective to this problem.
[1] https://dba.stackexchange.com/questions/347401 Mit freundlichen Grüßen Clemens (Bergmann) -- Clemens Bergmann [er/ihm; he/him] Gruppe Nutzermanagement und Entwicklung Technische Universität Darmstadt Hochschulrechenzentrum, Alexanderstraße 2, 64283 Darmstadt Tel. +49 6151 16 71184 http://www.hrz.tu-darmstadt.de/ > -----Original Message----- > From: Feder, Stephan <stephan.fe...@tu-darmstadt.de> > Sent: Dienstag, 17. Juni 2025 12:41 > To: user@syncope.apache.org > Subject: Re: "dataType" is null / PlainSchemaDAO.find() > > Hello, Francesco, > > Thanks for your reply. > > MariaDB is a given right now, and upgrading to Syncope 4.0.0 is planned for > the near future, but we will adjust the database software and settings and > give it a try. > > Kind regards > > Stephan > > On Mon, Jun 16, 2025 at 12:21:28PM +0200, Francesco Chicchiriccò wrote: > >Hi Stephan, > >sorry for late reply. > > > >I believe your issue is... MariaDB, especially under load. > > > >We have verified that it is by far the less performant DBMS with Syncope > >and it also shows some limitations when enabling the JSON support [1], > >which can lead to the errors reported about db metadata. > > > >I would at least ensure to: > > > >1. run the latest MariaDB server (11.8.2 as it seems) and JDBC driver > >(3.5.3 at present) > > > >2. configure an adequate size for the db connection pool, e.g. increase the > >default values of > > > >persistence.domain[0].poolMaxActive=20 > >persistence.domain[0].poolMinIdle=5 > > > >in your core-something.properties where "something" is the Spring Boot > >profile you are currently using. > > > >3. upgrade to Syncope 4.0.0 as soon as possible, especially for a new > >project > > > >HTH > >Regards. > > > >[1] https://syncope.apache.org/docs/3.0/reference-guide.html#mariadb- > json > > > >Il giorno mer 11 giu 2025 alle ore 13:18 Feder, Stephan < > >stephan.fe...@tu-darmstadt.de> ha scritto: > > > >> Hello, > >> > >> On Syncope 3.0.12, I have (probably related) problems under, and even > >> after, heavy load: > >> > >> First problem: > >> > >> org.apache.openjpa.persistence.PersistenceException: Cannot invoke > >> "org.mariadb.jdbc.client.DataType.getColumnConstructor()" because > >> "dataType" is null > >> at org.apache.openjpa.kernel.BrokerImpl.findAll(BrokerImpl.java:1254) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.BrokerImpl.findAll(BrokerImpl.java:1139) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.AbstractPCData.toRelationFields(AbstractPCData.j > ava:222) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.AbstractPCData.toNestedFields(AbstractPCData.ja > va:189) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> > org.apache.openjpa.kernel.AbstractPCData.toField(AbstractPCData.java:79) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > org.apache.openjpa.kernel.PCDataImpl.loadField(PCDataImpl.java:220) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.PCDataImpl.load(PCDataImpl.java:165) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheS > toreManager.java:384) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStore > Manager.java:123) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.jav > a:59) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1118) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1076) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:998) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.j > ava:1077) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:305) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:25 > 37) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.loadEagerJoin(Rel > ationFieldStrategy.java:743) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.meta.FieldMapping.loadEagerJoin(FieldMapping.jav > a:954) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.j > ava:1147) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.j > ava:1103) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStore > Manager.java:430) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreMana > ger.java:325) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStore > Manager.java:123) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheS > toreManager.java:392) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> > >> > org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStore > Manager.java:123) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.jav > a:59) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1118) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1076) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:992) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.DelegatingBroker.find(DelegatingBroker.java:246) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.j > ava:582) > >> ~[openjpa-persistence-3.2.2.jar:3.2.2] > >> at > >> > org.apache.syncope.core.persistence.jpa.dao.JPAPlainSchemaDAO.find(JPAPl > ainSchemaDAO.java:61) > >> ~[syncope-core-persistence-jpa-3.0.12.jar:3.0.12] > >> at > >> > org.apache.syncope.core.persistence.jpa.dao.JPAPlainSchemaDAO.find(JPAPl > ainSchemaDAO.java:41) > >> ~[syncope-core-persistence-jpa-3.0.12.jar:3.0.12] > >> at > >> > org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUPlainAttr.getSc > hema(JPAJSONUPlainAttr.java:96) > >> ~[syncope-core-persistence-jpa-json-3.0.12.jar:3.0.12] > >> at > >> > org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUPlainAttr.getSc > hema(JPAJSONUPlainAttr.java:44) > >> ~[syncope-core-persistence-jpa-json-3.0.12.jar:3.0.12] > >> at > >> > org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener.lambd > a$json2list$0(JPAJSONEntityListener.java:39) > >> ~[syncope-core-persistence-jpa-json-3.0.12.jar:3.0.12] > >> at > >> > java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.ja > va:178) > >> ~[?:?] > >> at > >> > java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.j > ava:1625) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:50 > 9) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipelin > e.java:499) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEac > hOps.java:150) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential > (ForEachOps.java:173) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:23 > 4) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:5 > 96) > >> ~[?:?] > >> at > >> > org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener.json2li > st(JPAJSONEntityListener.java:51) > >> ~[syncope-core-persistence-jpa-json-3.0.12.jar:3.0.12] > >> at > >> > org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUserListener.rea > d(JPAJSONUserListener.java:46) > >> ~[syncope-core-persistence-jpa-json-3.0.12.jar:3.0.12] > >> at jdk.internal.reflect.GeneratedMethodAccessor349.invoke(Unknown > >> Source) ~[?:?] > >> at > >> > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Delegati > ngMethodAccessorImpl.java:43) > >> ~[?:?] > >> at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?] > >> at > >> > org.apache.openjpa.event.BeanLifecycleCallbacks.makeCallback(BeanLifecycle > Callbacks.java:86) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.event.LifecycleEventManager.makeCallbacks(LifecycleEve > ntManager.java:351) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.event.LifecycleEventManager.fireEvent(LifecycleEventMa > nager.java:311) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.BrokerImpl.fireLifecycleEvent(BrokerImpl.java:877) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.StateManagerImpl.postLoad(StateManagerImpl.ja > va:3483) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.StateManagerImpl.postLoad(StateManagerImpl.ja > va:3461) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.j > ava:3304) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.StateManagerImpl.load(StateManagerImpl.java:4 > 52) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1086) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:998) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.j > ava:1077) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.j > ava:1077) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:305) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:25 > 37) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:298) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObjec > t(InstanceResultObjectProvider.java:60) > >> ~[openjpa-jdbc-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.datacache.QueryCacheStoreQuery$CachingResultObject > Provider.getResultObject(QueryCacheStoreQuery.java:717) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.getResult > Object(QueryImpl.java:2193) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:38) > >> ~[openjpa-lib-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1314) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1061) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:911) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:842) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:60 > 1) > >> ~[openjpa-kernel-3.2.2.jar:3.2.2] > >> at > org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:297) > >> ~[openjpa-persistence-3.2.2.jar:3.2.2] > >> at > >> > org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:314 > ) > >> ~[openjpa-persistence-3.2.2.jar:3.2.2] > >> at > >> > org.apache.syncope.core.persistence.jpa.dao.JPAUserDAO.findAll(JPAUserDA > O.java:277) > >> ~[syncope-core-persistence-jpa-3.0.12.jar:3.0.12] > >> ... > >> > >> > >> As far as Syncope is concerned, the step that ultimately fails is > >> JPAPlainSchemaDAO.find(). As this method only has a string argument I do > >> not see what I could have done to make that call fail. > >> > >> Second problem: > >> > >> > org.apache.syncope.core.persistence.api.attrvalue.validation.ParsingValidatio > nException: > >> While trying to parse '4589 at > >> > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue.parseV > alue(AbstractPlainAttrValue.java:19 > >> at > >> > org.apache.syncope.core.persistence.jpa.attrvalue.validation.AbstractValidato > r.validate(AbstractValidator.java: > >> at > >> > org.apache.syncope.core.persistence.jpa.attrvalue.validation.DefaultPlainAttr > ValidationManager.validate(Default > >> at > >> > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr.add(Abstrac > tPlainAttr.java:73) > >> ~[syncope-core- at > >> > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr.add(Abstrac > tPlainAttr.java:97) > >> ~[syncope-core- at > >> > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.lamb > da$fillAttr$3(AbstractAnyDataBinder.ja > >> at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] > >> at > >> > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.fillAtt > r(AbstractAnyDataBinder.java:264) > >> ~ at > >> > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.lamb > da$fill$18(AbstractAnyDataBinder.java: > >> at > >> > java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps > .java:183) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.ja > va:179) > >> ~[?:?] > >> at > >> > java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java > :1707) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:50 > 9) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipelin > e.java:499) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEac > hOps.java:150) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential > (ForEachOps.java:173) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:23 > 4) > >> ~[?:?] > >> at > >> > java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:5 > 96) > >> ~[?:?] > >> at > >> > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.fill(A > bstractAnyDataBinder.java:553) > >> ~[syn at > >> > org.apache.syncope.core.provisioning.java.data.UserDataBinderImpl.create( > UserDataBinderImpl.java:433) > >> ~[syncope at > >> jdk.internal.reflect.GeneratedMethodAccessor298.invoke(Unknown > Source) > >> ~[?:?] > >> at > >> > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Delegati > ngMethodAccessorImpl.java:43) > >> ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:569) > ~[?:?] > >> at > >> > org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(A > opUtils.java:344) > >> ~[spring-aop-5.3.39. at > >> > org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoin > point(ReflectiveMethodInvocation.java:19 > >> at > >> > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R > eflectiveMethodInvocation.java:163) > >> ~[spr at > >> > org.springframework.transaction.interceptor.TransactionInterceptor$1.procee > dWithInvocation(TransactionIntercept > >> at > >> > org.springframework.transaction.interceptor.TransactionAspectSupport.invok > eWithinTransaction(TransactionAspectS > >> at > >> > org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr > ansactionInterceptor.java:119) > >> ~[sp at > >> > org.apache.syncope.core.persistence.jpa.spring.DomainTransactionIntercepto > r.invoke(DomainTransactionInterceptor > >> at > >> > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R > eflectiveMethodInvocation.java:186) > >> ~[spr at > >> > org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynam > icAopProxy.java:241) > >> ~[spring-aop-5.3.39.ja at > jdk.proxy3/jdk.proxy3.$Proxy171.create(Unknown > >> Source) ~[?:?] > >> at > >> org.apache.syncope.core.flowable.task.Create.doExecute(Create.java:45) > >> ~[syncope-ext-flowable-bpmn-3.0.12.jar:3 at > >> > org.apache.syncope.core.flowable.task.FlowableServiceTask.execute(Flowable > ServiceTask.java:37) > >> ~[syncope-ext-fl... > >> Caused by: java.time.format.DateTimeParseException: Text '524831332' > could > >> not be parsed at index 0 > >> at > >> > java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFor > matter.java:2052) > >> ~[?:?] > >> at > >> > java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java > :1954) > >> ~[?:?] > >> at java.base/java.time.LocalDate.parse(LocalDate.java:430) ~[?:?] > >> at > >> > org.apache.syncope.core.provisioning.api.utils.FormatUtils.parseDate(Format > Utils.java:135) > >> ~[syncope-core-provi at > >> > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue.parseV > alue(AbstractPlainAttrValue.java:17 > >> > >> The funny thing is that of course, uidNumber is NOT defined to be a date. > >> The schema definition that is used to parse the value seems to not match > >> the schema of the value. After some research we found that > >> PlainSchemaDAO.find() is used to get the schema definition, so this could > >> be related to the first problem. > >> > >> Are there known issues with PlainSchemaDAO.find()? Did anyone > experience > >> anything similar? > >> > >> Kind regards > >> > >> Stephan > >> > > > > > >-- > >Francesco Chicchiriccò > > > >Tirasa - Open Source Excellence > >http://www.tirasa.net/ > > > >Member at The Apache Software Foundation > >Syncope, Cocoon, Olingo, CXF, OpenJPA > >https://about.me/ilgrosso <http://home.apache.org/~ilgrosso/>
smime.p7s
Description: S/MIME cryptographic signature