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。
分享到:
相关推荐
赠送jar包:jboss-logging-3.4.1.Final.jar; 赠送原API文档:jboss-logging-3.4.1.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.1.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.1.Final....
赠送jar包:jboss-logging-3.4.3.Final.jar; 赠送原API文档:jboss-logging-3.4.3.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.3.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.3.Final....
【JBoss AS7教程】 JBoss Application Server 7(简称JBoss AS7)是Red Hat公司推出的一款开源Java EE应用服务器,它基于EAP(Enterprise Application Platform)的轻量级版本,提供了对Java EE 6规范的全面支持。...
赠送jar包:jboss-logging-3.3.2.Final.jar; 赠送原API文档:jboss-logging-3.3.2.Final-javadoc.jar; 赠送源代码:jboss-logging-3.3.2.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.3.2.Final....
<subsystem xmlns="urn:jboss:domain:logging:1.0"> <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/> ``` 该配置定义了三个扩展模块:`connector`、`jmx`和`logging`,并...
3. **代码编写**:根据应用需求编写Java代码,利用JBoss AS 5提供的API进行业务逻辑实现。 4. **部署配置**:将编译好的应用打包成WAR或EAR文件,并通过JBoss AS 5的部署目录或者管理控制台进行部署。 5. **测试与...
赠送jar包:jboss-logging-3.4.2.Final.jar; 赠送原API文档:jboss-logging-3.4.2.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.2.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.2.Final....
JBoss AS 7(Application Server 7)是一款功能强大且开放源代码的应用服务器,为开发者提供了高效稳定的开发平台,支持多种高级特性,包括EJB(Enterprise JavaBeans)、JPA(Java Persistence API)、CDI...
### JBoss AS7 文档概览 JBoss AS7(Application Server 7)是JBoss社区推出的一款开源应用服务器,其文档提供了全面且详细的指南、教程及资源介绍,旨在帮助开发者和管理员更好地理解和掌握JBoss AS7的各项功能与...
《JBoss at Work: A Practical Guide》是一本深入解析JBoss应用服务器的实践指南,它为读者提供了在实际工作中使用JBoss的全面指导。JBoss是Red Hat公司开发的一个开源Java应用服务器,它基于Java EE(Java ...
It shows how to configure the server's various component containers such as the JBoss Web Server, the EJB 3 server, and JBoss Messaging. It also provides detailed insight into configuring the various...
### JBoss in Action: Configuring the JBoss Application Server #### 关键知识点概览 - **JBoss Application Server**: 一种开源的应用服务器,适用于Java应用程序的部署与管理。 - **JBoss in Action**: 一本...
通过阅读《JBoss AS 5开发》,开发者不仅能掌握JBoss AS 5的使用,还能理解Java EE的架构和工作原理,为构建复杂的企业级应用打下坚实基础。提供的链接是一个博客文章,可能包含作者对JBoss AS 5开发的一些个人见解...
文章首先介绍了使用 Nginx 1.2.1 和 JBOSS AS 7 做为应用服务器的理由,然后详细介绍了使用 Nginx 1.2.1 + JBOSS AS 7(standalone 模式)实现负载均衡的配置过程。 在负载均衡方面,文章首先介绍了 JBOSS 官方文档...
The latest JBoss AS 5 Development Guide book, very practical to any developer who is or is going to use JBoss AS
JBoss Application Server(简称JBoss AS)是Red Hat公司开发的一款开源Java EE应用服务器,它基于Eclipse MicroProfile和Jakarta EE标准,为开发和部署企业级应用程序提供了全面的平台。JBoss AS是Java世界中的重要...
[Packt Publishing] JBoss AS 7 配置部署管理教程 (英文版) [Packt Publishing] JBoss AS 7 Configuration, Deployment and Administration (E-Book) ☆ 出版信息:☆ [作者信息] Francesco Marchioni [出版机构...
JBoss Application Server(简称JBoss AS)是Red Hat公司开发的一款开源Java应用服务器,它基于Java EE(Enterprise Edition)规范,为企业级应用提供运行环境。JBoss AS 7是其一个重要版本,引入了许多改进和优化,...
1. **隐式模块依赖的概念**: 隐式模块依赖指的是 JBoss AS7 自动为部署添加的一些模块依赖,这些依赖通常是为了满足部署中某些组件的需求而添加的。 2. **隐式模块依赖的添加时机**: 当部署应用程序时,如果检测到...