【问题标题】:Defining custom managed service fails定义自定义托管服务失败
【发布时间】:2018-06-12 09:57:35
【问题描述】:

我们正在尝试按照食谱开发自定义 Intershop 托管服务:https://support.intershop.com/kb/index.php/Display/2329T4 但是,当尝试在我们组织的运营中启用服务时,它没有在此处列出,并且有一条警告日志消息:

WARN  localhost ES1 appserver0 [Test-Site]  com.intershop.component.service.internal.service.ORMServiceConfigurationBORepositoryImpl [] [Storefront] [8ocH1vmRUp4E1qKOZQQC5FFRtQai9r4QV6dAV1yx] [oBlLAFsfl5kFMqjA-0-00] "oBlLAFsfl5kFMqjA-0-00" Can't load implementation for service definition: cartridge='service_esb', service definition id='ESBServiceDefinition'. 

这里是 services.compoment:

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://www.intershop.de/component/2010">
  <!-- Adapter interface -->
  <contract name="ESBService" class="com.test.service.capi.ESBService" />

  <!-- ServiceDefintion implementation -->
  <implementation name="ESBServiceDefinitionImpl" class="com.test.service.internal.ESBServiceDefinition" implements="ServiceDefinition" />

  <!-- ServiceDefintion instance that has already one adapter added -->
  <instance name="ESBServiceDefinition" with="ESBServiceDefinitionImpl" />

  <!-- Registering the ServiceDefintion instance to the (global) ServiceDefinitionRegistry -->
  <fulfill requirement="serviceDefinition" of="serviceDefinitionRegistry">
    <instance with="ServiceDefinitionRegistry.Entry">
      <fulfill requirement="cartridgeID" value="service_esb" />
      <fulfill requirement="groupID" value="service.group.name.test" />
      <fulfill requirement="parameterGroupID" value="ESBParameters" />
      <fulfill requirement="serviceDefinitionID" value="esbService" />
      <fulfill requirement="localizationKeyForName" value="service.definition.name.esbService" />
      <fulfill requirement="serviceDefinition" with="ESBServiceDefinition" />
      <fulfill requirement="ChainElementID" value="LogHandler" />
      <fulfill requirement="ChainElementID" value="MonitorHandler" />
    </instance>
  </fulfill>
</components>

所有必需的类(AdapterInterface、Adapter、ExecutorService、ServiceDefinition - 扩展 AbstractServiceDefinition)均已成功实现和编译。有人知道为什么 Intershop 无法加载实现吗?

另外,在组件编辑器的 Intershop Studio 中,打开 services.component 时会显示以下错误:

With 'Implementation - ESBServiceDefinitionImpl (unresolved)' cannot be resolved

但是当点击“ESBServiceDefinitionImpl”实现上的CTRL+鼠标左键时,发现并

<implementation name="ESBServiceDefinitionImpl" class="com.test.service.internal.ESBServiceDefinition" implements="ServiceDefinition" />

突出显示。

【问题讨论】:

  • 日志中还有其他内容吗?停止服务器并清除日志(错误和警告),然后重新启动。
  • 不,没有别的。调用管道时仅以上警告:ViewChannelServiceList-Dispatch 列出 BO 中的所有可用服务

标签: service managed intershop


【解决方案1】:

当然是错字:) 我用 service.component 命名文件夹“组件”,而不是“组件”。 谢谢大家的帮助!

【讨论】:

  • 啊,很高兴听到这个消息。很多时候,当没有任何意义时,它就是这样的小事。
【解决方案2】:

可能 ServiceDefinitionID 不匹配:

esbService 与 ESBServiceDefinition

【讨论】:

  • 谢谢,试过了。但正如我从这里了解到的那样:support.intershop.com/kb/index.php/Display/… serviceDefinitionID 与 serviceDefinition 不同:serviceDefinitionID - myService - ServiceDefinition 由盒式 ID 和 serviceDefinitionID 唯一定义。 serviceDefinition - MyDefinition - 指之前在组件配置文件中定义的 MyDefinition 实例
  • 一个问题 Nils,service.compoment 文件(在自定义 service_esb 盒中)是否会在服务器启动时自动扫描可用服务?或者发现可用服务的工作原理是什么?
【解决方案3】:

您可以尝试以下组件设置:

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://www.intershop.de/component/2010" scope="global">
  <!-- Adapter interface -->
  <contract name="ESBService" class="com.test.service.capi.ESBService" />

  <!-- ServiceDefintion implementation -->
  <implementation name="com.test.service.internal.ESBServiceDefinition" class="com.test.service.internal.ESBServiceDefinition" implements="ServiceDefinition" />

  <!-- Registering the ServiceDefintion instance to the (global) ServiceDefinitionRegistry -->
  <fulfill requirement="serviceDefinition" of="serviceDefinitionRegistry">
    <instance with="ServiceDefinitionRegistry.Entry">
      <fulfill requirement="cartridgeID" value="service_esb" />
      <fulfill requirement="groupID" value="service.group.name.test" />
      <fulfill requirement="parameterGroupID" value="ESBParameters" />
      <fulfill requirement="serviceDefinitionID" value="esbService" />
      <fulfill requirement="localizationKeyForName" value="service.definition.name.esbService" />
      <fulfill requirement="serviceDefinition">
        <instance with="com.test.service.internal.ESBServiceDefinition" />
      </fulfill>
      <fulfill requirement="ChainElementID" value="LogHandler" />
      <fulfill requirement="ChainElementID" value="MonitorHandler" />
    </instance>
  </fulfill>
</components>

【讨论】:

  • 不幸的是它仍然不起作用。我正在通过 DBInit 添加服务:support.intershop.com/kb/index.php/Display/…
  • 您是否也尝试手动添加?如果您可以先手动添加它,我们可以稍后查看 dbinit 准备器。
  • 我无法手动添加它,因为销售组织下的服务选项卡下没有列出 ESBService -> support.intershop.com/kb/index.php/Display/…
  • 尝试使用标准 groupid 之一。 。然后应在“订购出口服务”下列出。某处一定有配置错误
  • 否,打开订单导出服务组时仅显示“本地 XML 文件订单导出”:(
【解决方案4】:

这是一个很长的尝试,但您是否尝试在创建自定义托管服务后重新部署服务器?

  1. 停止服务器。
  2. 运行gradlew deployServer
  3. 启动服务器

【讨论】:

  • 是的,也试过了。手动检查插件是否部署在服务器目录下并加载到 SMC 中。
猜你喜欢
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2018-09-13
相关资源
最近更新 更多