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