Apache ODE в OpenShift вызывает тайм-аут удаленного веб-сервиса

У меня следующая конфигурация:

Механизм Tomcat 7 работает в OpenShift Online. Я развернул Apache ODE как веб-приложение и протестировал простой рабочий процесс BPEL (эхо-тест), который отлично работал. У меня есть еще 2 шестерни на OpenShift, на которых работают серверы WildFly8 и некоторые веб-сервисы. Я создал рабочий процесс для ODE, который вызывает эти службы. Когда я тестирую рабочий процесс на своем локальном ПК с Tomcat 7 и Apache ODE, он работает просто отлично. Однако в OpenShift у меня есть следующая проблема:

Когда ODE пытается вызвать удаленный веб-сервис, он сообщает своим библиотекам Axis создать сокет. Поскольку привязка сокетов к «localhost» в OpenShift не разрешена, я получаю исключение. Я изменил метод org.apache.commons.httpclient.HttpConnection.open(), чтобы привязать сокет к локальному IP-адресу OpenShift моего устройства вместо локального хоста, и избавился от исключения привязки. Однако удаленный веб-сервис, похоже, не отвечает на мой запрос:

07:11:50,505 ERROR [ExternalService] Error sending message (mex={PartnerRoleMex#hqejbhcnphr9mgvfg5xbh1 [PID {org.neo}btest-2] calling [email protected](...) Status ASYNC}): The host did not accept the connection within timeout of 60000 ms
org.apache.axis2.AxisFault: The host did not accept the connection within timeout of 60000 ms
    at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:203)
    at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:438)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
    at org.apache.ode.axis2.SoapExternalService$1$1.call(SoapExternalService.java:206)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 60000 ms
    at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:155)
    at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
    at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:715)
    at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)
    at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:557)
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)
    ... 12 more
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140)
    ... 21 more

Эта статья натолкнула меня на эту идею: https://www.openshift.com/forums/openshift/commons-httpclient-permission-denied

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

Я благодарен за любые советы, я занимаюсь этим уже почти неделю...


person Ciri    schedule 23.09.2014    source источник
comment
Можете ли вы опубликовать часть кода, который вы используете? Просто наличие ошибок не всегда так полезно.   -  person    schedule 23.09.2014


Ответы (1)


Мне удалось это исправить, создав самодельный картридж и установив на него новейшую версию Tomcat 7. Я развернул ODE и свой рабочий процесс, получил ту же ошибку привязки, что и раньше, изменил библиотеку apache-commons, которую использовала Axis, и теперь все идет гладко.

Я не знаю, почему он не работал с картриджем Tomcat 7, который я получаю от OpenShift в качестве стандартного.

person Ciri    schedule 26.09.2014