APR为JBoss AS加速:实现分析

原创 2007年10月05日 17:48:00
  •  
APR为JBoss加速主要通过基于APR和JNI(Java Native Interface)的Connector实现。具体包括:Connector、JNI和集成。
Connector
1、 基于APR的HTTP11 Connector实现
org.apache.coyote.http11. Http11NioProcessor
org.apache.coyote.http11. Http11AprProtocol
2、 基于APR的AJP Connector实现
org.apache.coyote.ajp. AjpAprProcessor
org.apache.coyote.ajp. AjpAprProtocol
JNI实现
1、 Connector
Java接口:org.apache.tomcat.jni.Library
C实现:native connector的src目录
2、 SSL
Java接口:org.apache.tomcat.jni.SSL
C实现:native connector的src目录
 
APR集成
1、 JNI库的初始化和清除
APR的初始化通过Server的LifecycleListener接口实现,配置在server.xml中,xml片断如下:
<Server>
 
 <!--APR library loader. Documentation at /docs/apr.html -->
 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
……
 
JNI库在Server的Lifecycle的INI_EVENT时进行初始化,在AFTER­_STOP_EVENT时进行清除,具体代码如下:
 
/**
     * Primary entry point for startup and shutdown events.
     *
     * @param event The event that has occurred
     */
    public void lifecycleEvent(LifecycleEvent event) {
 
        if (Lifecycle.INIT_EVENT.equals(event.getType())) {
            aprInitialized = init();
            if (aprInitialized) {
                try {
                    initializeSSL();
                } catch (Throwable t) {
                    if (!log.isDebugEnabled()) {
                        log.info(sm.getString("aprListener.sslInit"));
                    } else {
                        log.debug(sm.getString("aprListener.sslInit"));
                    }
                }
            }
        } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) {
            if (!aprInitialized) {
                return;
            }
            try {
                terminateAPR();
            } catch (Throwable t) {
                if (!log.isDebugEnabled()) {
                    log.info(sm.getString("aprListener.aprDestroy"));
                } else {
                    log.debug(sm.getString("aprListener.aprDestroy"), t);
                }
            }
        }
 
    }
 
 
2、 Connector选用
 
public Connector(String protocol)
        throws Exception {
        setProtocol(protocol);
        // Instantiate protocol handler
        try {
            Class clazz = Class.forName(protocolHandlerClassName);
            this.protocolHandler = (ProtocolHandler) clazz.newInstance();
        } catch (Exception e) {
            log.error
                (sm.getString
                 ("coyoteConnector.protocolHandlerInstantiationFailed", e));
        }
    }
 
 
    /**
     * Set the Coyote protocol which will be used by the connector.
     *
     * @param protocol The Coyote protocol name
     */
    public void setProtocol(String protocol) {
 
        // Test APR support
        initializeAPR();
 
        if (aprInitialized) {
            if ("HTTP/1.1".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.coyote.http11.Http11AprProtocol");
            } else if ("AJP/1.3".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.coyote.ajp.AjpAprProtocol");
            } else if (protocol != null) {
                setProtocolHandlerClassName(protocol);
            } else {
                setProtocolHandlerClassName
                    ("org.apache.coyote.http11.Http11AprProtocol");
            }
        } else {
            if ("HTTP/1.1".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.coyote.http11.Http11Protocol");
            } else if ("AJP/1.3".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.jk.server.JkCoyoteHandler");
            } else if (protocol != null) {
                setProtocolHandlerClassName(protocol);
            }
        }
 
    }
 
说明:Connector构造函数调用setProtocol函数设置Connector处理请求的Protocol Handler。在setProtocol函数中,只要能够成功地初始化APR,将使用基于APR的实现的org.apache.coyote.http11.Http11AprProtocol和org.apache.coyote.ajp.AjpAprProtocol作为请求处理的Protocol Handler。

jboss as 7.1.1

  • 2017年01月16日 07:41
  • 17.8MB
  • 下载

linux 下安装配置jboss as7以及部署应用

linux 下安装配置jboss as7以及部署应用 1.测试平台及软件 centos 5.4 jdk-7u5-linux-i586.rpm jboss-as-7.1.1.Final.zip...
  • ppzlyg
  • ppzlyg
  • 2012年06月20日 21:58
  • 3375

JBoss AS7教程

  • 2014年06月10日 09:39
  • 2.29MB
  • 下载

jboss-as-distribution-6.1.0.Final系列4

  • 2013年02月18日 16:43
  • 45MB
  • 下载

关于JBoss AS7的知识点归纳

由于本人曾经某一段时期从事过关于JBoss最新版本(JBoss AS7)的研发工作,当然对于它当时有一些自己的理解,一直想把笔记拷贝出来,前提是在自己的平台上。毕竟一份有价值和心血的东西,想用自己喜欢...

JBoss AS 7.1.1

  • 2013年12月19日 08:24
  • 1.48MB
  • 下载

JBoss AS7 用户指南

[原文] http://community.jboss.org/wiki/JBossAS7UserGuide   这是简要的指南,意在帮助那些期望体验JBoss AS7的用户,尽管JBoss AS7还...

Win 8 系统下 JBoss AS 7 Final 的下载配置与使用——Windows J2EE开发安装序列之五

一、JBOSS的下载与安装 首先进入官网下载JBoss :http://www.jboss.org/jbossas/downloads 选择最新版本,进行下载。 解压到指定目录 配置环...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:APR为JBoss AS加速:实现分析
举报原因:
原因补充:

(最多只允许输入30个字)