2015-05-16 5 views
2

У меня есть служба данных, которая отлично работает при развертывании в среде только DSS. Точная служба данных при развертывании в среде с dss и esb приведет к отказу от операции с простым входным параметром.Служба данных не работает при развертывании с ESB

Любые указатели относительно того, что терпит неудачу, будем очень благодарны.

Служба данных имеет две операции;

  1. Простых ПОЛУЧАЕТ информацию без каких-либо входных параметров, GetLastRequest
  2. Более сложная операция прибудет, в котором один параметр даты и времени передается в, GetNewRequests

При развертывании в 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

следующих фактически устраняет проблема идентифицирована выше, однако реальное решение выглядит так как это потребует исправления от WSO2. Я запишу JIRA для этого.

Обращаем ваше внимание, что следующие инструкции не содержат, что вызывает проблемы при установке или последующих обновлениях. Изменения являются чистой конфигурацией и полностью поддерживаются.

Проблема как сообщается. Запуск DSS и ESB в том же экземпляре приводит к сбою некоторых DSS с входными параметрами.

Решение -> обходной путь Проще говоря, пока дефект, если решить не удается запустить DSS и ESB в том же экземпляре Carbon. Однако вы можете запускать DSS и ESB на двух машинах или, как описано ниже, запустить два экземпляра на одном компьютере.

Uhhh, gee 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, с которой у нас были проблемы. Создайте прокси-сервер Passthrough в esb для dss, используя следующие инструкции: https://docs.wso2.com/display/ESB470/Pass+Through+Proxy+Template
  6. Теперь используйте TRYIT с esb. Успех!

Надеюсь, вы найдете это полезным.

+0

Начиная с Integrator 6.x, этот вопрос больше не является проблемой. Интегратор объединяет как DSS, так и ESB и решает описанную проблему взаимодействия. –

0

I've до того была такая же проблема, но I've удалось найти обходной путь: Заменить файл $ CARBON_HOME/хранилище/CONF/axis2.xml на $ CARBON_HOME/хранилище/CONF/axis2_nhttp.xml

Это заменит Passthrough реализацией NHTTP для транспорта HTTP (ов), который тот же, что и в автономной DSS.

Обратите внимание, что это связано с отрицательным воздействием на прокси-серверы, поэтому вы можете предпочесть придерживаться двух экземпляров углерода.

Смежные вопросы