Service 定义自定义托管服务失败

Service 定义自定义托管服务失败,service,managed,intershop,Service,Managed,Intershop,我们正试图开发定制的Intershop托管服务,具体做法如下: 但在尝试为我们的组织启用操作中的服务时,该服务未在此处列出,并且会显示一条警告日志消息: WARN localhost ES1 appserver0 [Test-Site] com.intershop.component.service.internal.service.ORMServiceConfigurationBORepositoryImpl [] [Storefront] [8ocH1vmRUp4E1qKOZQQC5FF

我们正试图开发定制的Intershop托管服务,具体做法如下: 但在尝试为我们的组织启用操作中的服务时,该服务未在此处列出,并且会显示一条警告日志消息:

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.component:

<?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>
但是,当在“ESBServiceDefinitionImpl”上单击CTRL+鼠标左键时,发现并显示了实现

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


突出显示。

可能服务定义ID不匹配:


esbService vs.ESBServiceDefinition

能否尝试以下组件设置:

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

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

  • 停止服务器
  • 运行
    gradlew部署服务器
  • 启动服务器
  • 当然是打字错误:)我将文件夹命名为service.component“component”,而不是“components”。
    谢谢大家的帮助

    日志中还有其他内容吗?停止服务器并清除日志(错误和警告),然后重新启动。不,没有其他内容。调用pipeline:ViewChannelServiceList分派以列出BOThanks中的所有可用服务时,请尝试此操作。但正如我从这里了解到的:serviceDefinitionID与serviceDefinition不同:serviceDefinitionID-myService-serviceDefinition是由cartridgeID和serviceDefinitionID唯一定义的。serviceDefinition-MyDefinition-指的是以前在组件配置文件中定义的MyDefinition实例一个问题是,service.component文件(在自定义服务\u esb盒带中)是否会在服务器启动时自动扫描以查找可用服务?或者可用服务的发现是如何工作的?不幸的是,它仍然不起作用。我正在通过DBInit添加服务:您是否也尝试手动添加它?如果您可以先手动添加,我们可以稍后查看dbinit preparer。我无法手动添加,因为在“销售组织”->“服务”选项卡下没有列出ESBService,请尝试使用标准的groupid之一。然后应列在订单出口服务下。在打开订单导出服务组时,只显示“本地XML文件订单导出”时,肯定存在配置错误:(是的,也尝试了。手动检查盒带是否部署在服务器目录下并加载到SMC中。啊,很高兴听到这个消息。通常在没有任何意义时,它是这样的小东西。
    <?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>