Ignition 8.3 (no forum tag…)
I migrated a module from 8.1.
At setup I have the following error:
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because the return value of "com.bouyguesenergiesservices.ignition.gateway.utils.records.ByesModulesUtilsSettingsResource.NetworkInterfacesTagsEnabled()" is null
The **config.json** file file seems to be ok:
{
"alarmCountEnabled": true,
"alarmMaximumPriority": "Critical",
"alarmMinimumPriority": "Low",
"alarmScanPeriodSec": 10,
"alarmSources": "prov:default:/tag:TVG\*:/alm:\*",
"includeSystem": false,
"networkInterfacesScanPeriodSec": 10,
"networkInterfacesTagsEnabled": true,
"projectListenerEnabled": false,
"projectListenerFilterProjectAdded": false,
"projectListenerFilterProjectDeleted": false,
"projectListenerFilterProjectNames": "global",
"projectListenerFilterProjectUpdated": false,
"projectListenerGatewayMessageHandler": "gwHandlerPlatformUpdate",
"projectListenerGatewayMessageProjectName": "",
"projectListenerMinimalInterval": 60,
"projectListenerNotificationDelay": 30,
"projectListenerUseGatewayScriptingProject": true,
"serverDiagEnabled": true,
"serverDiagScanPeriodSec": 10,
"webServerCacheSeconds": 0,
"webServerDirPath": "C:/web",
"webServerEnabled": true,
"webServerStaticCacheSeconds": 0,
"webServerStaticDirPath": null
}
and the code at setup:
context.getConfigurationManager().getResourceTypeMetaRegistry().register(ByesModulesUtilsSettingsResource.META);
singletonResourceHandler = SingletonResourceHandler.newBuilder(ByesModulesUtilsSettingsResource.META)
.context(context)
// add a listener that will be invoked whenever this resource changes
.onChange(byesModulesUtilsSettingsResource -> {
// settings globaux => fire onChange même si pas de modif sur la catégory concernée
managerNetworkInterfaces.onChange(byesModulesUtilsSettingsResource);
managerServer.onChange(byesModulesUtilsSettingsResource);
managerWebServer.onChange(byesModulesUtilsSettingsResource);
})
.build();
settingsResource = singletonResourceHandler.getResource();
java.lang.Exception: Exception while starting up module "com.bouyguesenergiesservices.utils".
at com.inductiveautomation.ignition.gateway.modules.ModuleInstance.startup(ModuleInstance.java:709)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.runStartupPhase(ModuleManagerImpl.java:499)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startup(ModuleManagerImpl.java:459)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.startupInternal(IgnitionGateway.java:1304)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.startup(RedundancyManagerImpl.java:352)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.initRedundancy(IgnitionGateway.java:787)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.lambda$initInternal$1(IgnitionGateway.java:712)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:550)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because the return value of "com.bouyguesenergiesservices.ignition.gateway.utils.records.ByesModulesUtilsSettingsResource.NetworkInterfacesTagsEnabled()" is null
at com.bouyguesenergiesservices.ignition.gateway.utils.ManagerNetworkInterfaces.onChange(ManagerNetworkInterfaces.java:100)
at com.bouyguesenergiesservices.ignition.gateway.utils.GatewayHook.lambda$setup$0(GatewayHook.java:262)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Builder$1.onResourceUpdated(SingletonResourceHandler.java:400)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler.onResourceUpdated(SingletonResourceHandler.java:179)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Lifecycle.updateResource(SingletonResourceHandler.java:255)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Lifecycle.updateRef(SingletonResourceHandler.java:287)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Lifecycle.onStartup(SingletonResourceHandler.java:273)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycle.onStartup(ResourceCollectionLifecycle.java:61)
at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.maybeStartLifecycle(ResourceCollectionLifecycleFactory.java:264)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$4(ResourceCollectionLifecycleFactory.java:248)
at java.base/java.util.Optional.ifPresent(Unknown Source)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$5(ResourceCollectionLifecycleFactory.java:243)
at java.base/java.util.ArrayList.forEach(Unknown Source)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.updateOrStartAffected(ResourceCollectionLifecycleFactory.java:190)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.collectionAdded(ResourceCollectionLifecycleFactory.java:145)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory.onStartup(ResourceCollectionLifecycleFactory.java:61)
at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler.onStartup(SingletonResourceHandler.java:145)
at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
at com.bouyguesenergiesservices.ignition.gateway.utils.GatewayHook.startup(GatewayHook.java:362)
at com.inductiveautomation.ignition.gateway.modules.ModuleInstance.startup(ModuleInstance.java:703)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.runStartupPhase(ModuleManagerImpl.java:499)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startup(ModuleManagerImpl.java:459)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.startupInternal(IgnitionGateway.java:1304)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.startup(RedundancyManagerImpl.java:352)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.initRedundancy(IgnitionGateway.java:787)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.lambda$initInternal$1(IgnitionGateway.java:712)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:550)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
package com.bouyguesenergiesservices.ignition.gateway.utils.records;
import com.bouyguesenergiesservices.ignition.common.utils.Constantes;
import com.inductiveautomation.ignition.common.alarming.AlarmPriority;
import com.inductiveautomation.ignition.common.resourcecollection.ResourceType;
import com.inductiveautomation.ignition.gateway.config.ResourceTypeMeta;
import com.inductiveautomation.ignition.gateway.dataroutes.openapi.annotations.*;
import com.inductiveautomation.ignition.gateway.web.nav.FormFieldType;
public record ByesModulesUtilsSettingsResource(
// Category NetworkInterfaces
//--------------
@FormCategory("NetworkInterfaces")
@FormField(FormFieldType.CHECKBOX)
@Label("TagsEnabled")
@Required
//@DefaultValue(Boolean.TRUE)
@Description("Create Managed tags for Network Interfaces")
Boolean NetworkInterfacesTagsEnabled,
@FormCategory("NetworkInterfaces")
@FormField(FormFieldType.NUMBER)
@Label("ScanPeriodSec")
@Required
@Description("Period for updating Managed tags for Network Interfaces")
@Maximum("65535")
@Minimum("0")
@DefaultValue("10")
Integer NetworkInterfacesScanPeriodSec,
.....
)
{
// typeId => nom du dossier
public static final ResourceType TYPE = new ResourceType(Constantes.MODULE_ID, "settings");
public static final ByesModulesUtilsSettingsResource DEFAULT = new ByesModulesUtilsSettingsResource(
true,
10,
true,
10,
"prov:default:/tag:*:/alm:*",
AlarmPriority.Low.getIntValue(),
AlarmPriority.High.getIntValue(),
false,
true,
"global",
true,
false,
true,
"gwHandlerPlatformUpdate",
true,
"",
30,
60,
false,
"C:/Data",
30,
"C:/StaticData",
0,
true,
10
);
public static final ResourceTypeMeta<ByesModulesUtilsSettingsResource> META = ResourceTypeMeta.newBuilder(ByesModulesUtilsSettingsResource.class)
.resourceType(TYPE)
.singleton()
.defaultConfig(DEFAULT)
.categoryName("Byes Modules Utils SettingsResource") .build();
}
I probably miss something.