The latest Sormas stack (1.95.1) is not coming up with an empty db - starting from the scratch
Bug Description
When starting Sormas from the scratch (with an empty db) it throws below error: Null value was assigned to a property of primitive type setter of de.symeda.sormas.backend.feature.FeatureConfiguration.enabled
The content of postgres db table is: root@akademieby /opt/sormas # docker exec -it sormas_postgres_1 psql -U postgres sormas
sormas=# select featuretype, enabled, properties, entitytype from featureconfiguration order by featuretype asc, entitytype; featuretype | enabled | properties | entitytype ---------------------------------+---------+--------------------------------------------------------+------------ HIDE_JURISDICTION_FIELDS | | | SORMAS_TO_SORMAS_SHARE_CONTACTS | t | {"SHARE_SAMPLES" : true, "SHARE_IMMUNIZATIONS" : true} | (2 rows)
which mean that HIDE_JURISDICTION_FIELDS enables is NULL by default
The Java error is below:
{"Timestamp":"2024-03-26T15:29:30.317+0100","Level":"SCHWERWIEGEND","Version":"Payara 5.2022.5","LoggerName":"javax.enterprise.system.tools.deployment.common","ThreadID":"112","ThreadName":"payara-executor-service-scheduled-task","TimeMillis":"1711463370317","LevelValue":"1000","Throwable":{"Exception":"Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method","StackTrace":"javax.ejb.EJBException: javax.ejb.CreateException: Initialization failed for Singleton StartupShutdownService\n\tat com.sun.ejb.containers.AbstractSingletonContainer$SingletonContextFactory.create(AbstractSingletonContainer.java:689)\n\tat com.sun.ejb.containers.AbstractSingletonContainer.instantiateSingletonInstance(AbstractSingletonContainer.java:421)\n\tat org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:219)\n\tat org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:180)\n\tat org.glassfish.ejb.startup.SingletonLifeCycleManager.doStartup(SingletonLifeCycleManager.java:159)\n\tat org.glassfish.ejb.startup.EjbApplication.start(EjbApplication.java:171)\n\tat org.glassfish.internal.data.EngineRef.start(EngineRef.java:123)\n\tat org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:292)\n\tat org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:361)\n\tat com.sun.enterprise.v3.server.ApplicationLifecycle.initialize(ApplicationLifecycle.java:629)\n\tat org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:597)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552)\n\tat java.base/java.security.AccessController.doPrivileged(Native Method)\n\tat java.base/javax.security.auth.Subject.doAs(Subject.java:361)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574)\n\tat java.base/java.security.AccessController.doPrivileged(Native Method)\n\tat java.base/javax.security.auth.Subject.doAs(Subject.java:361)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:120)\n\tat com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1869)\n\tat org.glassfish.deployment.autodeploy.AutoOperation.run(AutoOperation.java:149)\n\tat org.glassfish.deployment.autodeploy.AutoDeployer.deploy(AutoDeployer.java:532)\n\tat org.glassfish.deployment.autodeploy.AutoDeployer.deployAll(AutoDeployer.java:437)\n\tat org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:371)\n\tat org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:362)\n\tat org.glassfish.deployment.autodeploy.AutoDeployService$1.run(AutoDeployService.java:231)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)\n\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\nCaused by: javax.ejb.CreateException: Initialization failed for Singleton StartupShutdownService\n\tat com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:542)\n\tat com.sun.ejb.containers.AbstractSingletonContainer.access$000(AbstractSingletonContainer.java:81)\n\tat com.sun.ejb.containers.AbstractSingletonContainer$SingletonContextFactory.create(AbstractSingletonContainer.java:687)\n\t... 35 more\nCaused by: javax.ejb.EJBTransactionRolledbackException: Exception thrown from bean: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of de.symeda.sormas.backend.feature.FeatureConfiguration.enabled\n\tat com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2386)\n\tat com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2183)\n\tat com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2104)\n\tat com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)\n\tat com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90)\n\tat com.sun.proxy.$Proxy674.createMissingFeatureConfigurations(Unknown Source)\n\tat de.symeda.sormas.backend.feature.EJB31_Generated__FeatureConfigurationService__Intf____Bean.createMissingFeatureConfigurations(Unknown Source)\n\tat de.symeda.sormas.backend.common.StartupShutdownService.startup(StartupShutdownService.java:241)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.java:1022)\n\tat com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72)\n\tat com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:204)\n\tat com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)\n\tat com.sun.ejb.containers.interceptors.SystemInterceptorProxy.init(SystemInterceptorProxy.java:125)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:978)\n\tat com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72)\n\tat com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:204)\n\tat org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:81)\n\tat org.jboss.weld.module.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:978)\n\tat com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72)\n\tat com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:418)\n\tat com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:381)\n\tat com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:2071)\n\tat com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:529)\n\t... 37 more\nCaused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of de.symeda.sormas.backend.feature.FeatureConfiguration.enabled\n\tat com.sun.ejb.containers.EJBContainerTransactionManager.checkExceptionClientTx(EJBContainerTransactionManager.java:615)\n\tat com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:485)\n\tat com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4601)\n\tat com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2134)\n\t... 71 more\nCaused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of de.symeda.sormas.backend.feature.FeatureConfiguration.enabled\n\tat org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)\n\tat org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1626)\n\tat org.hibernate.query.Query.getResultList(Query.java:165)\n\tat org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:76)\n\tat de.symeda.sormas.backend.common.BaseAdoService.getAll(BaseAdoService.java:161)\n\tat de.symeda.sormas.backend.feature.FeatureConfigurationService.getServerFeatureConfigurations(FeatureConfigurationService.java:197)\n\tat de.symeda.sormas.backend.feature.FeatureConfigurationService.createMissingFeatureConfigurations(FeatureConfigurationService.java:132)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:588)\n\tat org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:408)\n\tat com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4835)\n\tat com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:665)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:834)\n\tat com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:615)\n\tat de.symeda.sormas.backend.util.ValidationConstraintViolationInterceptor.handleValidationConstraintViolation(ValidationConstraintViolationInterceptor.java:35)\n\tat jdk.internal.reflect.GeneratedMethodAccessor202.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:888)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:833)\n\tat com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:615)\n\tat de.symeda.sormas.backend.util.RightsAllowedInterceptor.checkRightsAllowed(RightsAllowedInterceptor.java:111)\n\tat jdk.internal.reflect.GeneratedMethodAccessor201.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:888)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:833)\n\tat com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:615)\n\tat de.symeda.sormas.backend.util.PerformanceLoggingInterceptor.logInvokeDuration(PerformanceLoggingInterceptor.java:37)\n\tat jdk.internal.reflect.GeneratedMethodAccessor200.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:888)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:833)\n\tat com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:615)\n\tat de.symeda.sormas.backend.audit.AuditLoggerInterceptor.logAudit(AuditLoggerInterceptor.java:158)\n\tat jdk.internal.reflect.GeneratedMethodAccessor199.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:888)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:833)\n\tat com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:615)\n\tat com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)\n\tat com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)\n\tat jdk.internal.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:888)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:833)\n\tat com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:615)\n\tat org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:72)\n\tat org.jboss.weld.module.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)\n\tat jdk.internal.reflect.GeneratedMethodAccessor192.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:888)\n\tat com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:833)\n\tat com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:375)\n\tat com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4807)\n\tat com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4795)\n\tat com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)\n\t... 69 more\nCaused by: org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of de.symeda.sormas.backend.feature.FeatureConfiguration.enabled\n\tat org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:88)\n\tat org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:694)\n\tat org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:144)\n\tat org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:5281)\n\tat org.hibernate.engine.internal.TwoPhaseLoad.initializeEntityFromEntityEntryLoadedState(TwoPhaseLoad.java:253)\n\tat org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:156)\n\tat org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:126)\n\tat org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1201)\n\tat org.hibernate.loader.Loader.processResultSet(Loader.java:1009)\n\tat org.hibernate.loader.Loader.doQuery(Loader.java:967)\n\tat org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:357)\n\tat org.hibernate.loader.Loader.doList(Loader.java:2868)\n\tat org.hibernate.loader.Loader.doList(Loader.java:2850)\n\tat org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2682)\n\tat org.hibernate.loader.Loader.list(Loader.java:2677)\n\tat org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:540)\n\tat org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)\n\tat org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:218)\n\tat org.hibernate.internal.SessionImpl.list(SessionImpl.java:1459)\n\tat org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1649)\n\tat org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1617)\n\t... 131 more\nCaused by: java.lang.IllegalArgumentException\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\n\tat org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:45)\n\t... 151 more\n"}}
Reproduction Steps
- start sormas with an empty database
- sormas container is not coming up
- Error is thrown: Null value was assigned to a property of primitive type setter of de.symeda.sormas.backend.feature.FeatureConfiguration.enabled
Expected Behavior
No response
Affected Area(s)
Web app
SORMAS Version
1.95.1
Android version/Browser
any
User Role(s)
any
Server URL
No response
Additional Information
No response
This can be fixed by executing
update featureconfiguration set enabled = true where enabled is null;
But SORMAS should create working configuration on first startup.
Small side note: after installing Releas 1.95.1 from scratch and also initializing an empty db with the default deployment artifacts only two lines were automatically generated within table featureconfiguration. Is this so on purpose?
Other note (I couldn' t find a related issue and direct wiki-commits are of course restricted): If required, here's a small update for Feature-Configuration-Options.md due to HIDE_JURISDICTION_FIELDS-changes in release 1.94.0: Feature-Configuration-Options.md