[OpenNMS Note] 加我加我加我~ OpenNMS新增Service的方法
這時候開頭不免要誇一下OpenNMS,因為它的模組化架構,讓我們可以輕易的抽取、更換或者新增某一個模組,當然最大的影響還是在於各模組間的Dependency,如果A模組必須依賴B模組,但你抽掉B模組,勢必A就往生了。這在OpenNMS算是滿重要的概念了。
先不介紹OpenNMS用到的那些技術,像spring、Jmx、Dao..等等,因為我敢說我做完整個架構移植,我也只是略懂Orz......。
↓這就是OpenNMS程式碼的目錄。
首先,第一步,我們先將Log4j的log4j.properties設定好。
↓檔案就在這個位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-base-assembly\src\main\filtered\etc\log4j.properties
設定內容如下,設定的細節可以參考Log4j的教學網站。
# BrianSys
log4j.category.OpenNMS. BrianSys =DEBUG, BRIANSYS
log4j.additivity.OpenNMS. BrianSys =false
log4j.category.org.opennms.netmgt.briansys=DEBUG, BRIANSYS
log4j.additivity.org.opennms.netmgt.briansys =false
log4j.appender. BRIANSYS =org.apache.log4j.RollingFileAppender
log4j.appender. BRIANSYS.MaxFileSize=100MB
log4j.appender. BRIANSYS.MaxBackupIndex=4
log4j.appender. BRIANSYS.File=/home/ianathome/opennms_workspace/opennms-1.8.16-1/source/target/opennms-1.8.16/logs/daemon/briansys.log
log4j.appender. BRIANSYS.layout=org.apache.log4j.PatternLayout
log4j.appender. BRIANSYS.layout.ConversionPattern=%d %-5p [%t] %c{1}: %m%n
其中 log4j.additivity.org.opennms.netmgt.briansys就是你的Service的位置,相對性也就是class的位置。
第二步,參考一下Opennms-daemon,他其實會到ConfigFileConstants.java中,將設定好的一堆Spring File抓出來,所以我們先在這邊把我們預設要撈的Spring File填入程式中。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-config-utils\src\main\java\org\opennms\netmgt\ConfigFileConstants.java
在class中增加下面這個。
public static final int BRIANSYS_CONFIG_FILE_NAME;
然後設定一個ID
BRIANSYS_CONFIG_FILE_NAME = 81; //Brian
將ID指向的陣列指向一個檔名,也就是未來我們要新增configuration用的檔案。
FILE_ID_TO_NAME[ BRIANSYS_CONFIG_FILE_NAME] = "briansys-configuration.xml";
這時候來把剛剛宣示的檔案建立起來,我不清楚你想用它來幹麻,總之先建起來當備用。
↓位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-base-assembly\src\main\filtered\etc\ briansys-configuration.xml
我建的大概先長這樣,以後要修改再增加就好,基本上這是放一些固定的參數了。
<BrianSysConfiguration
ConnectLimit="5">
</ BrianSysConfiguration>
重頭戲來了,要將Service的init()、stop()、start()這類流程控制函式放至Spring中,所在這個service-configuration.xml中要仔細設定好。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-base-assembly\src\main\filtered\etc\service-configuration.xml
↓設定內容如下,可以參考這裡面其他Service的設定。
<service>
<name>OpenNMS:Name=BrianSys</name>
<class-name>org.opennms.netmgt.briansys.jmx. BrianSys</class-name>
<invoke at="start" pass="0" method="init"/>
<invoke at="start" pass="1" method="start"/>
<invoke at="status" pass="0" method="status"/>
<invoke at="stop" pass="0" method="stop"/>
</service>
接下來將剛剛設定的configuration的參數導入xsd中,讓castor可以將來生成標準化的程式。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-config\src\main\castor\briansys-configuration.xsd
內容大概像下面這樣。
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://xmlns.opennms.org/xsd/config/briansys"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:this="http://xmlns.opennms.org/xsd/config/briansys"
xmlns:ns2="http://www.w3.org/1999/xhtml"
xmlns:ns="http://www.w3.org/2001/XMLSchema"
xmlns:hfp="http://www.w3.org/2001/XMLSchema-hasFacetAndProperty">
<annotation>
<documentation>XML Schema for the briansys-configuration.xml configuration
file. Version: $Id$. </documentation>
</annotation>
<element name="BrianSysConfiguration">
<annotation>
<documentation>Top-level element for the briansys-configuration.xml
configuration file. </documentation>
</annotation>
<complexType>
<attribute name="ConnectLimit" use="required">
<annotation>
<documentation>The maximum number of threads used for reading and
processing of incoming events.</documentation>
</annotation>
<simpleType>
<restriction base="int">
<minInclusive value="1"/>
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
</schema>
先不介紹OpenNMS用到的那些技術,像spring、Jmx、Dao..等等,因為我敢說我做完整個架構移植,我也只是略懂Orz......。
↓這就是OpenNMS程式碼的目錄。
首先,第一步,我們先將Log4j的log4j.properties設定好。
↓檔案就在這個位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-base-assembly\src\main\filtered\etc\log4j.properties
設定內容如下,設定的細節可以參考Log4j的教學網站。
# BrianSys
log4j.category.OpenNMS. BrianSys =DEBUG, BRIANSYS
log4j.additivity.OpenNMS. BrianSys =false
log4j.category.org.opennms.netmgt.briansys=DEBUG, BRIANSYS
log4j.additivity.org.opennms.netmgt.briansys =false
log4j.appender. BRIANSYS =org.apache.log4j.RollingFileAppender
log4j.appender. BRIANSYS.MaxFileSize=100MB
log4j.appender. BRIANSYS.MaxBackupIndex=4
log4j.appender. BRIANSYS.File=/home/ianathome/opennms_workspace/opennms-1.8.16-1/source/target/opennms-1.8.16/logs/daemon/briansys.log
log4j.appender. BRIANSYS.layout=org.apache.log4j.PatternLayout
log4j.appender. BRIANSYS.layout.ConversionPattern=%d %-5p [%t] %c{1}: %m%n
其中 log4j.additivity.org.opennms.netmgt.briansys就是你的Service的位置,相對性也就是class的位置。
第二步,參考一下Opennms-daemon,他其實會到ConfigFileConstants.java中,將設定好的一堆Spring File抓出來,所以我們先在這邊把我們預設要撈的Spring File填入程式中。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-config-utils\src\main\java\org\opennms\netmgt\ConfigFileConstants.java
在class中增加下面這個。
public static final int BRIANSYS_CONFIG_FILE_NAME;
然後設定一個ID
BRIANSYS_CONFIG_FILE_NAME = 81; //Brian
將ID指向的陣列指向一個檔名,也就是未來我們要新增configuration用的檔案。
FILE_ID_TO_NAME[ BRIANSYS_CONFIG_FILE_NAME] = "briansys-configuration.xml";
這時候來把剛剛宣示的檔案建立起來,我不清楚你想用它來幹麻,總之先建起來當備用。
↓位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-base-assembly\src\main\filtered\etc\ briansys-configuration.xml
我建的大概先長這樣,以後要修改再增加就好,基本上這是放一些固定的參數了。
<BrianSysConfiguration
ConnectLimit="5">
</ BrianSysConfiguration>
重頭戲來了,要將Service的init()、stop()、start()這類流程控制函式放至Spring中,所在這個service-configuration.xml中要仔細設定好。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-base-assembly\src\main\filtered\etc\service-configuration.xml
↓設定內容如下,可以參考這裡面其他Service的設定。
<service>
<name>OpenNMS:Name=BrianSys</name>
<class-name>org.opennms.netmgt.briansys.jmx. BrianSys</class-name>
<invoke at="start" pass="0" method="init"/>
<invoke at="start" pass="1" method="start"/>
<invoke at="status" pass="0" method="status"/>
<invoke at="stop" pass="0" method="stop"/>
</service>
接下來將剛剛設定的configuration的參數導入xsd中,讓castor可以將來生成標準化的程式。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-config\src\main\castor\briansys-configuration.xsd
內容大概像下面這樣。
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://xmlns.opennms.org/xsd/config/briansys"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:this="http://xmlns.opennms.org/xsd/config/briansys"
xmlns:ns2="http://www.w3.org/1999/xhtml"
xmlns:ns="http://www.w3.org/2001/XMLSchema"
xmlns:hfp="http://www.w3.org/2001/XMLSchema-hasFacetAndProperty">
<annotation>
<documentation>XML Schema for the briansys-configuration.xml configuration
file. Version: $Id$. </documentation>
</annotation>
<element name="BrianSysConfiguration">
<annotation>
<documentation>Top-level element for the briansys-configuration.xml
configuration file. </documentation>
</annotation>
<complexType>
<attribute name="ConnectLimit" use="required">
<annotation>
<documentation>The maximum number of threads used for reading and
processing of incoming events.</documentation>
</annotation>
<simpleType>
<restriction base="int">
<minInclusive value="1"/>
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
</schema>
再到castor的設定檔將你的service的xsd檔案加入。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-config\src\main\castor\castorbuilder.properties
加入下面這筆設定。
http://xmlns.opennms.org/xsd/config/briansys=org.opennms.netmgt.config.briansys,\
接下來再設定一個ConfigFileConstants,跟剛剛的那個不太一樣。
↓檔案位置。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-util\src\main\java\org\opennms\core\utils\ConfigFileConstants.java
一樣增加下面這三行程式,加的方法可以參考檔案中其他程式的作法。
public static final int BRIANSYS_CONFIG_FILE_NAME;
BRIANSYS_CONFIG_FILE_NAME = 79; //Brian
FILE_ID_TO_NAME[BRIANSYS_CONFIG_FILE_NAME] = "briansys-configuration.xml";//Brian
然後我們就要進入opennms-services中,增加我們需要的Service了!
↓請先找到這個檔案。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-services\.springBeans
然後將你的applicationContext加入其中。
<config>src/main/resources/META-INF/opennms/applicationContext-briansys.xml</config>
接下來,去建立起你放置你Service的資料夾。
↓在這個資料夾下建立。[briansys] ->是我的servcie名字
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-services\src\main\java\org\opennms\netmgt\[briansys]
基本上整個程式的架構會是這樣
opennms-services\src\main\java\org\opennms\netmgt\[briansys]\BrianSys.java
opennms-services\src\main\java\org\opennms\netmgt\[briansys]\jmx\BrianSys.java
opennms-services\src\main\java\org\opennms\netmgt\[briansys]\jmx\BrianSysMBean.java
真正程式的進入點是在
jmx\BrianSys.java、jmx\BrianSysMBean.java,這是因為他去繼承了AbstractSpringContextJmxServiceDaemon跟BaseOnmsMBean,架構部分我就不在這邊講了。
↓然後再按照其他程式的ConfigManager跟ConfigFactory依樣畫葫蘆,就可以將當初我們設定好的固定參數載入進來。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-services\src\main\java\org\opennms\netmgt\config\BrianSysConfigManager.java
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-services\src\main\java\org\opennms\netmgt\config\BrianSysConfigFactory.java
接下來就是將applicationContext跟applicationContext的注入跟設定完成。
↓先將下面要建立的applicationContext注入,檔案位置如下。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-services\src\main\resources\beanRefContext.xml
↓設定如下
<bean id="briansysContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>META-INF/opennms/applicationContext-briansys.xml</value>
</list>
</constructor-arg>
<constructor-arg ref="daemonContext" />
</bean>
↓再到下面這個位置,建立applicationContext-briansys.xml。
\\192.168.10.69\opennms_workspace\opennms-1.8.16-1\source\opennms-services\src\main\resources\META-INF\opennms\
建立方式可以參考其他的applicationContext,或者去認識一下Spring/Jmx。
以上,草率的介紹完畢。
留言
張貼留言