花钱的年华

--今天开始成为主站

用户操作
[即时聊天] [发私信] [加为好友]
江南白衣ID:calvinxiu
703542次访问,排名53,好友0人,关注者48人。
calvinxiu的文章
原创 161 篇
翻译 0 篇
转载 0 篇
评论 677 篇
江南白衣的公告

肖桦,江南白衣,
开源项目SpringSide
春天的旁边
发起者

最近评论
liseo1:
网络营销策划 网络公关 品牌管理 搜索引擎公关 搜索引擎排名 网站优化 软文发布 QQ:441843869
工业门
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
文章分类
    收藏
      相册
      Blog用图
      Friends
      @_@
      Anders小明
      buaawhl
      cac
      canonical
      cctvx1
      david.turing
      femto
      g9
      JohnsonQu
      Michael Chen
      Raimundox
      robbin
      SimonLei
      totodo
      wuyu
      周爱民
      孟岩
      差沙
      庄表伟
      落魄的程序员
      透明
      郁也风
      铁手
      银狐999
      飞云小侠
      存档
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 设计美好的服务器II--站在JBoss MicroKernel上收藏

      新一篇: 轻的,谁都会写的Service方案--REST与JSON | 旧一篇: 一切对象都是资源,请用模式管理(I)

          原文地址: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">HelloWorldService</attribute>
              
      <depends optional-attribute-name="ThreadPool"
               proxy
      -type="attribute">jboss.system:service=ThreadPool</depends>
          
      </mbean>
      </server> 

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

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

      参考资料:

      设计美好的服务器系列文章:

      发表于 @ 2007年05月30日 17:27:00|评论(loading...)|收藏

      新一篇: 轻的,谁都会写的Service方案--REST与JSON | 旧一篇: 一切对象都是资源,请用模式管理(I)

      评论

      #技术既是空 发表于2007-05-31 15:21:37  IP: 192.168.50.*
      MicroKernel很早已经用在我们的产品方面了。比较喜欢它的无入侵,干净,这一点是当时没有选择spring的原因。如果一个Bean需要生命周期start,stop,只需要创建void start()方法就好了,容器发现你有这两个方法,就会自动调用,这样很好,你可以独立控制生命周期,测试时候非常方便,引入的第三方类库很少。
      另外可以利用它的API自己去deploy组件,因此,解决了我产品中单机版和分布式版本的配置问题,仅仅改动一个参数就自动部署特定的文件,而无需改动代码。
      #aaron 发表于2007-05-31 16:59:39  IP: 220.248.75.*
      一直很欣赏白衣,做技术的人中少有说话这么俏皮的。。只是白衣这个名字。。有点哀....我是不是太封建了。。。。逃了。。。
      #龙舞九天 发表于2007-06-05 21:54:41  IP: 222.209.224.*
      白衣兄,还是以blogjava为主站吧,你不觉得那边舒服很多吗?至少评论的数量和水平高很多啊,那边才是真正的家
      #rtkvpfbdc@mail.com 发表于2007-09-02 10:02:29  IP: 88.208.234.*
      yvjbtd xshmjeq wrdhnubfg pnoazhsi jdtvulmw qrevdb vmwf
      #balfdiczm@mail.com 发表于2007-09-02 10:02:45  IP: 200.118.117.*
      spvaqrc suqcvoit rywxuke jlipume cpib umjaifxbo kqzrb http://www.pjhb.sgewxqah.com
      #hrlkz@mail.com 发表于2007-09-02 10:03:23  IP: 58.137.105.*
      mlitsq lzxpobawn idzqcbso wclz fshw xsjvonrp bfxph mbice onrxyvt
      #不懂 发表于2008-10-15 13:50:44  IP: 218.25.32.*
      不懂不懂不懂
      发表评论  


      登录
      Csdn Blog version 3.1a
      Copyright © 江南白衣