Interceptor実装サービス jp.ossc.nimbus.service.aop.interceptor.servlet.BlockadeInterceptorService

jp.ossc.nimbus.service.aop.interceptor.servlet.BlockadeInterceptorServiceは、開閉塞を制御するInterceptor実装サービスです。

このサービスは、複合的なサービスで、以下のサービスを下位サービスとして使用します。

下位サービスインタフェース用途
jp.ossc.nimbus.service.codemaster.CodeMasterFinder開閉塞マスタや特権ユーザマスタを取得する。

以下に簡単なサービス定義を示します。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE server PUBLIC
  3. "-//Nimbus//DTD Nimbus 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
  5. <server>
  6. <manager>
  7. <!-- 開閉塞を制御するInterceptorサービス -->
  8. <service name="BlockadeInterceptor"
  9. code="jp.ossc.nimbus.service.aop.interceptor.servlet.BlockadeInterceptorService">
  10. <!-- 開閉塞マスタや特権ユーザマスタを取得するCodeMasterFinderサービスのサービス名を設定する -->
  11. <attribute name="CodeMasterFinderServiceName">#CodeMasterFinder</attribute>
  12. <!-- 開閉塞マスタのマスタ名を設定する -->
  13. <attribute name="BlockadeCodeMasterKey">BLOCKADE_MST</attribute>
  14. <!-- 特権ユーザマスタのマスタ名を設定する -->
  15. <attribute name="SpecialUserCodeMasterKey">SPECIAL_USER_MST</attribute>
  16. <!-- 要求オブジェクトと特権ユーザマスタのユーザIDの取得方法を設定する -->
  17. <attribute name="SpecialUserMapping">{Header(RequestHeader).UserID}|{Header(Login).UserID}=userId</attribute>
  18. <depends>CodeMasterFinder</depends>
  19. </service>
  20. <!-- 以下はコードマスタサービス定義 -->
  21. <service name="CodeMasterFinder"
  22. code="jp.ossc.nimbus.service.codemaster.CodeMasterService">
  23. <attribute name="MasterNames">
  24. BLOCKADE_MST,
  25. SPECIAL_USER_MST
  26. </attribute>
  27. <attribute name="BeanFlowInvokerFactoryServiceName">#BeanFlowInvokerFactory</attribute>
  28. <attribute name="MessageReceiverServiceName">#MessageReceiver</attribute>
  29. <attribute name="Subjects">CodeMaster</attribute>
  30. <depends>BeanFlowInvokerFactory</depends>
  31. <depends>MessageReceiver</depends>
  32. </service>
  33. <!-- 業務フローを生成するBeanFlowInvokerFactoryサービス -->
  34. <service name="BeanFlowInvokerFactory"
  35. code="jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryService">
  36. <attribute name="DirPaths">flow</attribute>
  37. <attribute name="BeanFlowInvokerAccessClass">jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl2</attribute>
  38. <depends>JDBCTransactionResourceFactory</depends>
  39. <depends>PersistentManager</depends>
  40. </service>
  41. <!-- JDBCコネクションのTransactionResourceを生成するResourceFactoryサービス -->
  42. <service name="JDBCTransactionResourceFactory"
  43. code="jp.ossc.nimbus.service.resource.datasource.JdbcConnectionFactoryService">
  44. <attribute name="ConnectionFactoryServiceName">#ConnectionFactory</attribute>
  45. <depends>
  46. <!-- JDBCドライバ経由でコネクションを取得するConnectionFactoryサービス -->
  47. <service name="ConnectionFactory"
  48. code="jp.ossc.nimbus.service.connection.JDBCConnectionFactoryService">
  49. <attribute name="DriverName">org.hsqldb.jdbcDriver</attribute>
  50. <attribute name="ConnectionURL">jdbc:hsqldb:./localDB</attribute>
  51. <attribute name="UserName">sa</attribute>
  52. <attribute name="Password"></attribute>
  53. <attribute name="AutoCommit">false</attribute>
  54. </service>
  55. </depends>
  56. </service>
  57. <!-- 永続化を管理するPersistentManagerサービス -->
  58. <service name="PersistentManager"
  59. code="jp.ossc.nimbus.service.connection.DefaultPersistentManagerService"/>
  60. <!-- メッセージ受信サービス -->
  61. <service name="MessageReceiver"
  62. code="jp.ossc.nimbus.service.publish.MessageReceiverService">
  63. <attribute name="ClientConnectionFactoryServiceName">#ClusterClientConnectionFactory</attribute>
  64. <attribute name="StartReceiveOnStart">true</attribute>
  65. <depends>#ClusterClientConnectionFactory</depends>
  66. </service>
  67. <!-- クラスタクライアントコネクションファクトリサービス -->
  68. <service name="ClusterClientConnectionFactory"
  69. code="jp.ossc.nimbus.service.publish.ClusterClientConnectionFactoryService">
  70. <attribute name="ClusterServiceName">#Cluster</attribute>
  71. <attribute name="FlexibleConnect">true</attribute>
  72. <depends>
  73. <!-- クラスタサービス -->
  74. <service name="Cluster"
  75. code="jp.ossc.nimbus.service.keepalive.ClusterService">
  76. <attribute name="MulticastGroupAddress">239.0.0.10</attribute>
  77. <attribute name="Client">true</attribute>
  78. </service>
  79. </depends>
  80. </service>
  81. </manager>
  82. </server>

上記で使用している開閉塞マスタと、特権ユーザマスタのコードマスタ用の業務フローを示す。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE flows PUBLIC
  3. "-//Nimbus//DTD Nimbus Bean Flow 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/beanflow_1_0.dtd">
  5. <flows>
  6. <!-- 開閉塞マスタを読み込む業務フロー -->
  7. <flow name="BLOCKADE_MST">
  8. <!-- JDBC接続のリソース宣言 -->
  9. <resource name="Connection" service="Nimbus#JDBCTransactionResourceFactory" trancontrol="true"/>
  10. <!-- マスタ読み込み用のRecordListを定義する -->
  11. <step name="Master">
  12. <target><object code="jp.ossc.nimbus.beans.dataset.RecordList"/></target>
  13. <attribute name="Name">BLOCKADE_MST</attribute>
  14. <attribute name="Schema">
  15. :path,java.lang.String
  16. :state,int
  17. :message,java.lang.String
  18. </attribute>
  19. </step>
  20. <!-- マスタをデータベースから読み込む -->
  21. <step name="Load">
  22. <target><service-ref>Nimbus#PersistentManager</service-ref></target>
  23. <result>
  24. <invoke name="loadQuery">
  25. <argument type="java.sql.Connection"><resource-ref>Connection</resource-ref></argument>
  26. <argument>select PATH-&gt;{path}, STATE-&gt;{state}, MESSAGE-&gt;{message} from BLOCKADE_MST</argument>
  27. <argument type="java.lang.Object" nullValue="true"/>
  28. <argument type="java.lang.Object"><step-ref>Master</step-ref></argument>
  29. </invoke>
  30. </result>
  31. </step>
  32. </flow>
  33. <!-- 特権ユーザマスタを読み込む業務フロー -->
  34. <flow name="SPECIAL_USER_MST">
  35. <!-- JDBC接続のリソース宣言 -->
  36. <resource name="Connection" service="Nimbus#JDBCTransactionResourceFactory" trancontrol="true"/>
  37. <!-- マスタ読み込み用のRecordListを定義する -->
  38. <step name="Master">
  39. <target><object code="jp.ossc.nimbus.beans.dataset.RecordList"/></target>
  40. <attribute name="Name">SPECIAL_USER_MST</attribute>
  41. <attribute name="Schema">
  42. :userId,java.lang.String,,,,1
  43. </attribute>
  44. </step>
  45. <!-- マスタをデータベースから読み込む -->
  46. <step name="Load">
  47. <target><service-ref>Nimbus#PersistentManager</service-ref></target>
  48. <result>
  49. <invoke name="loadQuery">
  50. <argument type="java.sql.Connection"><resource-ref>Connection</resource-ref></argument>
  51. <argument>select USER_ID-&gt;{userId} from SPECIAL_USER_MST</argument>
  52. <argument type="java.lang.Object" nullValue="true"/>
  53. <argument type="java.lang.Object"><step-ref>Master</step-ref></argument>
  54. </invoke>
  55. </result>
  56. </step>
  57. </flow>
  58. </flows>


アスペクト指向/Interceptor