components - 向组件框架注册 ORM 对象监听器

标签 components listener intershop

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

我将以下内容添加到implementations.component:

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

下面是实例.组件:

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

这是ProductPODeleteListener的启动方法:

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

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

"Adding implementation ProductPODeleteListener to configuration bc_a1_orm."

我做错了什么吗?

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

感谢您的帮助!

最佳答案

你说得完全正确。我对此进行了测试,该组件从未在服务器启动时初始化。仅当其他代码请求您的组件时,它才会被初始化。全局或应用程序不会产生影响。

//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

关于components - 向组件框架注册 ORM 对象监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52988412/

相关文章:

java - 尝试创建监听器模式样式类,观察者不会收到通知

unity-game-engine - 在 Unity 中使用 API 创建购物车

netflix-eureka - DiscoveryClient 无法刷新其缓存!状态 404

使用经典 ASP 上传图片

components - gcloud 组件更新失败

C++ 简单实体组件

android - DrawaerLayout.onDrawerOpened 从未被调用

在创建时注册为监听器的 Java 枚举

intershop - 在 Intershop 7.10 中覆盖系统 "URL not found"模板?

delphi - 具有Onclick的自定义按钮,隐藏Onclick事件