NetConnection.Call.Faliled происходит спорадически в Flex3 / Tomcat / BlazeDS / Spring - PullRequest
4 голосов
/ 30 июня 2010

У меня очень большая проблема. Я написал большое приложение с использованием Flex3 / Tomcat / BlazeDS / Spring, которое очень хорошо работало при локальной разработке, прекрасно, когда я развертывал в обычной среде разработки, но затем очень часто отказывало при развертывании в нашей тестовой среде.

Похоже, что сбои происходят чаще всего, когда запрос удаленного взаимодействия занимает много времени (более 20 секунд). На моем dev-сервере ошибки случаются, но только когда запрос занимает очень много времени (более 45 секунд). Тем не менее, эта ошибка также иногда возникает мгновенно (отправьте запрос, и он немедленно завершится неудачей). Большинство ошибок также имеют статус HTTP: 502 (Bad Gateway), но некоторые просто говорят, что HTTP Failed.

Я не сделал ничего особенного с BlazeDS, кроме как поместить файл war в каталог webapps. Приложение доступно через https. Удаленные вызовы относятся к серверу только по «назначению». Серверы tomcat в наших экземплярах DEV и TEST имеют идентичные аргументы java (те же Xms и Xmx и т. Д.). Ниже приведены мои соответствующие файлы:

Услуги по-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
    <services>
        <default-channels>
           <channel ref="my-secure-amf"/>
        </default-channels>
    </services>
    <channels>
        <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>
    </channels>
<services-config>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    ...

    <servlet>
        <servlet-name>spring-flex</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/flexContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-flex</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
</web-app>

flexContext.xml

<!--
    I have component-scan tags here to scan my class files. The Controller I'm using for flex has an annotation on it to define it as a remote destination. Here it is:
    @Controller
    @RemotingDestination(value = "dest", channels="my-secure-amf")
    public class FlexController {
-->

<bean id="flexExceptionTranslator" class="edu.liberty.zconduct.web.FlexExceptionTranslator" />

<flex:message-broker>
    <flex:exception-translator ref="flexExceptionTranslator"/>
    <!-- <flex:secured /> Had this previously, but it wasn't working then, either -->
</flex:message-broker>

Я близок к концу моей веревки. Ошибка - взломщик приложений. Пожалуйста, пожалуйста, помогите мне, если можете.

EDIT Я переключился на http и все еще получаю ошибку. Tomcat сейчас говорит:

ВНИМАНИЕ: Ошибка при отправке конечного пакета

java.net.SocketException: сломанная труба

Я смотрю в своем журнале apache запрос jk_mod и вижу некоторую отладочную информацию, похожую на запрос, который я отправил, а затем следующее:

[отладка] ajp_send_request :: jk_ajp_common.c (1592): повторно отправить тело запроса (432)

[отладка] jk_shutdown_socket :: jk_connect.c (681): собирается отключить розетку 68

[отладка] jk_shutdown_socket :: jk_connect.c (732): выключите сокет 68 и прочитайте 0 протяженные байты

[информация] ajp_connection_tcp_get_message :: jk_ajp_common.c (1150): (myTestServer) не может получить сообщение заголовка ответа от tomcat, проблемы с сетью или tomcat (xx.xx.xx.xx: xxxx) не работает (errno = 11)

[ошибка] ajp_get_reply :: jk_ajp_common.c (1962): (myTestServer) Tomcat отключен или отказался от подключения. Нет ответа было отправлено клиенту (пока)

[info] ajp_service :: jk_ajp_common.c (2447): (myTestServer) отправка запроса коту не удалось (подлежит восстановлению), (Попытка = 2)

[ошибка] ajp_service :: jk_ajp_common.c (2466): (myTestServer) подключение к кот не удался.

[отладка] ajp_reset_endpoint :: jk_ajp_common.c (743): (myTestServer) сброс конечная точка с SD = 4294967295 (сокет выключение)

[debug] ajp_done :: jk_ajp_common.c (2905): пул соединений для рециркуляции слот = 0 для рабочего myTestServer

[info] jk_handler :: mod_jk.c (2615): Ошибка сервиса = 0 для рабочий = myTestServer

1 Ответ

2 голосов
/ 08 июля 2010

Корнел Крянгэ помог мне прийти к этому решению.Я переключил свое приложение на http и начал получать сообщения в файле catalina.out.Я не знаю, почему это повлияло на это, но это сделало.В сообщениях говорилось, что в розетке сломана труба.Дальнейшее расследование показало, что был задействован jk_mod.

В ходе большого поиска я обнаружил, что наши SysAdmins установили тайм-аут сокета на сервере на 10 секунд на наших серверах TEST, но на 5 минут на наших серверах DEV, поэтомумассовые поиски приводили к истечению времени ожидания, как только он попадал в TEST.

SysAdmins изменил конфигурацию в TEST так, чтобы другой работник (с 5-минутным таймаутом) обрабатывал вызовы для этого пути контекста.*

...