HSF在Jboss里面的部署过程



1、  启动Jboss,D:\tools\jboss-4.2.2.GA\jboss-4.2.2.GA\server\default\

conf\xmdesc\ org.jboss.deployment.MainDeployer-xmbean.xml里面指定sar优先加载,内容如下:

050:.deployer,050:-deployer.xml,100:.aop,100:-aop.xml,150:.sar,150:-service.xml,200:

2、  JBoss的集成,将taobao-hsf.sar放入deploy目录,通过jboss-service.xml配置MBean,自定义MBean中,

通过HSFcontainer加载taobao-hsf.tar中的jar类,osgi格式组织,并将加载的类存入jbossClassLoader。

jboss-service.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<server>

   <mbean code="com.taobao.hsf.thirdcontainer.jboss.HSFContainerDelegator" name="hsf:service=containerdelegator">

   </mbean>

</server>

3、  执行com.taobao.hsf.thirdcontainer.jboss.HSFContainerDelegator类,HSFContainerDelegator

类是一个自定义的MBean服务。继承了ServiceMBeanSupport类,实现了HSFContainerDelegatorMBean接口。HSFContainerDelegatorMBean接口中包含两个方法:start()、stop()。

在com.taobao.hsf.thirdcontainer.jboss.HSFContainerDelegator中分为start()、stop()方法,start()方法中,

设置Jboss的class loader给HSF,以便HSF访问Jboss的类:

UnifiedClassLoader3 jbossClassloader = (UnifiedClassLoader3)getClass().getClassLoader();

        HSFContainer.setThirdContainerClassLoader(jbossClassloader);

启动HSFContainer。

          HSFContainer.start(null);

4、  HSFContainer.start(null)方法中完成以下功能:

4.1、寻找HSF的plugins,plugin文件夹下是一些运用OSGI的规则写的一些类。

String searchPath = (new StringBuilder()).append(path).append("/plugins").toString(),…..

4.2 配置osgi相关属性

FrameworkProperties.setProperty("osgi.noShutdown", "true");………

       FrameworkProperties.setProperty("osgi.hook.configurators",

4.3 启动 Equinox

EclipseStarter.run(new String[] {    "-configuration", "hsf.configuration" }, null);

这里HSF使用了OSGi的Declarative Service方式来启动,典型配置如下:OSGI下的配置文件

<?xml version="1.0" encoding="UTF-8"?>

<component name="ServiceHolderComponent">

    <implementation class="com.taobao.hsf.app.spring.util.HSFServiceHolderComponent"/>

    <reference name="ProcessService"

        interface="com.taobao.hsf.process.service.ProcessService"

        cardinality="0..1" bind="setProcessService" unbind="unsetProcessService"

        policy="dynamic"/>

    <reference name="MetadataService"

        interface="com.taobao.hsf.model.metadata.service.MetadataService"

        bind="setMetadataService" unbind="unsetMetadataService"

        cardinality="0..1" policy="dynamic"/>

</component>

4.4 OSGi容器初始化后,拿到OSGi上下文,让jboss容器和OSGi容器可以相互访问

        context = EclipseStarter.getSystemBundleContext();

5、  将hsf暴露的类注册到jboss的classloader中,方便后续app中使用,典型的比如HSFSpringProviderBean和HSFSpringConsumerBean

Map exportedClasses = HSFContainer.getExportedClasses();

   String className;

 for(Iterator i$ = exportedClasses.keySet().iterator(); i$.hasNext(); jbossRepo.cacheLoadedClass(className,(Class)exportedClasses.get(className), jbossClassloader))

   className = (String)i$.next();

6、  开始初始化项目:D:/tools/jboss-4.2.2.GA/jboss-4.2.2.GA/server/default/

deploy/tmallbuy.war

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值