1.增加了一个新的数据源的链接池实现,能够支持更大的并发用户访问。默认使用新的链接池,如果需要使用旧的数据源线池实现,则需要配置jvm参数apusic.connector.useOldCP=true。
2. 增加在NIO的模式下支持sendfile的功能,提高对静态文件输出的性能,配置说明如下:在apusic.conf中Muxer服务增加属性:
<ATTRIBUTE NAME="SendFile" VALUE="False"/>
表示多路复用端口访问的静态文件启用sendfile支持。该值默认为False,表示不开启该功能,如果设置为true则开启该功能;开启sendfile后,在应用的web.xml中增加参数sendfileSize,配置文件大小大于该值的情况下文件通过sendFile发送,默认为49152字节(48K),配置例子如下:
<context-param> <description>file size >= sendfileSize may trigger sendfile,default is 48kb </description> <param-name>sendfileSize</param-name> <param-value>49152</param-value> </context-param>
3.提供包共享的方式,解决多个应用共享jar包的问题。
一种方式是设置每一个应用的web.xml,只影响到设置的应用,如下:
<context-param> <param-name>com.apusic.webapp.sharelib</param-name> <param-value>D:/aa/ojdbc6_g.jar,D:/aa/jtds-1.2.2.jar</param-value> </context-param>
一种方式是在vm.options设置,影响域下所有的应用,如下:
com.apusic.webapp.sharelib=D:/aa/ojdbc6_g.jar,D:/aa/jtds-1.2.2.jar
4.应用可以配置自定义ClassLoader,自定义的ClassLoader必须是ServletClassLoader的子类,在web.xml进行配置,类似:
<context-param> <param-name>apusic.SERVLET_CLASSLOADER_CLASS</param-name> <param-value>org.springframework.instrument.apusic.ApuiscInstrumentableClassLoader </param-value> </context-param>
5.增加通用的用户定义jndi对象的绑定,可以在全局进行使用。目前绑定类型的构造和注入属性都必须是基本数据类型,在config/jndi_resource.xml文件进行配置
6. 实现JAVAEE7下的WebSocket功能
7. 实现多重数据源功能,支持负载均衡策略和失效转移。
8. 实现应用版本管理,支持Web应用不中断更新,支持应用不同版本的部署。
9. 实现配置备份功能
10. 提供更强大的安全防护,处理了安全问题,例如跨站点脚本攻击,请求定置,SSL DOC等。
11. 提供程序调用脚本以及第三方开发API。
通过脚本和api,第三方客户可以实现对应用服务器的基础管理
12. 新增基于JDK线程池开发的应用服务器线程池,简化线程调度和统一信息,提高线程执行效率。配置方法在vm.options中增加:
com.apusic.ThreadPoolImpl=com.apusic.util.JDKThreadPoolImpl
13. 新增基于web的轻量级数据源,在不使用两阶段事务的场景下,性能更高。
在apusic.conf中增加SimpleDSService服务,如下:
<SERVICE CLASS="com.apusic.jdbc.simple.SimpleDSService"></SERVICE>
在域的config/simpledatasource.xml文件中配置需要使用的数据源。
14.增加对虚拟化环境Hyper-v的支持。
15.自动调优线程池。
根据用户的并发数,动态调整线程池的配置,能够有效利用资源,最大化应用系统的吞吐量。
要使用自动调优线程池,需要调整线程池的实现程序,把需要使用自动调优功能的线程池实现类修改为com.apusic.util.SelfTuneThreadPoolService。其中服务属性MinSpareThreads和MaxThreads用于控制自动调优的线程数量区间,其他参数和普通线程池参数作用类似。
<SERVICE CLASS="com.apusic.jdbc.simple.SimpleDSService"></SERVICE> <SERVICE CLASS="com.apusic.util.SelfTuneThreadPoolService" NAME="apusic:service=ThreadPool,name=HTTPHandler" > <ATTRIBUTE NAME="MinSpareThreads" VALUE="5"/> <ATTRIBUTE NAME="MaxSpareThreads" VALUE="30"/> <ATTRIBUTE NAME="MaxThreads" VALUE="400"/> <ATTRIBUTE NAME="MaxQueueSize" VALUE="5000"/> <ATTRIBUTE NAME="IdleTimeout" VALUE="300"/> </SERVICE>
16.SIP协议支持。
SIP(Session Initiation Protocol,会话初始协议)是由IETF制定的多媒体通信协议。它是一个基于文本的应用层控制协议,定义了如何在通信设备之间相互连接和信息交换,用于创建、修改和释放一个或多个参与者的会话。
该版本完全兼容SIP Servlets1.1规范(JSR289),要在Apusic应用服务器中使用SIP,需要配置相应的服务(配置在应用部署服务(J2EEDeployer)之前)。
首先配置SipService,主要包括路由文件和Sip协议栈文件的配置,如下所示:
<SERVICE CLASS="com.apusic.web.sip.SipService"> <ATTRIBUTE NAME="DarConfigurationFileLocation" VALUE="config/sip/sip-dar.properties"/> <ATTRIBUTE NAME="SipStackPropertiesFileLocation" VALUE="config/sip/sip-stack.properties"/> </SERVICE>
其次是配置SipConnectorService,如下:
<SERVICE CLASS="com.apusic.web.sip.SipConnectorService" NAME="apusic:service=SipConnector,name=udp"> <ATTRIBUTE NAME="Port" VALUE="5080"/> <ATTRIBUTE NAME="SignalingTransport" VALUE="udp"/> </SERVICE> <SERVICE CLASS="com.apusic.web.sip.SipConnectorService" NAME="apusic:service=SipConnector,name=tcp"> <ATTRIBUTE NAME="Port" VALUE="5080"/> <ATTRIBUTE NAME="SignalingTransport" VALUE="tcp"/> </SERVICE>
SipConnectorService主要是配置监听的端口和使用的协议。SipConnectorService可以配置多个,除了上面的udp和tcp,还可以配置ws和tls,而且它们的端口必须唯一,更多的说明请参考用户手册;
17.内置对国密算法的支持,支持客户端的方式访问基于国密算法的HTTPS协议;
内置对国密算法SM2、SM3以及SM4支持,并可用于客户端方式访问基于国密算法的HTTPS协议。
18.内置提供多个便利的工具
在安装目录的tools目录下,内置了多个便利的工具和文档。
1)LDAP服务器:文件ldap_server.zip,提供了基于web的ldap服务应用,将该应用部署后,即可以提供ldap的服务;
2)与Hibernate框架整合:文件integerate_with_hibernate.zip是与hibernate框架整合的相关内容及说明;
3)与Spring框架整合:文件integerate_with_spring.zip是与Spring框架整合的相关内容及说明;
4)开发插件:目录dev-plugins下提供了基于eclipse及myeclipse开发插件;
5)管控API:文件aas-monitor-api.zip提供了与AAS进行交互的管控API和说明;
6)脚本管理工具:目录中提供了数据源配置、应用发布等功能的脚本管理工具。
19.多种序列化方式的支持
在用户并发数很多的时候,会产生很多的Session,如果都存在于内存中,会占用太多的内存空间,需要把Session存储的信息保存到外部的存储中,而存储的关键是需要把Session存储的对象进行序列化。Session对象序列化的性能,对应用的性能有很大的影响。
该版本提供了4种序列化的方式,分别是jdk、fst、hessian、kryo,用户可以根据实际场景选择最优的方式进行,默认是jdk方式。各个方式的对比如下:
fst 序列化:
1)序列化相关的类必须实现Serializable/Externalizable接口
2)兼容jdk序列化
3)速度比jdk默认序列化快2-10倍
hessian序列化:
1)序列化相关的类可以不实现Serializable/Externalizable接口
2)速度较慢,比jdk方式快
kryo序列化:
1)序列化的类需要有无参构造函数
2)速度快,生成的字节小
序列化速度: kryo > fst > hessian > jdk
可以通过vm.options文件中配置属性apusic.http.session.serializer值指定序列化方式。
20.增加使用Redis存储 session的功能,配置说明:
在apusic.conf中修改SessionStoreService服务实现,如:
<SERVICE CLASS="com.apusic.web.session.RedisSessionStoreService"> <ATTRIBUTE NAME="ConfigPath" VALUE="config/redis_session.properties"/> <ATTRIBUTE NAME="Shard" VALUE="false"/> </SERVICE>