We have created a custom object manager and we would like to bind it to the implementation so we can inject the manager for our custom object handling into our cartridge pipelets.
We have created the Mgr interface and implementation and followed the instructions in Intershop cookbook for binding the implementation to interface:
This is the content of objectgraph.properties:
global.modules = hr.a1.core.internal.modules.AppCoreA1NamingModule
And this is the content of AppCoreA1NamingModule.java:
/*
* AppCoreA1NamingModule AppCoreA1NamingModule.java.
*
* Copyright (c) 2018 OptimIT d.o.o.. All rights reserved.
*/
package hr.a1.core.internal.modules;
import javax.inject.Singleton;
import com.intershop.beehive.core.capi.naming.AbstractNamingModule;
import hr.a1.core.postpaid.capi.A1PostpaidPriceMgr;
import hr.a1.core.postpaid.internal.A1PostpaidPriceMgrImpl;
/**
* The Class AppCoreA1NamingModule.
*/
public class AppCoreA1NamingModule extends AbstractNamingModule {
/**
* Configure.
*/
@Override
protected void configure() {
bindManager(A1PostpaidPriceMgr.class).to(A1PostpaidPriceMgrImpl.class).in(Singleton.class);
}
}
And this is the project structure:
However, when we start the server or try to use the manager, we get the following exception:
1) No implementation for hr.a1.core.postpaid.capi.A1PostpaidPriceMgr was bound.
while locating hr.a1.core.postpaid.capi.A1PostpaidPriceMgr
for field at hr.a1.service.product.pipelet.ESBCreatePrices.a1PostpaidPriceMgr(ESBCreatePrices.java:34)
while locating hr.a1.service.product.pipelet.ESBCreatePrices
build.gradle source:
apply plugin: 'java-cartridge'
apply plugin: 'static-cartridge'
apply plugin: 'com.intershop.gradle.cartridge-resourcelist'
intershop {
displayName = 'Core - Core cartridge for A1 Organization'
description = 'Core cartridge for A1 Organization'
}
dependencies {
compile group: 'com.intershop.platform', name: 'bc_mail'
compile group: 'com.intershop.platform', name: 'bc_service'
compile group: 'com.intershop.platform', name: 'orm'
compile group: 'com.intershop.business', name: 'bc_product'
compile group: 'com.intershop.business', name: 'bc_image'
compile group: 'com.intershop.business', name: 'xcs'
compile group: 'com.intershop.platform', name: 'cache'
compile group: 'com.intershop.platform', name: 'core'
compile group: 'com.intershop.platform', name: 'businessobject'
compile group: 'com.intershop.platform', name: 'bc_repository'
compile group: 'com.intershop.platform', name: 'bc_application'
compile group: 'com.intershop.platform', name: 'pf_property'
compile group: 'com.intershop.platform', name: 'app'
compile ('com.intershop.platform:pf_axis2')
{
exclude module: 'axiom-api'
exclude module: 'axiom-impl'
exclude module: 'axis2-kernel'
exclude module: 'axis2-transport-http'
exclude module: 'axis2-transport-local'
exclude module: 'geronimo-jta_1.1_spec'
exclude module: 'servlet-api'
exclude module: 'geronimo-activation_1.1_spec'
}
compile ('org.apache.axis2:axis2-kernel')
{
exclude module: 'axiom-api'
exclude module: 'axiom-impl'
exclude module: 'geronimo-activation_1.1_spec'
exclude module: 'geronimo-jta_1.1_spec'
exclude module: 'geronimo-ws-metadata_2.0_spec'
exclude module: 'geronimo-stax-api_1.0_spec'
exclude module: 'jsr311-api'
exclude module: 'neethi'
exclude module: 'servlet-api'
}
compile ('org.apache.axis2:axis2-transport-local')
{
exclude module: 'axis2-kernel'
exclude module: 'axiom-api'
exclude module: 'axiom-impl'
exclude module: 'jsr311-api'
exclude module: 'geronimo-jta_1.1_spec'
exclude module: 'servlet-api'
exclude module: 'geronimo-activation_1.1_spec'
}
compile ('org.apache.axis2:axis2-transport-http')
{
exclude module: 'axis2-kernel'
exclude module: 'axiom-api'
exclude module: 'axiom-impl'
exclude module: 'jsr311-api'
exclude module: 'geronimo-jta_1.1_spec'
exclude module: 'servlet-api'
exclude module: 'geronimo-activation_1.1_spec'
}
compile ('org.apache.ws.commons.axiom:axiom-api')
{
exclude module: 'geronimo-activation_1.1_spec'
exclude module: 'geronimo-stax-api_1.0_spec'
exclude module: 'jaxen'
exclude module: 'stax-api'
}
compile ('org.apache.axis2:axis2-adb')
{
exclude module: 'axiom-dom'
exclude module: 'axis2-kernel'
exclude module: 'geronimo-ws-metadata_2.0_spec'
exclude module: 'geronimo-activation_1.1_spec'
exclude module: 'geronimo-stax-api_1.0_spec'
}
compile ('commons-logging:commons-logging')
// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
}
Is there anything else we need to do to be able to inject and use the manager in our cartridges?
I have found a solution. Path to the objectgraph.properties should be src/main/resources/resources/[cartridgeName]/objectgraph/objectgraph.properties
Once I changed the path, manager is binding correctly. The project structure looks like this now:
Problem is solved now, but it is really confusing to have 2 folders with the same name in the folder structure so maybe it's something that should be looked into from the Intershop side.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.