如果未启动Backoffice,则在Solr更新期间在Backoffice Null指针中进行Solr搜索

2020-09-23 17:55发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) BackofficeValue...

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

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


BackofficeValueResolver依赖于Backoffice应用程序上下文,该上下文仅在方法addBackofficeSpecificFields中(通过使用LabelServiceProxy)初始化仅访问backoffice登录页面。 如果在应用程序启动后没有人将后台访问和产品添加到系统,则solr更新作业将因NPE而失败。 可以通过HotFolders(自定义扩展的后缀)添加产品,而无需使用后台。 那是预期的行为吗? 可以将其配置为在应用程序启动时初始化后台应用程序上下文吗?

 由:java.lang.NullPointerException
          在com.hybris.backoffice.solrsearch.resolvers.BackofficeValueResolver.addBackofficeSpecificFields(BackofficeValueResolver.java:64)〜[backofficesolrsearchserver.jar :?]
          在com.hybris.backoffice.solrsearch.resolvers.BackofficeValueResolver.addFieldValues(BackofficeValueResolver.java:53)〜[backofficesolrsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.provider.impl.AbstractValueResolver.resolve(AbstractValueResolver.java:134)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.impl.DefaultSolrDocumentFactory.addIndexedPropertyFieldsForNewApi(DefaultSolrDocumentFactory.java:347)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.impl.DefaultSolrDocumentFactory.addIndexedPropertyFields(DefaultSolrDocumentFactory.java:301)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.impl.DefaultSolrDocumentFactory.createInputDocument(DefaultSolrDocumentFactory.java:194)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.impl.DefaultIndexer.indexItems(DefaultIndexer.java:124)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.strategies.impl.DefaultIndexerBatchStrategy.executeIndexerOperation(DefaultIndexerBatchStrategy.java:247)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.strategies.impl.DefaultIndexerBatchStrategy.execute(DefaultIndexerBatchStrategy.java:212)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.workers.impl.DefaultIndexerWorker.doRun(DefaultIndexerWorker.java:199)〜[solrfacetsearchserver.jar :?]
          在de.hybris.platform.solrfacetsearch.indexer.workers.impl.DefaultIndexerWorker.run(DefaultIndexerWorker.java:156)〜[solrfacetsearchserver.jar :?]
          在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)〜[?:1.8.0_101]
          在java.util.concurrent.FutureTask.run(FutureTask.java:266)〜[?:1.8.0_101]
          在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)〜[?:1.8.0_101]
          在java.util.concurrent.FutureTask.run(FutureTask.java:266)〜[?:1.8.0_101]
          在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)〜[?:1.8.0_101]
          在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)〜[?:1.8.0_101]
          在java.lang.Thread.run(Thread.java:745)〜[?:1.8.0_101]
  
5条回答
梦想连接
2020-09-23 18:38 .采纳回答

我们通过在初始化期间导入此impex来解决此问题:

  INSERT_UPDATE SolrIndex;  &ref;  qualifier [unique = true];  facetSearchConfig(name)[unique = true];  indexedType(identifier)[unique = true]; 活性
                                  ; 指标; 翻转; 后台的Solr配置;  BackofficeProduct; 真正
 
  INSERT_UPDATE SolrIndexOperation;  id [unique = true];  operation(code)[unique = true]; 外部;  index(&ref);  status(code)[unique = true];  startTime [dateformat = yyyy-DD-mm]
                                   ;  0000000001; 饱满; 错误的; 指标; 成功;  2018-01-01
                                   ;  0000000002; 更新; 错误的; 指标; 成功;  2018-01-01
                                   ;  0000000003; 删除; 错误的; 指标; 成功;  2018-01-01

  

这可以防止NPE。

但这会导致另一个问题:由于 labelServiceProxy 为null,因此 backofficeValueResolver 中现在还有另一个NPE。 此属性仅在启动后台时注入!! 如果你问我,执行不力...

因此,我们还必须在xxxbackoffice自定义扩展中使用虚拟bean覆盖这些bean:

  <!-这只是一个虚拟bean->
      
 
      
      
          
      
 
      
      
          
      


  

积极的副作用(除了现在消失的例外)是,现在从一开始就填充了后台的产品视图。 首次启动后台时,您不必单击"立即索引"链接。 仍然感觉这根本没有必要,SAP应该首先尝试将它们的sh **放在一起……

一周热门 更多>