不完美的世界-看到了IOC工具的又一個發展方向
最近在繼續深入的,完整的實現前面文章《基于事件分發機制的企業應用開發 》和《基于攔截器的企業應用構造》中所構思的想法,在印象中,權限系統和組織結構是任何一個ERP系統都會用到的,不是隨便兩下就能實現的簡單功能模塊,實現了這兩個子模塊后,無論什么地方都會用得著,于是便從這兩個功能入手,目前把基于RBAC的權限系統完整實現了,組織結構實現了80%,隨著代碼以及邏輯的增加,基于Spring IOC的配置也開始復雜起來,不過這個是無法避免的,畢竟系統目標是高度可定制,高度靈活的可配置性就意味著復雜性,這里的復雜性不是僅僅指Spring配置語法,而是指各個Bean之間的關系,每一個Service目前都必須做事務控制,安全控制,事件轉換,而且問題已經不僅僅是Service的配置問題了,隨著系統事件的增多,慢慢的各個事件間的邏輯關系也必須被表示出來,使得目前不得不引入了事件堆棧的概念,用來表示源于同一個操作導致的雪崩式的事件關系,目前的事件堆棧還比較簡單,但是作為一個架構設計人員的敏感,我們已經嗅到了還需要把事件管理深化下去的一絲氣味。這些層次,這些邏輯,已經是不能簡單的靠看Spring配置才能理解的了,這個還是我們一個JVM進程能產生的需求,而多個程序,甚至多個系統集成的概念需求(例如SOA),會比這個更加復雜。在本例中,系統需要一個圖形化的容易管理配置bean之間復雜關系的工具的需求越來越迫切。很自然的,我們得出一個結論:系統配置的圖形化,形象化成為了業界可能的下一個發展方向。
ps:該工具最好是一個圖形化的,可作進行運行時“熱修改”的配置定義工具兼Service管理工具,JMX似乎是一個可以考慮的方向,不過還沒想清楚如何與該配置工具緊密結合,我只是希望能夠象扳動水管開關一樣調整各個圖形間的連接,系統里的事件流就會隨之改變,事務管理,安全控制也會隨之改變。不知道哪位同學知道有類似功能的東西,還勞請留個言告知一聲。如果沒有的話,就只能等本系統告一段落后再來解決這個問題了。如果您正在發愁不知發展方向在哪,看到了這篇文章而有所啟發去做出這樣一個工具的話,還希望能便宜點賣我一份 ;)。
雖然上面說了那么多,指出了IOC工具的又一個發展方向,但是我目前面臨的問題還沒有解決 :(
為了展示一下這個復雜度,現在把該系統其中的兩個模塊的Spring配置show出來:
<beans>
????<!--?組織?-->
????<bean?id="orgService"?parent="baseTxProxy">
????????<property?name="target"><ref?local="orgServiceProxy"/></property>
????</bean>
????<bean?id="orgServiceImpl"?class="com.wolfsquare.ibase.org.service.OrgService"?autowire="byName">
????????<property?name="orgTypeService">
????????????<ref?bean="orgTypeServiceImpl"/>
????????</property>
????</bean>????

????<!--?組織類型?-->
????<bean?id="orgTypeService"?parent="baseTxProxy">
????????<property?name="target"><ref?local="orgTypeServiceImpl"/></property>
????</bean>
????<bean?id="orgTypeServiceImpl"?class="com.wolfsquare.ibase.org.service.OrgTypeService"?autowire="byName"/>
????
????<!--?單位?-->
????<bean?id="unitService"?parent="baseTxProxy">
????????<property?name="target"><ref?local="unitServiceImpl"/></property>
????</bean>
????<bean?id="unitServiceImpl"?class="com.wolfsquare.ibase.org.service.UnitService"?autowire="byName">
????????
????????<property?name="lifecycleListeners">
????????????<list>
????????????????<!--<ref?bean="unitListener"/>-->
????????????????<ref?bean="objectSyncOrgListener"/>
????????????</list>
????????</property>
????????
????</bean>
????
????<bean?id="unitListener"?class="com.wolfsquare.ibase.org.listener.UnitListener"??autowire="byName">
????????<property?name="roleService"><ref?bean="roleService"/></property>
????</bean>
????????
????<!--?個人?-->
????<bean?id="personService"?parent="baseTxProxy">
????????<property?name="target"><ref?local="personServiceImpl"/></property>
????</bean>
????<bean?id="personServiceImpl"?class="com.wolfsquare.ibase.org.service.PersonService"?autowire="byName">
????????<property?name="lifecycleListeners">
????????????<list>
????????????????<ref?bean="objectSyncOrgListener"/>
????????????</list>
????????</property>
????</bean>
????<!--?身份-角色偵聽器?-->
????<bean?id="personRoleListener"?class="com.wolfsquare.ibase.org.listener.RoleListener">????
????????<property?name="roleService">
????????????<ref?bean="roleServiceProxy"/>
????????</property>
????</bean>
????<!--?組織機構創建刪除-資源同步?監聽器?-->
????<bean?id="orgResourceSyncListener"?class="com.wolfsquare.ibase.org.listener.OrgResourceSyncListener">
????????<property?name="categoryName"><value>組織機構</value></property>????????????
????????<property?name="resourceService">
????????????<ref?bean="resourceServiceImpl"/>
????????</property>
????????<property?name="includeTypes">
????????????<list>
????????????????<value>unit</value>
????????????????<value>person</value>
????????????????<value>role</value>
????????????</list>
????????</property>
????</bean>

????<bean?id="orgRoleListener"?class="com.wolfsquare.ibase.org.listener.OrgRoleListener">????
????????<property?name="roleService">
????????????<ref?bean="roleService"/>
????????</property>
????????<property?name="excludeTypes">
????????????<list>
????????????????<value>role</value>
????????????</list>
????????</property>
????</bean>
????<!--?組織結構對象刪除偵聽器?,需要掛接到需要同步的Service上-->
????<bean?id="objectSyncOrgListener"?class="com.wolfsquare.ibase.org.listener.ObjectSyncOrgListener">????
????????<property?name="orgService">
????????????<ref?bean="orgServiceImpl"/>
????????</property>
????</bean>

????<bean?id="personToOrgRoleListener"?class="com.wolfsquare.ibase.org.listener.PersonToOrgRoleListener">????
????????<property?name="roleService">
????????????<ref?bean="roleServiceProxy"/>
????????</property>
????</bean>????
????<bean?id="orgSecurityListener"?class="com.wolfsquare.ibase.org.listener.SecurityListener">????
????????<property?name="permService">
????????????<ref?bean="permServiceImpl"/>
????????</property>
????????<property?name="resourceService">
????????????<ref?bean="resourceServiceImpl"/>
????????</property>????
????????<property?name="functionService">
????????????<ref?bean="functionServiceImpl"/>
????????</property>????????
????</bean>????

????<bean?id="orgServiceProxy"?class="org.springframework.aop.framework.ProxyFactoryBean">
????????<property?name="target">
????????????<ref?local="orgServiceImpl"/>
????????</property>
????????<property?name="interceptorNames">
????????????<list>
????????????????<value>rsi</value>
????????????</list>
????????</property>
????????<property?name="singleton">
????????????<value>true</value>
????????</property>
????</bean>
????
????<bean?id="orgEventBrocaster"?class="com.wolfsquare.ibase.org.event.OrgEventBrocaster"?singleton="true">
????????<property?name="lifecycleListeners">
????????????<list>
????????????????<ref?bean="orgSecurityListener"/>????????????
????????????????<ref?bean="orgResourceSyncListener"/>
????????????????<ref?bean="orgRoleListener"/>
????????????????<ref?bean="personToOrgRoleListener"/>???????
????????????</list>
????????</property>
????</bean>
</beans>角色模塊的配置:
<beans>
????<!--?角色?-->
????<bean?id="roleService"?parent="baseTxProxy">
????????<property?name="target"><ref?local="roleServiceProxy"/></property>
????</bean>
????<bean?id="roleServiceImpl"?class="com.wolfsquare.ibase.role.service.RoleService"?autowire="byName">
????????<property?name="personService">
????????????<ref?bean="personServiceImpl"/>
????????</property>
????</bean>
????
????<bean?id="roleServiceProxy"?class="org.springframework.aop.framework.ProxyFactoryBean">
????????<property?name="target">
????????????<ref?local="roleServiceImpl"/>
????????</property>
????????<property?name="interceptorNames">
????????????<list>
????????????????<value>rsi</value>
????????????</list>
????????</property>
????????<property?name="singleton">
????????????<value>true</value>
????????</property>
????</bean>

????<bean?id="rsi"?class="com.wolfsquare.core.service.ServiceInterceptor">
????????<property?name="interceptorMap">
????????????<map>
????????????????<entry?key="com.wolfsquare.ibase.role.service.RoleService">
????????????????????<list>
????????????????????????<ref?local="eventBrocaster"/>
????????????????????</list>
????????????????</entry>
????????????????<entry?key="com.wolfsquare.ibase.org.service.OrgService">
????????????????????<list>
????????????????????????<ref?bean="orgEventBrocaster"/>
????????????????????</list>
????????????????</entry>
????????????</map>
????????</property>
????</bean>
????
????<bean?id="eventBrocaster"?class="com.wolfsquare.core.service.EventBrocaster"?singleton="true">
????????<property?name="lifecycleListeners">
????????????<list>
????????????????<ref?bean="objectSyncOrgListener"/>
????????????????<ref?bean="personRoleListener"/>
????????????</list>
????????</property>
????</bean>

</beans>
最后,為了避免文章過于枯燥,還是show一下系統截圖吧;)
一個典型的組織創建操作導致的事件的產生傳遞圖:

組織管理的界面:

當前用戶的權限,按角色分類:右邊根節點表示的是登錄帳戶,王小二是身份,相當于權限場景(session)

整個組織的權限分布圖:

應某位同學的要求,把系統實體圖加上:
ps:該工具最好是一個圖形化的,可作進行運行時“熱修改”的配置定義工具兼Service管理工具,JMX似乎是一個可以考慮的方向,不過還沒想清楚如何與該配置工具緊密結合,我只是希望能夠象扳動水管開關一樣調整各個圖形間的連接,系統里的事件流就會隨之改變,事務管理,安全控制也會隨之改變。不知道哪位同學知道有類似功能的東西,還勞請留個言告知一聲。如果沒有的話,就只能等本系統告一段落后再來解決這個問題了。如果您正在發愁不知發展方向在哪,看到了這篇文章而有所啟發去做出這樣一個工具的話,還希望能便宜點賣我一份 ;)。
雖然上面說了那么多,指出了IOC工具的又一個發展方向,但是我目前面臨的問題還沒有解決 :(
為了展示一下這個復雜度,現在把該系統其中的兩個模塊的Spring配置show出來:



















































































































































































最后,為了避免文章過于枯燥,還是show一下系統截圖吧;)
一個典型的組織創建操作導致的事件的產生傳遞圖:

組織管理的界面:

當前用戶的權限,按角色分類:右邊根節點表示的是登錄帳戶,王小二是身份,相當于權限場景(session)

整個組織的權限分布圖:

應某位同學的要求,把系統實體圖加上:

posted on 2006-06-08 00:30 wolfsquare 閱讀(1945) 評論(7) 編輯 收藏 所屬分類: 企業應用