Re: DI container has no binding for key <BindingKey: org.apache.cayenne.resource.ResourceLocator>

Stefano Morini <[email protected]> Mon, 14 Apr 2025 15:00:28 +0200
Newsgroups gmane.comp.java.cayenne.user
Message-ID <[email protected]>
Hi Andrus,

Thanks. Yes It seems using the same cayenneRuntime.

I'm trying to use Cayenne from Ignition Module. (The same code runs if I 
start it from a main)

In the Module Setup I have to create runtime and context as I saw in 
cayenne getting started.

public void setup(GatewayContext gatewayContext) {
ServerRuntime cayenneRuntime =ServerRuntime.builder()
         	.addConfig("it/cpsistemi/ignition/mes/core/scripting/cayenne-Cayenne.xml")	.build();

DataManager dataManager =new DataManager(cayenneRuntime.newContext());


XML files are present in jar and the Ignition module.
The instruction newContext() returns this exception:
DI container has no binding for key <BindingKey: 
org.apache.cayenne.configuration.ObjectContextFactory>
org.apache.cayenne.di.DIRuntimeException: DI container has no binding 
for key <BindingKey: org.apache.cayenne.configuration.ObjectContextFactory>
     at 
org.apache.cayenne.di.spi.DefaultInjector.getProvider(DefaultInjector.java:158)
     at 
org.apache.cayenne.di.spi.DefaultInjector.getProvider(DefaultInjector.java:144)
     at 
org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:134)
     at 
org.apache.cayenne.configuration.CayenneRuntime.newContext(CayenneRuntime.java:124)
     at 
it.cpsistemi.ignition.mes.core.scripting.GatewayHook.setup(GatewayHook.java:50)
     at 
com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$LoadedModule.setup(ModuleManagerImpl.java:2364)
     at 
com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startupModule(ModuleManagerImpl.java:1179)
     at 
com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$2.call(ModuleManagerImpl.java:726)
     at 
com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.executeModuleOperation(ModuleManagerImpl.java:902)
     at 
com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.installModuleInternal(ModuleManagerImpl.java:692)
     at 
com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$InstallCommand.execute(ModuleManagerImpl.java:1861)
     at 
com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$Receiver.receiveCall(ModuleManagerImpl.java:1814)
     at 
com.inductiveautomation.ignition.gateway.redundancy.QueueableMessageReceiver.receiveCall(QueueableMessageReceiver.java:47)
     at 
com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.dispatchMessage(RedundancyManagerImpl.java:1030)
     at 
com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl$ExecuteTask.run(RedundancyManagerImpl.java:1098)
     at 
com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:544)
     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)

Stefano

Il 14/04/2025 08:09, Andrus Adamchik ha scritto:
> Hi Stefano,
>
> I left a similar comment on Stack Overflow. The code here and the stack trace are two different things. You need to debug the GatewayHook.setup(..) method. Check a couple of things - Is it using the same runtime as below? Is it invoked after that runtime was already instantiated?
>
> Andrus
>
>
>> On Apr 10, 2025, at 6:49 PM, Stefano Morini<[email protected]> wrote:
>>
>> Hi all,
>>
>> I’m new in Apache Cayenne 4.2.2.
>>
>> I have a problem: every time I try to do this
>> ServerRuntime cayenneRuntime = ServerRuntime.builder()
>>           .addConfig("it/cpsistemi/ignition/mes/core/scripting/cayenne-Cayenne.xml")
>>          .build();
>> DataManager dataManager = new DataManager(cayenneRuntime.newContext());
>>
>> Config files are in resources
>> <Screenshot 2025-04-10 alle 18.43.55.png>
>>
>> I have this error
>> org.apache.cayenne.di.DIRuntimeException: DI container has no binding for key <BindingKey: org.apache.cayenne.resource.ResourceLocator>
>>
>> at org.apache.cayenne.di.spi.DefaultInjector.getProvider(DefaultInjector.java:158)
>>
>> at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:139)
>>
>> at org.apache.cayenne.di.spi.FieldInjectingProvider.value(FieldInjectingProvider.java:103)
>>
>> at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMember(FieldInjectingProvider.java:68)
>>
>> at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMembers(FieldInjectingProvider.java:59)
>>
>> at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMembers(FieldInjectingProvider.java:63)
>>
>> at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:44)
>>
>> at org.apache.cayenne.di.spi.CustomProvidersProvider.get(CustomProvidersProvider.java:39)
>>
>> at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:43)
>>
>> at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:50)
>>
>> at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:134)
>>
>> at it.cpsistemi.ignition.mes.core.scripting.GatewayHook.setup(GatewayHook.java:43)
>>
>> Any help will be appreciated.
>> Stefano
>