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.java:222) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.AbstractPCData.toNestedFields(AbstractPCData.java: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(DataCacheStoreManager.java:384) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:123) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java: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.java: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:2537) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.loadEagerJoin(RelationFieldStrategy.java:743) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.jdbc.meta.FieldMapping.loadEagerJoin(FieldMapping.java:954) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1147) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1103) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:430) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:325) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:123) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheStoreManager.java:392) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > > > org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:123) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java: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.java:582) > ~[openjpa-persistence-3.2.2.jar:3.2.2] > at > org.apache.syncope.core.persistence.jpa.dao.JPAPlainSchemaDAO.find(JPAPlainSchemaDAO.java:61) > ~[syncope-core-persistence-jpa-3.0.12.jar:3.0.12] > at > org.apache.syncope.core.persistence.jpa.dao.JPAPlainSchemaDAO.find(JPAPlainSchemaDAO.java:41) > ~[syncope-core-persistence-jpa-3.0.12.jar:3.0.12] > at > org.apache.syncope.core.persistence.jpa.entity.user.JPAJSONUPlainAttr.getSchema(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.getSchema(JPAJSONUPlainAttr.java:44) > ~[syncope-core-persistence-jpa-json-3.0.12.jar:3.0.12] > at > org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener.lambda$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.java:178) > ~[?:?] > at > java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) > ~[?:?] > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) > ~[?:?] > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) > ~[?:?] > at > java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.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:234) > ~[?:?] > at > java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) > ~[?:?] > at > org.apache.syncope.core.persistence.jpa.entity.JPAJSONEntityListener.json2list(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.read(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(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?] > at > org.apache.openjpa.event.BeanLifecycleCallbacks.makeCallback(BeanLifecycleCallbacks.java:86) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.event.LifecycleEventManager.makeCallbacks(LifecycleEventManager.java:351) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.event.LifecycleEventManager.fireEvent(LifecycleEventManager.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.java:3483) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.StateManagerImpl.postLoad(StateManagerImpl.java:3461) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:3304) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.StateManagerImpl.load(StateManagerImpl.java:452) > ~[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.java:1077) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java: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:2537) > ~[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.getResultObject(InstanceResultObjectProvider.java:60) > ~[openjpa-jdbc-3.2.2.jar:3.2.2] > at > org.apache.openjpa.datacache.QueryCacheStoreQuery$CachingResultObjectProvider.getResultObject(QueryCacheStoreQuery.java:717) > ~[openjpa-kernel-3.2.2.jar:3.2.2] > at > org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.getResultObject(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:601) > ~[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(JPAUserDAO.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.ParsingValidationException: > While trying to parse '4589 at > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue.parseValue(AbstractPlainAttrValue.java:19 > at > org.apache.syncope.core.persistence.jpa.attrvalue.validation.AbstractValidator.validate(AbstractValidator.java: > at > org.apache.syncope.core.persistence.jpa.attrvalue.validation.DefaultPlainAttrValidationManager.validate(Default > at > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr.add(AbstractPlainAttr.java:73) > ~[syncope-core- at > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttr.add(AbstractPlainAttr.java:97) > ~[syncope-core- at > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.lambda$fillAttr$3(AbstractAnyDataBinder.ja > at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] > at > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.fillAttr(AbstractAnyDataBinder.java:264) > ~ at > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.lambda$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.java:179) > ~[?:?] > at > java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1707) > ~[?:?] > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) > ~[?:?] > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) > ~[?:?] > at > java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.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:234) > ~[?:?] > at > java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) > ~[?:?] > at > org.apache.syncope.core.provisioning.java.data.AbstractAnyDataBinder.fill(AbstractAnyDataBinder.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(DelegatingMethodAccessorImpl.java:43) > ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?] > at > org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) > ~[spring-aop-5.3.39. at > org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:19 > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) > ~[spr at > org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionIntercept > at > org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectS > at > org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) > ~[sp at > org.apache.syncope.core.persistence.jpa.spring.DomainTransactionInterceptor.invoke(DomainTransactionInterceptor > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) > ~[spr at > org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.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(FlowableServiceTask.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(DateTimeFormatter.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(FormatUtils.java:135) > ~[syncope-core-provi at > org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue.parseValue(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/>