使用ESB部署时,数据服务失败

时间:2015-05-16 18:29:42

标签: wso2esb wso2dss

我有一个数据服务,只在DSS环境中部署时才能正常运行。在具有dss和esb的环境中部署时的确切数据服务将使具有简单输入参数的操作失败。

任何关于失败的指示都将非常感激。

数据服务有两个操作;

  1. 简单获取没有输入参数的信息,GetLastRequest
  2. 传递单个datetime参数的更复杂的get操作,GetNewRequests
  3. 在仅DSS环境中部署时,两个操作都可以使用TryIT

    按预期工作

    在DSS / ESB环境中部署时,第一个操作按预期工作。使用TryIt

    时,第二个操作失败

    操作2:GetNewRequests

    DSS配置

    <data name="ServiceMagnetRequestMonitor" transports="http">
       <config id="ServiceMagnetStaging">
          <property name="driverClassName">com.mysql.jdbc.Driver</property>
          <property name="url">jdbc:mysql://localhost:3307/servicem_staging_engine</property>
          <property name="username">root</property>
          <property name="password">password</property>
       </config>
       <config id="ServiceMagnetRulesConfig">
          <property name="driverClassName">com.mysql.jdbc.Driver</property>
          <property name="url">jdbc:mysql://localhost:3307/servicemagnetrulesconfig</property>
          <property name="username">root</property>
          <property name="password">password</property>
       </config>
       <query id="GetLastRequest_SQL" useConfig="ServiceMagnetRulesConfig">
          <sql>SELECT datevalue, NOW() as currenttime FROM dateconfigurations WHERE        (configname = 'LastInspectionRequest')</sql>
          <result element="Configurations" rowName="Configuration">
             <element column="datevalue" name="datevalue" xsdType="dateTime"/>
             <element column="currenttime" name="currenttime" xsdType="dateTime"/>
          </result>
       </query>
       <query id="GetNewRequests_SQL" useConfig="ServiceMagnetStaging">
          <sql>SELECT requests.id, requests.name, requests.telephone, requests.email, languages.name AS preflanguage, locations.name AS location, regions.name AS region, provinces.name AS province, requests.timeframe_date, requests.timeframe, requests.created_at&#13;FROM            provinces, regions, locations, requests, languages&#13;WHERE        provinces.id = regions.province_id AND regions.id = locations.region_id AND locations.id = requests.location_id AND requests.language_id = languages.id AND (requests.created_at &gt; :LastRequest_IN)</sql>
          <result element="Requests" rowName="Request">
             <element column="id" name="id" xsdType="string"/>
             <element column="name" name="name" xsdType="string"/>
             <element column="telephone" name="telephone" xsdType="string"/>
             <element column="email" name="email" xsdType="string"/>
             <element column="preflanguage" name="preflanguage" xsdType="string"/>
             <element column="location" name="location" xsdType="string"/>
             <element column="region" name="region" xsdType="string"/>
             <element column="province" name="province" xsdType="string"/>
             <element column="timeframe_date" name="timeframe_date" xsdType="date"/>
             <element column="timeframe" name="timeframe" xsdType="string"/>
             <element column="created_at" name="created_at" xsdType="dateTime"/>
          </result>
          <param name="LastRequest_IN" sqlType="TIMESTAMP"/>
       </query>
       <operation name="GetLastRequest">
          <call-query href="GetLastRequest_SQL"/>
       </operation>
       <operation name="GetNewRequests">
          <call-query href="GetNewRequests_SQL">
             <with-param name="LastRequest_IN" query-param="LastRequest_IN"/>
          </call-query>
       </operation>
    </data>
    

    使用TryIT

    返回错误
    <soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:axis2ns5336="http://ws.wso2.org/dataservice">
       <soapenv:Code>
          <soapenv:Value>axis2ns5336:INCOMPATIBLE_PARAMETERS_ERROR</soapenv:Value>
       </soapenv:Code>
       <soapenv:Reason>
          <soapenv:Text xml:lang="en-US">DS Fault Message: Error in 'CallQuery.extractParams', cannot find parameter with type:query-param name:LastRequest_IN
    DS Code: INCOMPATIBLE_PARAMETERS_ERROR
    Source Data Service:-
    Name: ServiceMagnetRequestMonitor
    Location: \ServiceMagnetRequestMonitor.dbs
    Description: N/A
    Default Namespace: http://ws.wso2.org/dataservice
    Current Request Name: GetNewRequests
    Current Params: {}
    </soapenv:Text>
       </soapenv:Reason>
       <soapenv:Detail>
          <axis2ns5335:DataServiceFault xmlns:axis2ns5335="http://ws.wso2.org/dataservice">DS Fault Message: Error in 'CallQuery.extractParams', cannot find parameter with type:query-param name:LastRequest_IN
    DS Code: INCOMPATIBLE_PARAMETERS_ERROR
    Source Data Service:-
    Name: ServiceMagnetRequestMonitor
    Location: \ServiceMagnetRequestMonitor.dbs
    Description: N/A
    Default Namespace: http://ws.wso2.org/dataservice
    Current Request Name: GetNewRequests
    Current Params: {}
    </axis2ns5335:DataServiceFault>
       </soapenv:Detail>
    </soapenv:Fault>
    

2 个答案:

答案 0 :(得分:2)

以下实际上解决了上面提到的问题,但真正的解决方案看起来需要WSO2的修复。我会为它记录一个JIRA。

请注意,以下说明会导致您的安装或进一步升级出现任何问题。这些更改是纯配置并完全支持。

问题与报告一致。在同一实例中运行DSS和ESB会导致某些带有输入参数的DSS失败。

解决方案 - &gt;解决方法 简单地说,直到缺陷得到解决,您无法在同一个Carbon实例中运行DSS和ESB。但是,您可以在两台计算机上运行DSS和ESB,或者如下所述,在同一台计算机上运行两个实例。

呃,哎呀Rob,如果解决方案只是为了进行DSS操作,为什么要经历所有这些努力?为什么不设置dss而忘记esb?答案是由于想要在一台机器上同时使用dss和esb的功能。如果您只需要基本的dss功能,那么您可以停止阅读。但如果你需要在同一台机器上同时使用两种功能,请继续。

在一台计算机上运行ESB和DSS

  1. 独立安装DSS和ESB。
  2. 确保两者都没有正在运行
  3. ESB必须以端口偏移量1启动。端口偏移量可以在/repository/conf/carbon.xml文件中设置,其中是ESB二进制分发文件夹。将偏移值设置为1
  4. 启动两个实例
  5. ESB现在需要代理我们遇到问题的DSS服务。使用以下结构https://docs.wso2.com/display/ESB470/Pass+Through+Proxy+Template
  6. 在esb到dss中创建Passthrough代理
  7. 现在使用esb中的TRYIT。成功了!
  8. 我希望你觉得这很有用。

答案 1 :(得分:0)

之前我有同样的问题,但我找到了一个 解决方法:将文件$ CARBON_HOME / repository / conf / axis2.xml替换为$ CARBON_HOME / repository / conf / axis2_nhttp.xml

这将替换HTTP(s)传输的NHTTP实现的Passthrough,这与独立DSS中使用的相同。

请注意,这会对代理产生负面的性能影响,因此您可能更愿意坚持使用两个碳实例。