前天和昨天終於把 SCORM RR 給搞定了,
從之前到現在,觀察許久OMAR本身的專案,架設他們的omar server ,使用他們的Java & Web UI
以下總結一下心得:
以前學長使用的是 omar 3.0 alpha 2 ,我們新版的使用的是 omar 3.0 beta ..
光這兩種就改了不少地方。
首先在classification node 路徑 or concept 路徑上 新舊版的差別:
舊版的 path 學長是用:
/urn:uuid:3188a449-18ac-41fb-be9f-99a1adca02cb/RegistryObject/RegistryEntry/ExtrinsicObject/SCORM/
新版的 path 是
/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject/ExtrinsicObject/SCORM/
前者學長是複製到uuid的路徑,所以有些字串變成了16進位碼,而這段路徑在別台omar server上就不適用;我則是使用非uuid的名稱路徑,在別台這樣的路徑也可以使用。
而後半段,是新舊版classificationschema 樹狀路徑的差別,舊版有著RegistryEntry 這個 Concept
再來新舊版有個差異,如果沒有碰omar project 的原始碼是看不出來的。
而在資料庫設定上,利用omar.properties屬性檔設定。
omar 共有三大屬性設定檔 omar.properties、omar-common.properties、jaxr-ebxml.properties
omar.properties 是關於 server 的設定(資料庫這方面在這邊可以找到)
omar-common.properties 關於安全性和其他設定。
omar-jaxr.properties 是關於client的設定(Java UI 、 Web UI等 )
而在WEB-INF\classes\底下除了properties檔以外還有一堆 xml 檔,這些就是 hibernate 使用的。
OMAR Project 的 package套件,共分為
org.freebxml.omar.client ,
org.freebxml.omar.common
org.freebxml.omar.server
三大類,底下細分更多繁不備載。
那除了屬性檔以外,新版omar 有加強 security 的實作,像是在Java UI (registry-browser.jar) 新版的使用
使用者的新增會註冊你的CA 憑證 在omar的一個地方,像是C:\omar\data\security\keystore.jks
他的Use Case 如下:
首先在Omar Server 尚未註冊新使用者時,你可以新增 new account,新增需填入的資訊會包含兩樣,一是User Info 、二是CA alias & password 用來產生新的 CA。
通常是你沒有自己的CA時,omar 實作幫你產生自己新的CA (.p12格式),
但是官方不建議用omar產生的CA。
填完資料註冊新增後。底下會有兩個動作:一是把User Info 存入 RR,
二是把自動產生的CA資訊(alias / password)存入你設定的
C:\omar\data\security\keystore.jks 這個位置。
第二種情境,則是使用你已經有的CA來新增註冊使用者。它會存入新使用者資訊和把這個 CA 和新增的使用者 map 在一起,以後登入是用CA 的alias / password 就可以登入。
第三種是你已經有user account 和對應的CA 時,但是你在不同的電腦上想登入遠方的 omar server;
這時候有兩種情況,一是用 Java UI (即 JAXR),二是Web UI;
先說Java UI(registry-browser.jar),新版的已經有一個功能,是把你的CA載入至這台電腦的Java UI ,實際動作就是會載入至 JAXR,假如你再用自己寫的 Client /JAXR 這點就很重要,你可以用Java UI 預先載入已經新增註冊過的CA,這樣你利用(alias / password)登入後,就可以用程式去新增修改RO。
第二種如果使用WEB UI 話,只要Server的
Tomcat 有開啟 SSL https 8443 port 功能,你在遠端可以直接載入CA到Web borwser上,即可以自動認證登入使用了。tomcat 上的設定看起來是這樣:
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="want" sslProtocol="TLS"
truststorePass="ebxmlrr"
truststoreType="jks"
truststoreFile="C:/Java/omar/data/security/keystore.jks"/>
詳細請看官網 omar 、 tomcat ssl
在使用學長的SCORM RR 時,他的 user 是事先載入至JAXR過的,
就是先利用Java UI 新增 account,並存入omar\data\security\keystore.jks
所以使用時 連C:\omar (原來部屬用的原檔) 也要複製過去。
而舊版沒有讓你備份你的CA 檔案(.p12格式)的功能。
新版的則可以利用 Client UI 讓你產生並存放和帶著走。
這個omar安全性限制下,就是只有該帳號才能作新增和修改刪除自己所屬的RO。
再談談OMAR RR在新舊版的差異,除了查詢和新增修改外,新版的規格路徑不同外,
在其中的一項功能處理getRegiestyObject(顯示xml),和get RepositoryItem時 ,
這邊新舊API 差距甚大,其實在學長呼叫omar package裡得 QueryManagerImpl 並使用時,新版同樣有這個 Class。 不過其中API裡使用的RegistryException已經由 org.freebxml.omar.common.RegistryException
改成 javax.xml.registry.RegistryException
這是 omar package 的改變。大概認為原先的不妥,不使用了。或是 javax 已經釋出新的 api
都改好程式碼後,我曾遇到錯誤 Exception,這個Exception還不是我寫的地方,而是我使用
omar package 裡的 類別
這怎可能呢"NullPointException"?
Trace 了半天 omar package 原始類別後,也沒辦法重新編譯,這是別人釋出的 package。怎麼會有呢?大約花了快一天的時間把 source code 找了出來,並且code出一段段來執行,
終於知道那個環節錯了。但是知道是哪一段,卻不知到怎麼發生的。
NullPointException 這個看似基礎的問題,卻又發生得很莫名其妙。竟然找不出為什麼會是Null,所以開始檢查那個 instance是取得Null的。畢竟這是龐大的 omar package source code ,
經過一段段檢查後發現了是那一段用到 org.freebxml.omar.server.persistence.PersistenceManager 類別
他是null 。(這中間不知道經過多少個檔案搜尋、trace 他的design pattern、factory、manager、singleton、interface等等,好多個QueryManage(qm) 、bussiness query manager、bqm 、lcm、 xxm, xxqm, xxqmImpl.....什麼有的沒有的.等等。
最終呢發現了一個錯誤訊息,終於不是外層的NullPointExcetion了,從print stack中發現上述 PersistenceManager沒有 instantiate成功,所以找找他到底是什麼時候 new 出來的?
結果終於發現啦 ^^" ,他...OMAR 有使用Hibernate啦,用這個 omar.properties 和 一推看起來像是repository.jdbc.cfg.xml 的檔案裡設定啦。而我就少了這些檔,這個在舊版omar 3.0 alpha 裡是沒有用到的技術啦。所把新版的檔案溝過去就ok了 \0o0/
結語:程式是實際碰過後才會知道其中的奧妙,資源都擺上去了,碰不碰在自己。沒試過很懶的就不要問令人生氣的問題。因為一聽就知道你連基本功課都沒作,等著別人弄好給你,坐享其成。
沒有留言:
張貼留言