Jboss AS7, родные разъемы APR и sendfile - PullRequest
1 голос
/ 11 февраля 2012

Я предпринял попытку реализовать поддержку функции, аналогичной mod_xsendfile на Torquebox (www.torquebox.org). Torquebox, по сути, представляет собой набор кода поверх JBoss AS 7, что делает мои усилия своего рода эквивалентными работе sendfile на JBoss AS 7.

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

Насколько я понимаю, sendfile поддерживается в JBoss за счет использования собственных коннекторов JBoss Web (http://www.jboss.org/jbossweb/downloads/jboss-native-2-0-10),, а именно HTTP-коннектора APR.

После того, как вы потратили часы, не устанавливая их на AS 7, что, кажется, работает как прелесть для других (https://community.jboss.org/message/614790), grep'ing, мой локальный каталог JBoss говорит мне, что эти родные соединители, по-видимому, связаны с AS 7. В моем случае необходимая dll находится в

% JBOSS_HOME% \ модули \ орг \ JBoss \ а \ Web \ главный \ Lib \ выигрыш-x86_64

Так что эпический провал, попытка установить то, что уже есть. Проверка моего файла конфигурации standalone.xml также показала, что этот собственный коннектор используется

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="false">
        <alias name="localhost"/>
        <alias name="example.com"/>
    </virtual-server>
</subsystem>

Переключение всех уровней ведения журнала на отладку и проверка журнала показывает сообщение журнала

standalone / log / server.log.2012-02-10: 324: 23: 12: 17,964 INFO [org.apache.coyote.http11.Http11AprProtocol] (поток службы MSC 1-5) Запуск Coyote HTTP / 1.1 включен HTTP-127.0.0.1-127.0.0.1-8080

Где Http11AprProtocol указывает, что используется HTTP-коннектор APR. Тем не менее, во многих публикациях в Интернете упоминается, что должна быть показана следующая строка:

org.apache.catalina.core.AprLifecycleListener init INFO: возможности APR: IPv6 [true], sendfile [true], принимать фильтры [false], случайные [true].

Независимо от уровня ведения журнала, строка AprLifecycleListener никогда не отображается.

Когда я проверяю это, кажется, что теперь используется HTTP-коннектор APR.

Согласно документации, я могу заставить работать следующий сервлет

public class Sendfile extends HttpServlet {
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        if(Boolean.TRUE == request.getAttribute("org.apache.tomcat.sendfile.support")){
            // Send all the files!!
        }
        else{
            throw new ServletException("BOOM!");
        }
    }
}

Но нет. Атрибут org.apache.tomcat.sendfile.support имеет значение null, и если попытаться установить заголовки http для отправки файла (игнорируя атрибут support) и задать остальные обязательные атрибуты sendfile, мой браузер считает, что он получает файл, но данные не передаются ... и соединение не работает.

Чтобы завершить вопрос, кажется, что требуемый собственный коннектор APR используется, sendfile должен быть включен по умолчанию, но сервер не имеет ни малейшего представления, что я пытаюсь заставить его сделать.

Как продолжить?

1 Ответ

8 голосов
/ 02 октября 2012

Я также потерял часы, пытаясь понять, как это работает.Вы все сделали правильно.Просто пропустил установку веб-системы как native=true:

<subsystem xmlns="urn:jboss:domain:web:1.1" 
         default-virtual-server="default-host" native="true">

Запуск с ней:

11:00:26,018 DEBUG [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) Loaded: apr-1
11:00:26,039 DEBUG [org.jboss.modules] (ServerService Thread Pool -- 58) Module org.jboss.xb:main defined by local module loader @d8d9850 (roots: /home/mmagnani/Development/jboss-eap/jboss-eap-6.0/modules)
11:00:26,070 DEBUG [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) Loaded: z
11:00:26,071 DEBUG [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) Loaded: crypto
11:00:26,072 DEBUG [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) Loaded: ssl
11:00:26,079 DEBUG [org.jboss.as.ejb3] (ServerService Thread Pool -- 36) Adding EJB @Asynchronous support
11:00:26,082 DEBUG [org.jboss.as.ejb3] (ServerService Thread Pool -- 36) Configuring timers
11:00:26,092 DEBUG [org.jboss.as.ejb3] (ServerService Thread Pool -- 36) Adding EJB IIOP support
11:00:26,101 FINE  [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-6) Starting server HornetQServerImpl::
11:00:26,120 DEBUG [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) Loaded: tcnative-1
11:00:26,141 DEBUG [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) Loaded Apache Tomcat Native library 1.1.23.
11:00:26,141 DEBUG [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) APR capabilities: IPv6 [true], sendfile [true], random [true].

Удачи

...