`
江南白衣
  • 浏览: 548679 次
  • 来自: 广州
社区版块
存档分类
最新评论

设计美好的服务器II--站在JBoss MicroKernel上

阅读更多

    原文地址:http://blog.csdn.net/calvinxiu/archive/2007/05/30/1631693.aspx,版权所有,转载请保留原文链接,谢谢。--江南白衣

     一个Java World的业务处理服务器,总会遇上JNDI/JMX/JMS/JTA/Web Service/RMI/Corba/EJB/Clustering 这些JavaEE规范。大家可以依着Java开源社区的繁盛,以JDK+开源实现来拼凑遇到的规范,Geromino就是这样成就了大业。也可以像传说中一些欧洲电信公司那样,将服务引擎建在JBoss之上,需要的构件直接上JBoss套装,自己则专心于核心业务处理引擎的雕琢。

    应用服务器所接受的标准部署有Web、EJB、JCA三种。Web与EJB显然不合适,Mule、Apache CXF所用的JCA模式,自己天资所限总是看不明白。所以也像欧洲那些电信公司那样,在JBoss MicroKernel上编写自己的Service。

    JBoss文档中有一章编写Custom Service教程,而JBoss里的每一个部件,几乎都是编写Service的Example,比如JNDI NamingService。

一、JBoss的JMX MicroKernel架构

   说起Kernel,Container,现在的人类总会想起Spring。两者的配置文件相若,如果说Spring Container的核心是用一个Singleton的HashMap装载所有受管理Bean,MicroKernel则是用一个JMX MBeanServer。

   MicroKernel 中一切对象都可供JMX客户端管理--JMX简直是服务器程序恩物。但是JMX标准本身没有定义依赖管理,谁依赖谁,把谁注入谁,谁要在谁之前初始化,而且Java本身的生命周期函数也只有构造函数一途,连个释构函数都没有。所以MicroKernel也类似于Spring Container,在JMX的基础上,提供了依赖管理、依赖注入和生命周期管理的功能。

   自己乱搞之前,先看一下JBoss的架构;

   1./lib 放着少量的公共jar,/server下三个目录是三种预启动配置,JBoss是完全基于MicroKernel模块化的,所以minial是仅有JNDI功能的微内核,default是单机server所需的服务,而full加上群集的功能。大家可以在三种基础上随意增减。

   2.在bin下运行run -c minimal,启动微内核示例。

   3.根据StartUp Process 的描述,配合源码很容易将把启动过程搞懂。(BTW,大部分人读源码最有动力的的时间都是看启动过程那段)

   4.看一下minimal 目录,deploy目录为空,代表没有额外部署的Service。再看一下/conf下的jboss-service.xml,定义了Log4jService,BasicThreadPool,NamingService,URLDeploymentScanner四个构件。

    so 清晰,so 简单,然后,到我们自己了。

二、编写自己的Service

    这里只用最简单的方式介绍最简单的示例,使用注入的JBoss BasicThreadPool线程池,开一条啥都不做的线程。 

    1.HelloServiceMBean接口,定义了两个注入函数,JMX下类之间靠MBean暴露的接口打交道。

public interface HelloServiceMBean extends org.jboss.system.ServiceMBean{
    
public void setServiceName(String serviceName);
    
public void setThreadPool(BasicThreadPoolMBean poolMBean);
}

 

    2.HelloService类,实现HelloServiceMbean接口,继承于JBoss提供的便利类ServiceMBeanSupport,只需重载startService()和stopService()两个函数。
    startService()函数使用继承的logger打印注入的serviceName,使用注入的threadPool开一条工作线程,由于没有什么系统资源需要归还清理,所以stopService()函数走空。

import org.jboss.system.ServiceMBeanSupport;
import org.jboss.util.threadpool.BasicThreadPoolMBean;
import org.jboss.util.threadpool.ThreadPool;

public class HelloSimpleService extends ServiceMBeanSupport implements
        HelloServiceMBean {

    
private String serviceName;

    
private ThreadPool threadPool;

    
public void setServiceName(String jndiName) {
        
this.serviceName = jndiName;
    }
    
    
public void setThreadPool(BasicThreadPoolMBean poolMBean) {
        threadPool 
= poolMBean.getInstance();
    }

    
public void startService() throws Exception {
        log.info(
"Starting " + serviceName);
        threadPool.run(
new HelloThread());
    }

    
public void stopService() {
        log.info(
"Stoping " + serviceName);
    }

    
private class HelloThread implements Runnable {
        
public void run() {
            log.info(
"Hello Thread Start....");
            
for(;;){
                
            }
        }
    }
}

 

    3.hello-service.xml,典型的Bean配置文件,注意ServiceName,ThreadPool要很土的首字母大写。

<!---->xml version="1.0" encoding="UTF-8"?>
<server>
    
<mbean code="HelloService" 
           name
="hello:service=HelloService">
        
<attribute name="ServiceName">HelloWorldServiceattribute>
        
<depends optional-attribute-name="ThreadPool"
         proxy
-type="attribute">jboss.system:service=ThreadPooldepends>
    
mbean>
server> 

    好,现在把两个java文件编译打包成jar, 和hello-service.xml一起放入minimal/deploy 目录就会被hot depoy,jboss的屏幕上就能看到"Starting HelloWorldService字样"。

  后来又试了下使用JBoss的JNP Naming Service,注册了一个HelloWorld的RMI服务,在客户端调用之。但如何深入应用JBoss的其他组件还需要研究.... 

参考资料:

系列文章:

  • 设计一个美好的服务器--MINA、CXF、Mule、JBoss/Geronimo 
  • 设计美好的服务器II--站在JBoss MicroKernel上 
  • 轻的,谁都会写的Service方案--REST与JSON 

     

  • 分享到:
    评论
    7 楼 firelife 2007-06-22  
    为什么不考虑osgi架构,现在IBM开发工具和服务器都是基于osgi的了
    6 楼 cxj_2000 2007-06-22  
    cctvx1 写道
    主要是现在的大客户并不care opensource带来的好处  相反他们更希望得到很好的服务  但是这个绝对是opensource的致命问题  你让网银,电信,移动 在核心平台上面用opensource的基础平台  简直不太可能的。  因此这些关注主要来源于开发者,但是开发者往往又没有话语权  所以导致很多仅仅停留在技术成面  比如国外著名的几个咨询公司做得比较都没有opensource的应用。
    <br/>
    <br/>
    spring在这些用户里面有的,还有struts,呵呵。<br/>
    <br/>
    太平人寿上海他们就用spring。
    5 楼 cxj_2000 2007-06-22  
    楼猪能不能给个jboss microkernel的download地址?

    谢谢,我在jboss上面找了半天都没有,郁闷。
    4 楼 cctvx1 2007-06-21  
    主要是现在的大客户并不care opensource带来的好处

    相反他们更希望得到很好的服务

    但是这个绝对是opensource的致命问题

    你让网银,电信,移动 在核心平台上面用opensource的基础平台

    简直不太可能的。

    因此这些关注主要来源于开发者,但是开发者往往又没有话语权

    所以导致很多仅仅停留在技术成面

    比如国外著名的几个咨询公司做得比较都没有opensource的应用。
    3 楼 shaucle 2007-06-20  
    "业界好像没什么人做对比"

    说明技术很新或很前沿?

    楼主自己写个对比?
    2 楼 江南白衣 2007-06-20  
    Geronimo又拿一个Milestone版过了JavaEE5了。

    jboss 5 vs Geronimo 2 vs glassfish, 到底哪个better呢。

    业界好像没什么人做对比。
    1 楼 shaucle 2007-06-19  
    下面是一些个人看法.
    一般服务器都会提供一个kernel,插件会基于这个kernel
    实际插件是通过向kernel注册模块,(如这些模块在JBoss里是MBean,在Geronimo里是GBean)
    模块间有dependency,并由kernel管理lifecycle和调度等,(Geronimo还可以对kernel进行persist)

    服务器基于这些,再提供如部署方案(热部署),存储库(部署目录),控制台等.
    一下子只想到这些..

    相关推荐

      JavaEE源代码 jboss-common

      JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...

      2010-06-15-JBoss-AS-Deploying-WARs-with-the-DeploymentFileRepository-MBean.pdf

      2010-06-15-JBoss-AS-Deploying-WARs-with-the-DeploymentFileRepository-MBean.pdf

      JavaEE源代码 jboss-jmx

      JavaEE源代码 jboss-jmxJavaEE源代码 jboss-jmxJavaEE源代码 jboss-jmxJavaEE源代码 jboss-jmxJavaEE源代码 jboss-jmxJavaEE源代码 jboss-jmxJavaEE源代码 jboss-jmxJavaEE源代码 jboss-jmxJavaEE源代码 jboss-...

      cas-client-integration-jboss-3.2.0.jar

      cas-client-integration-jboss-3.2.0.jar

      JavaEE源代码 jboss-cache

      JavaEE源代码 jboss-cacheJavaEE源代码 jboss-cacheJavaEE源代码 jboss-cacheJavaEE源代码 jboss-cacheJavaEE源代码 jboss-cacheJavaEE源代码 jboss-cacheJavaEE源代码 jboss-cacheJavaEE源代码 jboss-cacheJavaEE源...

      JavaEE源代码 jboss-system

      JavaEE源代码 jboss-systemJavaEE源代码 jboss-systemJavaEE源代码 jboss-systemJavaEE源代码 jboss-systemJavaEE源代码 jboss-systemJavaEE源代码 jboss-systemJavaEE源代码 jboss-systemJavaEE源代码 jboss-...

      Admin-Console-QuickStart of JBoss

      - 在后续操作中,我们将使用`&lt;installation-dir&gt;/jboss-5.1.0.GA`来表示JBOSS_HOME。 3. **启动JBoss AS 5服务器**: - 打开命令行终端,进入`$JBOSS_HOME/bin`目录。 - 对于Unix系统,执行命令`./run.sh`。 - ...

      CVE-2017-12149JBOSSas6.X反序列化(反弹shell版)

      该漏洞的根源在于JBOSS AS 6.x中的`org.jboss.serial`包,特别是`JBossUnmarshaller`类在处理反序列化时没有充分验证输入数据。当恶意的、预先构造的序列化数据被反序列化时,攻击者可以注入并执行自定义的Java代码...

      jboss-4.0.5.GA.zip

      在使用"jboss-4.0.5.GA.zip"这个压缩包时,用户需要先将其解压,然后按照官方文档或者社区教程进行配置,包括但不限于设置环境变量、配置服务器端口、部署应用程序等步骤。在开发和部署过程中,理解并掌握上述知识点...

      spring-webmvc.jar+jboss-logging.jar+jboss-logging-annotations.jar

      在描述中提到的`jboss-logging.jar`和`jboss-logging-annotations.jar`则是JBoss组织提供的日志服务。`jboss-logging.jar`是一个高效的、可扩展的日志框架,支持多种日志实现,如Log4j、Java.util.logging和SLF4J。...

      JAVA-SERVLET-+-MYSQL-+-JBOSS-开发起步

      ### JAVA-SERVLET-+-MYSQL-+-JBOSS-开发起步 #### 一、Java Servlet、Jboss、Mysql、Eclipse 开发介绍 在现代Web应用开发领域中,Java Servlet技术结合MySQL数据库以及JBoss应用服务器是构建企业级应用的常见组合...

      Config-Jboss-in-Linux.rar_jboss

      2. **使用CLI工具**:JBoss附带了一个强大的命令行接口(CLI),通过它可以实时查询和修改服务器配置,如`$JBOSS_HOME/bin/jboss-cli.sh --connect`。 以上就是在Linux环境下配置JBoss开发环境的详细步骤。请根据你...

      jboss-threads-3.1.0.Final-API文档-中文版.zip

      赠送jar包:jboss-threads-3.1.0.Final.jar; 赠送原API文档:jboss-threads-3.1.0.Final-javadoc.jar; 赠送源代码:jboss-threads-3.1.0.Final-sources.jar; 赠送Maven依赖信息文件:jboss-threads-3.1.0.Final....

      jboss jar包snowdrop-vfs.jar和jboss-logging.jar

      在Java企业级应用开发中,JBoss是一款广泛使用的开源应用服务器,它提供了全面的Java EE(现称为Jakarta EE)支持。而Spring框架则是一个轻量级、灵活的框架,用于简化企业级Java应用程序的开发。尽管两者都是Java...

      jboss-annotations-api_1.3_spec-2.0.1.Final-API文档-中英对照版.zip

      赠送jar包:jboss-annotations-api_1.3_spec-2.0.1.Final.jar; 赠送原API文档:jboss-annotations-api_1.3_spec-2.0.1.Final-javadoc.jar; 赠送源代码:jboss-annotations-api_1.3_spec-2.0.1.Final-sources.jar;...

      JBoss-config.zip_jboss

      - **JNDI命名**:在`$JBOSS_HOME/server/$PROFILE/conf/jboss-service.xml`和`$JBOSS_HOME/server/$PROFILE/deploy/jboss-service.xml`中配置JNDI命名服务。 - **数据库连接**:通过`$JBOSS_HOME/server/$PROFILE/...

      jboss-config.rar_jboss

      5. **jboss-cli.sh/bat**: JBoss命令行接口工具,允许管理员通过命令行执行配置更改,如添加、移除或更新部署,以及管理服务器状态。 6. **datasources**: 在JBoss中,数据源的配置通常位于`standalone/...

      jboss-portal-2.0.1RC1-jboss-4.0.2.zip_axis-ws4ee.jar_jboss_jboss

      JBoss 服务器是一款开源的应用服务器,它基于Java EE(Enterprise Edition)规范,为开发者提供了运行企业级Java应用程序的平台。在本压缩包中,我们主要关注的是JBoss Portal 2.0.1RC1和JBoss 4.0.2的版本,以及与...

      cargo-core-tools-jboss-deployer-7-1.4.6.zip

      总结来说,"cargo-core-tools-jboss-deployer-7-1.4.6.zip"提供的工具集对于Java开发人员来说是非常有价值的,它简化了在JBoss应用服务器上的应用部署,而JSR 107 TCK则保证了缓存实现的标准化和兼容性,Guice则提供...

      cas-server-integration-jboss-3.4.12.zip

      【标题】"cas-server-integration-jboss-3.4.12.zip" 是一个与CAS(Central Authentication Service)服务器整合JBoss应用服务器相关的压缩包。CAS是一个开源的身份验证框架,它提供了一种集中式的方式来进行身份...

    Global site tag (gtag.js) - Google Analytics