如何在hybris中注册我的自定义线程(通过线程t创建后; t.start())

2020-09-09 10:21发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,大家好,有人可以帮助我知道如何注册我在hybris中创建的自定义线程。

我的代码示例:

final Runnable runnable =()-> {//我的代码在这里。 最终线程t =新线程(可运行); t.start();

如果我使用t.run()代替t.start(),那么我的runnable中的代码将被执行,但是如果我使用t.start(),那么runnable中的代码将不会被执行,而我正在 错误提示:

线程" Thread-134"中的异常java.lang.IllegalStateException:没有租户处于活动状态。 如果您不想使用租户,请调用Registry.activateMasterTenant()以确保主租户处于活动状态。 信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.util.Config.getBoolean(Config.java:245)处的de.hybris.platform.core.Registry.getCurrentTenant(Registry.java:804) jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.util.persistence.PersistenceUtils.isPersistenceLagacyModeEnabledInConfig(PersistenceUtils.java:68)信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.util.persistence.PersistenceUtils.isPersistenceLegacyModeEnabled(PersistenceUtils.java:63)信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.isSLDPersistence(DefaultModelService.java:476)信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.preloadItems(DefaultModelService.java:466)处 jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.servicelayer.search.internal.resolver.impl.DefaultModelResolver.preloadItems(DefaultModelResolver.java:95)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.servicelayer.search.impl.LazyLoadModelList.loadPage(LazyLoadModelList.java:62)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchPage(LazyLoadItemList.java:216)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchBufferedPageNoLock(LazyLoadItemList.java:472)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchBufferedPageSynchronized(LazyLoadItemList.java:464)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchBufferedPage(LazyLoadItemList.java:459)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.getOrSwitchBufferedPage(LazyLoadItemList.java:450)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.getOrSwitchBufferedPage(LazyLoadItemList.java:430)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.getBuffered(LazyLoadItemList.java:108)信息| jvm 1 | 主| 2018/10/01 15:35:52.051 | 在de.hybris.platform.core.LazyLoadItemList.get(LazyLoadItemList.java:94)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在java.util.AbstractList $ Itr.next(AbstractList.java:358)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在de.hybris.platform.core.internal.BaseLazyLoadItemList $ 1.next(BaseLazyLoadItemList.java:177)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在java.util.Collections $ UnmodifiableCollection $ 1.next(Collections.java:1042)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在com.carrefour.core.cronjob.CarrefourAPICachCronJob.lambda $ 0(CarrefourAPICachCronJob.java:76)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在java.lang.Thread.run(Thread.java:748)

我在本地检查了上述问题,发现MASTER租户处于活动状态。 因此,此错误与我的代码/要求无关。 如果我们使用t.run(),那么我们使用的是来自hybris本身的线程,这是我不想要的。 我想创建自己的线程,然后使用该线程执行代码。 因此,为此,我需要将线程注册到hybris中,然后只有hybris才能在系统中识别我的线程。

任何小提示都是可以接受的。 谢谢。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,大家好,有人可以帮助我知道如何注册我在hybris中创建的自定义线程。

我的代码示例:

final Runnable runnable =()-> {//我的代码在这里。 最终线程t =新线程(可运行); t.start();

如果我使用t.run()代替t.start(),那么我的runnable中的代码将被执行,但是如果我使用t.start(),那么runnable中的代码将不会被执行,而我正在 错误提示:

线程" Thread-134"中的异常java.lang.IllegalStateException:没有租户处于活动状态。 如果您不想使用租户,请调用Registry.activateMasterTenant()以确保主租户处于活动状态。 信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.util.Config.getBoolean(Config.java:245)处的de.hybris.platform.core.Registry.getCurrentTenant(Registry.java:804) jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.util.persistence.PersistenceUtils.isPersistenceLagacyModeEnabledInConfig(PersistenceUtils.java:68)信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.util.persistence.PersistenceUtils.isPersistenceLegacyModeEnabled(PersistenceUtils.java:63)信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.isSLDPersistence(DefaultModelService.java:476)信息| jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.preloadItems(DefaultModelService.java:466)处 jvm 1 | 主| 2018/10/01 15:35:52.038 | 在de.hybris.platform.servicelayer.search.internal.resolver.impl.DefaultModelResolver.preloadItems(DefaultModelResolver.java:95)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.servicelayer.search.impl.LazyLoadModelList.loadPage(LazyLoadModelList.java:62)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchPage(LazyLoadItemList.java:216)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchBufferedPageNoLock(LazyLoadItemList.java:472)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchBufferedPageSynchronized(LazyLoadItemList.java:464)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.switchBufferedPage(LazyLoadItemList.java:459)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.getOrSwitchBufferedPage(LazyLoadItemList.java:450)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.getOrSwitchBufferedPage(LazyLoadItemList.java:430)信息| jvm 1 | 主| 2018/10/01 15:35:52.039 | 在de.hybris.platform.core.LazyLoadItemList.getBuffered(LazyLoadItemList.java:108)信息| jvm 1 | 主| 2018/10/01 15:35:52.051 | 在de.hybris.platform.core.LazyLoadItemList.get(LazyLoadItemList.java:94)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在java.util.AbstractList $ Itr.next(AbstractList.java:358)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在de.hybris.platform.core.internal.BaseLazyLoadItemList $ 1.next(BaseLazyLoadItemList.java:177)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在java.util.Collections $ UnmodifiableCollection $ 1.next(Collections.java:1042)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在com.carrefour.core.cronjob.CarrefourAPICachCronJob.lambda $ 0(CarrefourAPICachCronJob.java:76)信息| jvm 1 | 主| 2018/10/01 15:35:52.053 | 在java.lang.Thread.run(Thread.java:748)

我在本地检查了上述问题,发现MASTER租户处于活动状态。 因此,此错误与我的代码/要求无关。 如果我们使用t.run(),那么我们使用的是来自hybris本身的线程,这是我不想要的。 我想创建自己的线程,然后使用该线程执行代码。 因此,为此,我需要将线程注册到hybris中,然后只有hybris才能在系统中识别我的线程。

任何小提示都是可以接受的。 谢谢。

付费偷看设置
发送
3条回答
野沐沐
1楼-- · 2020-09-09 11:19

要获取正确初始化的线程,请使用 de.hybris.platform.core.TenantAwareThreadFactory

根据hybris版本的不同,应该有一个ID为 tenantAwareThreadFactory 的bean,可以用来获取线程。

如果没有这样的bean,您可以轻松地自己定义它:

  
      
  

  

和建议:

请勿直接使用诸如 Thread 等的并发原语!

阅读Brian Goetz的"实践中的Java并发性",然后使用 java.util.concurrent 包中可用的工具来构建自己的东西。 ExecutorService 。 确实,真的使您的生活更轻松。

一周热门 更多>