BluePrint自定义扩展
来源:互联网 发布:php常用命令 编辑:程序博客网 时间:2024/05/22 07:09
ODL服务加载经历了blueprint-config-subsytem-blueprint这个过程
但最新提供了blueprint增加了自定义的扩展,如rpc-implementation。所以特地对于blueprint的扩展功能学习并记录。
1、扩展的blueprint的解析功能也是以bundle存在,并加载在OGSI中标准的blueprint主要提供了四种定义:bean、service、reference、referecne-listODL扩展blueprint提供了:notification-listenerrpc-servicerouted-rpc-implementationrpc-implementationaction-provideraction-servicespecific-reference-liststatic-reference以上使用参考相关文档。现在以新增sq-print标签为例简要介绍扩展blueprint的开发流程与细节
public class BlueprintBundleTracker implements BundleActivator该Bunlde的入口类,实现BundleActivator,并重写start方法,在start方法中,需要进行OSGI事件的监听
@Override public void start(BundleContext context) throws Exception { LOG.info("SQBlueprint bundle starting..."); registerNamespaceHandler(context); registerBlueprintEventHandler(context); }重点关注registerNamespaceHandler,对blueprint中配置解析事件进行了监听,这样当其它bundle进行blueprint解析时,则可以被该扩展bundle监听到,从而触发后序的处理流程。
private void registerNamespaceHandler(BundleContext context) { Dictionary<String, Object> sqNamespaceProperty = new Hashtable<>(); sqNamespaceProperty.put("osgi.service.blueprint.namespace", SQNamespaceHandler.NAMESPACE_1_0_0); namespaceReg = context.registerService(NamespaceHandler.class.getName(), new SQNamespaceHandler(), sqNamespaceProperty); }
注意在POM文件中,需要将该类,定义为启动类
<Bundle-Activator>com.zte.sunquan.blueprint.main.BlueprintBundleTracker</Bundle-Activator>
public class SQNamespaceHandler implements NamespaceHandler {
该类包括方法
getSchemaLocation:用于指定xsd文件地址
getManagedClasses:
parse:处理tag,如新增的sq-print
decorate:处理属性定义,如ODL中定义的odl:use-default-for-reference-types
3、定义新增tag sq-print
<xsd:schema xmlns="http://opendaylight.org/xmlns/blueprint/v1.0.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0" targetNamespace="http://opendaylight.org/xmlns/blueprint/v1.0.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0.0"> <xsd:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"/> <xsd:complexType name="SQPrint"> <xsd:attribute name="value" type="xsd:string" use="required"/> </xsd:complexType> <xsd:element name="sq-print" type="SQPrint"/>
这样在blueprint的配置文件中,则可以使用
<odl:sq-print value="hello,world"></odl:sq-print>
ps.注意Decorate和Parse方法,都要返回有效的ComponentMetadata
MutableBeanMetadata metadata = context.createMetadata(MutableBeanMetadata.class); metadata.setId(context.generateId()); metadata.setScope(BeanMetadata.SCOPE_SINGLETON); metadata.setActivation(ReferenceMetadata.ACTIVATION_EAGER); metadata.setRuntimeClass(SQPrintServiceBean.class); metadata.setInitMethod("init"); metadata.addProperty("value", createValue(context, element.getAttribute("value")));
当设置init和destory方法,则RuntimeClass类SQPrintServiceBean中,必须实现该方法
addPropert方法,即会注入进SQPrintServceBean属性。
执行:
代码后面补上
阅读全文
0 0
- BluePrint自定义扩展
- blueprint
- Blueprint
- BLUEPRINT
- blueprint
- Blueprint:一个Flash Builder代码示例的扩展
- Blueprint:一个让你获取示例代码的Flash Builder扩展
- adobe blueprint
- Blueprint教程
- Blueprint 使用手记
- Blueprint入门
- Camel-blueprint
- OSGI Blueprint
- Confluence--BluePrint
- API Blueprint
- Flask-Blueprint
- flask-Blueprint
- eclipse 自定义扩展点
- Loj #114
- Java基础
- CS231n Spring Lecture2 Image Classification pipeline的一点总结
- tensorflow 中的object-detction API 使用指南
- C#System.Security.SecurityException解决方法
- BluePrint自定义扩展
- RN学习和开发笔记(一)
- Python实现快速排序
- VS2010/MFC编程入门教程之目录和总结
- javaweb_基础
- 用 jQuery 实现 Ajax
- 关于Windows安装msi文件时出现2503、2502的错误
- 如何查询端口被占用
- 【CSS】浅谈css中格式化上下文BFC、IFC(二)