转载于:http://njulinq.blog.51cto.com/1257169/281914
在上一篇文章
中,提到
从%opennms_home%/etc目录下的service-configuration.xml中的所有service,将所有配置的service生成其实例对象
|
这句话其实在代码中隐藏了很多比较玄奥的工作,下面将介绍这些对象究竟被怎样创建,它又引发了哪些操作。
我们以一个例子来看一下吧,在service-configuration.xml文件中,我们可以看到name为OpenNMS:Name=Collectd的service,其class-name定义为org.opennms.netmgt.collectd.jmx.Collectd,通过前面的介绍,我们知道系统在启动后会生成该类的一个实例。但等我们打开该类的定义后却发现,其实该类并没有什么内容:
- packageorg.opennms.netmgt.collectd.jmx;
- importorg.opennms.netmgt.daemon.AbstractSpringContextJmxServiceDaemon;
- publicclassCollectdextendsAbstractSpringContextJmxServiceDaemonimplements
- CollectdMBean{
- @Override
- protectedStringgetLoggingPrefix(){
- return"OpenNMS.Collectd";
- }
- @Override
- protectedStringgetSpringContext(){
- return"collectdContext";
- }
- }
我们已经知道Collectd负责定期收集网络设备性能数据,可从这里我们看不到任何它做的工作。
所以只能沿着基类网上找,让我们看下AbstractSpringContextJmxServiceDaemon的内容吧,在这里我们
可以找到所有的答案。
我曾经一直疑惑于OpenNMS-service中命名定义了好多*-context.xml文件,却始终没有看到在哪里加载这些
context的定义文件,但事实又告诉我它们肯定被加载了,因为我已经在代码中使用过这些context中定义的
bean了,程序员的最大痛苦莫过于知道用一个东西,却又不知道它怎么来的了。后来终于在这个地方找到了答案。
因为在AbstractSpringContextJmxServiceDaemon中我终于看到了熟悉的代码:
- protectedApplicationContextgetContext(){
- returnm_context;
- }
是的,有了context,对spring来说,就有了一切。
在onInit中我们终于看到它对该context的初始化了
- m_context=BeanUtils.getFactory(getSpringContext(),ClassPathXmlApplicationContext.class);
嗯,从上面的Collectd中我们已经看到了对于getSpringContext()的覆写,是的,通过该名字,终于在opennms-service中找到了该bean,它对应的context文件在applicationContext-collectd.xml文件中。而
- publicTgetDaemon(){
- return(T)m_context.getBean(DAEMON_BEAN_NAME,SpringServiceDaemon.class);
- }
终于通过bean的名称(daemon)来加载真正干活的家伙了,因为我们从applicationContext-collectd.xml文件中已经看到了那个默默无闻却承受所有工作的人,
- <beanid="daemon"class="org.opennms.netmgt.collectd.Collectd">
在start函数中正是通过获取这个名为"daemon"的bean来调用其start()方法来让其run起来的。而它的init()方法则是因为基类AbstractServiceDaemon继承了InitializingBean接口,在实现该接口的afterPropertiesSet()方法时,调用了init()方法,从而保证了在该bean的属性初始化后调用init()方法。
分享到:
相关推荐
1. **Java和Spring框架**:OpenNMS主要使用Java语言开发,利用Spring框架来实现依赖注入和模块化设计,确保系统可扩展性和灵活性。 2. **JMS(Java消息服务)**:OpenNMS使用JMS来处理事件和通知,实现异步通信,...
openNMS1.6.5源码,最新稳定的版本。OpenNMS是第一个开发在开源模式下的企业级网络管理平台应用。OpenNMS的目标是成为一个真真的分布式、可升级的网络管理平台,尽管它看似一个FCAPS网络管理模型,使之可用于开放...
通过分析`opennms-1.10.3-1`源代码,我们可以学习到网络监控的最佳实践,了解如何设计和实现大规模网络管理解决方案。这对于网络管理员、系统集成商以及对网络管理有兴趣的开发者来说,都是极其宝贵的资源。同时,...
"opennms-source.tar.gz_SNMP_openNMS"这个压缩包,便是OpenNMS源码的载体,它包含了使用SNMP(简单网络管理协议)进行网络监控和管理所需的所有组件。 SNMP,全称Simple Network Management Protocol,是一种广泛...
OpenNMS是一款开源的网络监控系统,用于管理网络设备、服务和应用程序。它提供了一整套功能,包括自动发现网络资源、性能监控、故障检测、报警通知和报告生成。本手册将详细介绍OpenNMS的配置与功能,帮助你充分利用...
OpenNMS-Helm的安装和配置涉及到多个步骤,包括系统的前置安装条件、安装OpenNMS-Helm、启动服务、启用插件以及配置数据源和仪表板等。接下来,我们将详细介绍这些知识点。 首先,安装OpenNMS-Helm之前需要确保系统...
standalone-opennms-1.6.8.jar
opennms 中文 http://www.qoswork.com OpenNMS 官方文档 https://qoswork.github.io/odoc/
四、OpenNMS 启动过程中的线程启动 OpenNMS 的启动过程中还涉及到多个线程的启动,如 Discovery 线程、ICMPD 线程、Eventd 线程、Capsd 线程、Poller 线程等。这些线程之间通过事件机制进行交互,以实现网络设备的...
OpenNMS Javascript API 用于访问OpenNMS网络监视平台的客户端API。 在代码中使用OpenNMS.js API 中提供了有关入门以及如何... OpenNMS.js 2.0添加了一些新的API,包含大量的重构和构建系统更新,并且进行了一些小改
为了使用 OpenNMS Modules Manager,你需要先将其克隆或下载到本地,例如,你可以找到名为 "opennms-modules-manager-master" 的压缩包文件,解压后通过 Java 运行环境执行相应的脚本或命令。在执行前,确保你的系统...
通过opennms-ksc-grafana,用户可以充分利用Grafana的可视化优势,对OpenNMS KSC的监控数据进行深度分析和展示,这对于网络运维团队来说,无疑是一种提升效率、优化工作流程的有效手段。无论是日常监控、问题排查,...
PagerDuty-OpenNMS PagerDuty-OpenNMS 是一个由 OpenNMS 运行的脚本,它使用 curl 调用 PagerDuty 集成 API。配置配置本身并不过分复杂: 将附加的脚本放在 $OPENNMS_HOME/contrib/pagerduty 将 API 密钥从...
OpenNMS-IP-发现-供应-适配器可选的Provisioning Adapter,用于将IP接口的自动发现管理为非托管动机找到想要发现并持久存储数据库中所有IP接口,但仅主动监视受监控的服务的OpenNMS用户和操作员是很常见的,这些服务...
厨师食谱,用于管理OpenNMS Horizon的安装和配置。 当前版本支持CentOS 6和7的发行版16、17、18、19、20、21、22、23、24、25、26。 版本号 从OpenNMS Horizon 16开始,该食谱版本的MSB与其支持的OpenNMS ...
OpenNMS-KSC至Grafana 将 KSC报表转换为仪表板。 已针对Grafana 4.x,5.x和6.x进行了测试; 尽管该工具仅在Grafana 5.x或更高版本上在标准输出上提供有关生成的仪表板的信息。 由于Grafana的工作方式不同,它不会...
这是一个 MCollective 应用程序文件,它允许 mcollective 生成 OpenNMS 网络管理系统的供应申请。 先决条件版本 >=1.10.0 的正在运行的 OpenNMS 服务器(早期版本中存在一个错误,会导致配置重复节点) 对 ...
OpenNMS-阈值-事件-生成器一种基于当前阈值设置生成良好阈值事件定义(和通知)的工具。 要编译该工具,请使用 Maven: mvn install这将生成一个带有依赖项的 JAR,以便能够轻松执行该工具,例如: java -jar ...
OpenNMS-资源-供应-适配器 用于填充定义为复杂 SNMP 表的字符串的其他 MibObject 的配置适配器 要求: 1.0.x OpenNMS 14. 1.1.x OpenNMS 15/16。