2

我只是尝试使用实例和实现添加我的自定义 ORMObjectListener 的注册,但它不起作用。我可以看到所有系统 ORMObjectListener-s 都注册在盒式 onReadyHook() 方法中,但我喜欢尝试将它们注册到组件框架中。

我在 implementations.component 中添加了以下内容:

<implementation name="ProductPODeleteListener" class="hr.a1.orm.product.internal.ProductPODeleteListener" start="start" stop="stop" factory="JavaBeanFactory"/>

并遵循instances.component:

<instance name="ProductPODeleteListener" with="ProductPODeleteListener" scope="global"/>

这是 ProductPODeleteListener 的启动方法:

public synchronized void start() {
    productFactory.addObjectListener(this);
}

但是我的自定义侦听器未注册(从不调用 start 方法)。我可以在日志文件中看到启动时加载了实现:

"Adding implementation ProductPODeleteListener to configuration bc_a1_orm."

我做错什么了吗?

也许缺少的是对 componentMgr.getGlobalComponentInstance("ProductPODeleteListener") 的调用?如此处所述: https: //support.intershop.com/kb/index.php/Display/25G731#Concept-ComponentFramework-InGeneral -> “ComponentFW 将在第一次访问时实例化所有定义的实例。” 我认为不可能向组件框架注册侦听器,因为这些侦听器需要在服务器启动时注册。那是对的吗?

感谢帮助!

4

1 回答 1

2

你是完全正确的。我对此进行了测试,并且该组件在服务器启动时从未初始化。只有当其他代码请求您的组件时,它才会被初始化。全局或应用程序不会有所作为。

//get instance 
NamingMgr.getManager(ComponentMgr.class).getGlobalComponentInstance("ProductPODeleteListener");
//after this component is init & listeren is up

我想这种“延迟加载”是出于性能原因而完成的。

对我来说最好的似乎是使用onPostStartup墨盒类中的方法加载侦听器。这个没有被弃用,也似乎永远不会被弃用。

public class CustomCartridge extends Cartridge
{
    @Override
    public boolean onPostStartup()
    {
        System.out.println("starting customer cartridge listener");

        ProductPOFactory productFactory = (ProductPOFactory)NamingMgr.getInstance().lookupFactory(ProductPO.class);
        productFactory.addObjectListener(new ProductPODeleteListener());

        return super.onPostStartup();
    }

}

在墨盒的属性文件中将加载类更改为您的

################################################################################
# cartridge properties for cartridge CustomCartridge
################################################################################

intershop.cartridges.CustomCartridge.classname=com.example.capi.CustomCartridge
于 2018-10-29T13:21:47.193 回答