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/>

Reply via email to