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