JBoss AS 6.1.0 Final bootstrap.xml的解析过程


JBoss 启动文件 jboss-6.1.0.Final/server/default/conf/bootstrap.xml 是加载服务内容的入口。


在 JBoss 初始化操作的最后一个步骤中 , AbstractJBossASServerBase    setupBootstrapDescriptorsFromBootstrapUrl()方法中,完成了对 bootstrap.xml的解析。

过程如下:


 
     protected void setupBootstrapDescriptorsFromBootstrapUrl()   {
 
      final URL bootstrapUrl = this.getConfiguration().getBootstrapUrl();
      // bootstrapUrl = E:/jboss-6.1.0.Final/server/default/conf/bootstrap.xml


      if (bootstrapUrl == null)  {
         throw new IllegalStateException("Bootstrap URL should have been initialized");
      }
      final BootstrapMetaData bmd = BootstrapParser.parse(bootstrapUrl);
      final List<String> urlStrings = bmd.getBootstrapURLs();


      ...
    }
 


 
public class BootstrapParser{

   public static BootstrapMetaData parse(URL url)
   {
      if (url == null)
         throw new IllegalArgumentException("Null url");

      UnmarshallerFactory factory = UnmarshallerFactory.newInstance();
      Unmarshaller unmarshaller = factory.newUnmarshaller();
      try {
         BootstrapMetaData result = (BootstrapMetaData) unmarshaller.unmarshal(url.toString(),
               new BootstrapSchemaBinding());
         if (result == null)
            throw new IllegalStateException("The bootsrap xml " + url + " is not well formed");
         return result;
      }
      catch (Exception e) {
         throw new RuntimeException("Error unmarshalling " + url, e);
      }
   }
}
  


 
   public static BootstrapMetaData parse(URL url){
      if (url == null)
         throw new IllegalArgumentException("Null url");

      UnmarshallerFactory factory = UnmarshallerFactory.newInstance();
      Unmarshaller unmarshaller = factory.newUnmarshaller();
      try{
         BootstrapMetaData result = (BootstrapMetaData) unmarshaller.unmarshal(url.toString(),
               new BootstrapSchemaBinding());
         if (result == null)
            throw new IllegalStateException("The bootsrap xml " + url + " is not well formed");
         return result;
      }
      catch (Exception e) {
         throw new RuntimeException("Error unmarshalling " + url, e);
      }
   }
  


 
class BootstrapSchemaBinding extends SchemaBinding{
   public static final String NAMESPACE = "urn:jboss:bootstrap:1.0";
   public BootstrapSchemaBinding(){
      TypeBinding stringType = getType(SimpleTypeBindings.typeQName(String.class));
      setNamespaces(Collections.singleton(NAMESPACE));
      setIgnoreLowLine(true);
      setIgnoreUnresolvedFieldOrClass(false);
      setReplacePropertyRefs(true);
      setStrictSchema(true);
      TypeBinding bootstrapType = new TypeBinding(new QName(NAMESPACE, "bootstrapType"));
      bootstrapType.setSimple(false);
      AllBinding bootstrapModel = new AllBinding(this);
      ParticleBinding bootstrapParticle = new ParticleBinding(bootstrapModel, 1, 1, false);
      bootstrapType.setParticle(bootstrapParticle);
      ClassMetaData bootstrapClassMetaData = new ClassMetaData();
      bootstrapClassMetaData.setImpl(BootstrapMetaData.class.getName());
      bootstrapType.setClassMetaData(bootstrapClassMetaData);
      ElementBinding urlElement = new ElementBinding(this, new QName(NAMESPACE, "url"), stringType);
      ParticleBinding urlParticle = new ParticleBinding(urlElement, 0, 1, true);
      bootstrapModel.addParticle(urlParticle);
      bootstrapType.pushInterceptor(urlElement.getQName(), new DefaultElementInterceptor() {
         public void add(Object parent, Object child, QName name) {
            BootstrapMetaData bootstrap = (BootstrapMetaData) parent;
            String url = (String) child;
            List<String> bootstrapURLs = bootstrap.getBootstrapURLs();
            if (bootstrapURLs == null) {
               bootstrapURLs = new ArrayList<String>();
               bootstrap.setBootstrapURLs(bootstrapURLs);
            }
            bootstrapURLs.add(url);
         }
      });
      addElement(new ElementBinding(this, new QName(NAMESPACE, "bootstrap"), bootstrapType));
   }
}
 

解析之后,将bootstrap.xml中的内容保存到 server.getConfiguration() 对象中。


bootstrap.xml文件内容

 
<?xml version="1.0" encoding="UTF-8"?>
<!--
   The list of URLs for mc beans to load during bootstrap.
   $Id: bootstrap.xml 106395 2010-07-02 02:16:59Z mmoyses $
-->
<bootstrap xmlns="urn:jboss:bootstrap:1.0">

   <url>bootstrap/classloader.xml</url>
   <url>bootstrap/stdio.xml</url>
   <url>bootstrap/kernel.xml</url>
   <url>bootstrap/aop.xml</url>
   <url>bootstrap/jmx.xml</url>
   <url>bootstrap/deployers.xml</url>
   <url>bootstrap/profile.xml</url>
   <url>bootstrap/security.xml</url>
</bootstrap>
 

与bootstrap.xml对应的解析类为   BootstrapMetaData;


解析完成后,下一步对这几个部分进行分别解析和加载。

确切的说,bootstrap中包含的 8 个配置文件,就是 微容器 Microcontainer 。


JBoss 服务初始化完成之后,服务的配置信息如下:

=======================

Server Configuration:


JBOSS_HOME URL: file:/E:/jboss-6.1.0.Final/
Bootstrap: $JBOSS_HOME\server/default/conf/bootstrap.xml
Common Base: $JBOSS_HOME\common/
Common Library: $JBOSS_HOME\common/lib/
Server Name: default
Server Base: $JBOSS_HOME\server/
Server Library: $JBOSS_HOME\server/default/lib/
Server Config: $JBOSS_HOME\server/default/conf/
Server Home: $JBOSS_HOME\server/default/
Server Data: $JBOSS_HOME\server/default/data/
Server Log: $JBOSS_HOME\server/default/log/
Server Temp: $JBOSS_HOME\server/default/tmp/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值