發表文章

目前顯示的是 6月, 2012的文章

[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.l

[OpenNMS Note] OpenNMS SNMP的誕生

圖片
這陣子實在是懶到翻掉,一點都不想上班,這幾張圖片還是被我老闆逼出來的。 我承認我真的很懶,懶得囉嗦,我就直接就說明一下。 看圖說故事 ↓這是OpenNMS的架構,基本上OpenNMS的發展一直都是依這樣的架構發展,增加的只是一些模組跟功能,可見這用Maven搭建的架構還算穩定。 我拿到手的版本是1.8.x版,這時候已經是改用Jetty當作Web Server。整個SNMP的功能主要是藏在Dependencies中「snmp*」的module中,opennms/dependencies下的東西大都是用來作Library用,所以很多都是只有pom.xml的檔案,再透過Maven的repository到指定的Server download。當然你也可以自己手動增加一個module,按照其他的pom.xml的架構去搭建就ok了。 接下來OpenNMS的真正核心是在core/snmp/*下面,他會呼叫到Dependencies中的snmp*.tar,所以大家就清楚當初弄Dependencies/snmp*的目的了。當然在core/snmp中只提供大部分的snmp api,而後再依照各個功能需求去初始化Daemon/Service,由此取得SNMP的服務/功能。 ↓剛剛提到的SNMP程式架構的大概。最下面的那幾個是我目前查到有用到SNMP api的幾隻模組。 ↓這其實是整個OpenNMS的Boot up 流程。很多東西都被我省略了,但是剛開始Study OpenNMS的人應該還是有點幫助。 最初的程式其實是「target/openms-1.8x/bin/opennms」這是隻可執行的pl。它平常就被藏在「opennms-base-assembly\src\main\filtered\bin」下。 從中可以看到它會去呼叫opennms-bootstrap.tar,程式就是這樣開始的。 緊接著bootstrap會用classloader的方式去喚起opennms-daemon中的程式,然後就是一連串的初始化,像Spring, JMX, Dao...之類的東西都是在這階段初始化,你也可以從每個module中看到有onInit()或Init的function,這個Function就是在各個資源初始完之後,切入每個Service/mod

[PhotoSystem Note] 第一階段。OpenNMS架構破解

今天下午,總算把耗時三個星期的OpenNMS架構整理給告一段落了。因為OpenNMS主要是基於SNMP4J、Spring、Log4j、jrrd、liquibase、Jicmp、Castor、Jaxb、Hibernate、Jcifs、Jdhcp...等技術去搭建完成,架構搭建則是基於Maven的技術去規劃。 而我這次任務就是將SNMP4J、Jrrd、Jicmp、Jdhcp..這些我暫時用不到的東西抽除,並且把我的程式全部放進去一個獨立模組。 我想了幾天,原本是想用刪去法,一個一個模組抽離。但後來發現刪去法,可能會導致刪除的模組不齊全,那我乾脆由一個乾淨的環境,一個一個組裝回來,這樣少掉什麼模組就會缺少什麼功能,這樣比較能夠掌握每個模組的完整度。 這下來第一個星期,我花了整整一個星期,先用Maven簡單建立起一個簡陋的Web Server,然後再將Jetty抽離為一個獨立模組。 完成第一個階段後,問題來了,因為我當初沒考慮到Spring、Jmx上的應用,甚至我想用更簡單的方式去達到,所以我在Compiler跟Assembly之後,我的管理套件無法呼叫Jetty去初始化。 所以我又回去OpenNMS參照它的Spring、Daemon管理的架構,想了一個星期,後來我還是決定導入OpenNMS的架構,因為我經驗值太低了。 陸續又花了一個星期,導入過程中一直出現錯誤,加上我對Java熟悉度還不是很成熟,就這樣耗費一個星期,又是K資料、又是測試、甚至是再重新建立單一的Spring架構去熟悉Spring、然後再繼續K資料,今天下午總算將這些架構弄懂,導入完成。 現階段我已經將Start、Stop、Status的架構給完成了。並且集中由一隻叫Control的Java程式去控制流程,然後由Manager的程式去掌握資源,初始化則是Starter。 如果你是熟悉OpenNMS的人應該對這幾個關鍵字很熟悉,是的,因為我翻了OpenNMS的程式一段時間後,我真的找不到可以快速替代他們的方案,就直接引入了。 我的架構很單純,就只有Jetty Server、Web UI、Daemon Manager、Spring、Log4j、Caster,大至上是這些東西,但我又留了擴充的能力,如同OpenNMS一樣。 所以,接下來我將會再導入Mysql跟Hibernat