Jmix 1.2 - application settings - only null pointer exception

Hi,

using this code, I only get a null pointer exception.
The table got created and I could add values using the Administration menu ‘application settings’.
But how ever I try, I cannot access the settings in the code.
Last line throws the error.

@Service(StartBatchService.NAME)
public class StartBatchServiceBean implements StartBatchService {

private static Logger log = LoggerFactory.getLogger(StartBatchService.class);
@Autowired
private AppSettings appSettings;

@Autowired
private DataManager dataManager;

public void executeMailQueue() {
    String test = appSettings.load(BatchService_Settings.class).getMailStatusNewEntry();

Regards
Roland

it works fine using the same code in a screen controller…
but not in that service bean

I can locate the issue on the following:
using datamanger or appSettings in a @Component or @Service,
I cannot read from entities, using the admin user.
Almost all examples from the manual I tried, no success.

Using the same code inside a screen controller it works fine.

Hi!

Unfortunately, I’m not able to reproduce described issue, using appSettings it is possible to operate with settings entities in uiControllers and services too.
image

Could you attach some small test project on whic I can reproduce the problem?

Regards,
Artem

thx!
sent a message

getting closer…

one issue is solved, I can now use appSettings and datamanager working fine.
The issue was a wrong coding on my side, I used new instead of @Autowired

the last thing is getting it running with Quartz.
Actually I have an authorization error…

tbc…

java.lang.IllegalStateException: Authentication is not set. Use SystemAuthenticator in non-user requests like schedulers or asynchronous calls.
at io.jmix.core.security.impl.CurrentAuthenticationImpl.getAuthentication(CurrentAuthenticationImpl.java:49) ~[jmix-core-1.2.0.jar:na]
at io.jmix.security.impl.constraint.AuthenticationPolicyStore.extractFromAuthenticationByScope(AuthenticationPolicyStore.java:107) ~[jmix-security-1.2.0.jar:na]
at io.jmix.security.impl.constraint.AuthenticationPolicyStore.getEntityResourcePolicies(AuthenticationPolicyStore.java:70) ~[jmix-security-1.2.0.jar:na]
at io.jmix.security.impl.constraint.SecureOperationsImpl.isEntityOperationPermitted(SecureOperationsImpl.java:57) ~[jmix-security-1.2.0.jar:na]
at io.jmix.security.impl.constraint.SecureOperationsImpl.isEntityCreatePermitted(SecureOperationsImpl.java:36) ~[jmix-security-1.2.0.jar:na]
at io.jmix.securitydata.constraint.CrudEntityConstraint.applyTo(CrudEntityConstraint.java:52) ~[jmix-security-data-1.2.0.jar:na]
at io.jmix.securitydata.constraint.CrudEntityConstraint.applyTo(CrudEntityConstraint.java:28) ~[jmix-security-data-1.2.0.jar:na]
at io.jmix.core.AccessManager.lambda$applyConstraints$2(AccessManager.java:76) ~[jmix-core-1.2.0.jar:na]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_201]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_201]
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_201]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[na:1.8.0_201]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_201]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_201]
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:1.8.0_201]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:1.8.0_201]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_201]
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_201]
at io.jmix.core.AccessManager.applyConstraints(AccessManager.java:75) ~[jmix-core-1.2.0.jar:na]
at io.jmix.data.impl.DataStoreCrudListener.beforeEntityLoad(DataStoreCrudListener.java:57) ~[jmix-data-1.2.0.jar:na]
at io.jmix.core.datastore.DataStoreBeforeEntityLoadEvent.sendTo(DataStoreBeforeEntityLoadEvent.java:50) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.datastore.AbstractDataStore.fireEvent(AbstractDataStore.java:343) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.datastore.AbstractDataStore.load(AbstractDataStore.java:77) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.impl.UnconstrainedDataManagerImpl.load(UnconstrainedDataManagerImpl.java:97) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.FluentLoader$ById.optional(FluentLoader.java:197) ~[jmix-core-1.2.0.jar:na]
at io.jmix.appsettings.impl.AppSettingsToolsImpl.loadAppSettingsEntityFromDataStore(AppSettingsToolsImpl.java:51) ~[jmix-appsettings-1.2.1.jar:na]
at io.jmix.appsettings.impl.AppSettingsImpl.getAppSettingsEntity(AppSettingsImpl.java:56) ~[jmix-appsettings-1.2.1.jar:na]
at io.jmix.appsettings.impl.AppSettingsImpl.load(AppSettingsImpl.java:35) ~[jmix-appsettings-1.2.1.jar:na]
at com.jnj.epos.service.StartBatchServices.test(StartBatchServices.java:33) ~[main/:na]
at com.jnj.epos.service.StartMailQueue.execute(StartMailQueue.java:32) ~[main/:na]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.3.2.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.3.2.jar:na]

2022-03-10 10:02:19.715 ERROR 13152 — [eduler_Worker-1] org.quartz.core.ErrorLogger : Job (DEFAULT.runMailQueue threw an exception.

org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) ~[quartz-2.3.2.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.3.2.jar:na]
Caused by: java.lang.IllegalStateException: Authentication is not set. Use SystemAuthenticator in non-user requests like schedulers or asynchronous calls.
at io.jmix.core.security.impl.CurrentAuthenticationImpl.getAuthentication(CurrentAuthenticationImpl.java:49) ~[jmix-core-1.2.0.jar:na]
at io.jmix.security.impl.constraint.AuthenticationPolicyStore.extractFromAuthenticationByScope(AuthenticationPolicyStore.java:107) ~[jmix-security-1.2.0.jar:na]
at io.jmix.security.impl.constraint.AuthenticationPolicyStore.getEntityResourcePolicies(AuthenticationPolicyStore.java:70) ~[jmix-security-1.2.0.jar:na]
at io.jmix.security.impl.constraint.SecureOperationsImpl.isEntityOperationPermitted(SecureOperationsImpl.java:57) ~[jmix-security-1.2.0.jar:na]
at io.jmix.security.impl.constraint.SecureOperationsImpl.isEntityCreatePermitted(SecureOperationsImpl.java:36) ~[jmix-security-1.2.0.jar:na]
at io.jmix.securitydata.constraint.CrudEntityConstraint.applyTo(CrudEntityConstraint.java:52) ~[jmix-security-data-1.2.0.jar:na]
at io.jmix.securitydata.constraint.CrudEntityConstraint.applyTo(CrudEntityConstraint.java:28) ~[jmix-security-data-1.2.0.jar:na]
at io.jmix.core.AccessManager.lambda$applyConstraints$2(AccessManager.java:76) ~[jmix-core-1.2.0.jar:na]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_201]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_201]
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_201]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[na:1.8.0_201]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_201]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_201]
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:1.8.0_201]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:1.8.0_201]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_201]
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_201]
at io.jmix.core.AccessManager.applyConstraints(AccessManager.java:75) ~[jmix-core-1.2.0.jar:na]
at io.jmix.data.impl.DataStoreCrudListener.beforeEntityLoad(DataStoreCrudListener.java:57) ~[jmix-data-1.2.0.jar:na]
at io.jmix.core.datastore.DataStoreBeforeEntityLoadEvent.sendTo(DataStoreBeforeEntityLoadEvent.java:50) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.datastore.AbstractDataStore.fireEvent(AbstractDataStore.java:343) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.datastore.AbstractDataStore.load(AbstractDataStore.java:77) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.impl.UnconstrainedDataManagerImpl.load(UnconstrainedDataManagerImpl.java:97) ~[jmix-core-1.2.0.jar:na]
at io.jmix.core.FluentLoader$ById.optional(FluentLoader.java:197) ~[jmix-core-1.2.0.jar:na]
at io.jmix.appsettings.impl.AppSettingsToolsImpl.loadAppSettingsEntityFromDataStore(AppSettingsToolsImpl.java:51) ~[jmix-appsettings-1.2.1.jar:na]
at io.jmix.appsettings.impl.AppSettingsImpl.getAppSettingsEntity(AppSettingsImpl.java:56) ~[jmix-appsettings-1.2.1.jar:na]
at io.jmix.appsettings.impl.AppSettingsImpl.load(AppSettingsImpl.java:35) ~[jmix-appsettings-1.2.1.jar:na]
at com.jnj.epos.service.StartBatchServices.test(StartBatchServices.java:33) ~[main/:na]
at com.jnj.epos.service.StartMailQueue.execute(StartMailQueue.java:32) ~[main/:na]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.3.2.jar:na]
… 1 common frames omitted

Caused by: java.lang.IllegalStateException: Authentication is not set. Use SystemAuthenticator in non-user requests like schedulers or asynchronous calls.

Hi,

please refer to documentation in order to execute some code as system user
-Authentication :: Jmix Documentation

Regards,
Artem

1 Like

yes, thx… just found it … did not noticed it when reading the doc the first time :frowning: