1

私は、torquebox (www.torquebox.org) の mod_xsendfile に似た機能のサポートを実装する試みに着手しました。Torquebox は基本的に JBoss AS 7 の上にある一連のコードであり、JBoss AS 7 で sendfile を動作させるのと同じような努力をしています。

ここでの主な問題は、おそらく JBoss に関する私の混乱です。しかし、あまりにも多くの時間を浪費してすべてのグーグル リソースを使い果たした後、AS 7 でこのことがどのように機能するかを実際に知っている人がそこにいると信じなければなりません。

私が理解しているように、sendfile は JBoss Web ネイティブ コネクタ (http://www.jboss.org/jbossweb/downloads/jboss-native-2-0-10)、つまり APR http コネクタを使用して JBoss でサポートされています。

これらを AS 7 にインストールするのに何時間も費やした後、他の人にとっては魅力的なように思えます (https://community.jboss.org/message/614790)。ローカルの JBoss ディレクトリを grep すると、これらのネイティブ コネクタはAS 7にバンドルされているようです。私の場合、必要なdllは次の場所に配置されています

%JBOSS_HOME%\modules\org\jboss\as\web\main\lib\win-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) http-127.0 で Coyote HTTP/1.1 を起動中.0.1-127.0.0.1-8080

Http11AprProtocol は、APR http コネクタが使用されていることを示します。ただし、Web 上の多くの投稿では、次の行も表示する必要があると言及されています。

org.apache.catalina.core.AprLifecycleListener init INFO: APR 機能: IPv6 [true]、sendfile [true]、受け入れフィルター [false]、random [true]。

ログ レベルに関係なく、AprLifecycleListener の行は表示されません。

これを確認すると、APR http コネクタが現在使用されているようです。

ドキュメントによると、次のサーブレットを動作させることができます

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 を有効にする必要がありますが、サーバーは何をしようとしているのかわかりません。

どうやって進める?

4

1 に答える 1

8

また、それがどのように機能するかを学ぶために何時間も費やしました. あなたはすべてを正しく行いました。Webシステムを次のように配置するのを逃しました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].

幸運を :)

于 2012-10-02T14:09:40.783 に答える