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 |
|
HSF在Jboss里面的部署过程
最新推荐文章于 2022-06-06 15:47:30 发布