如何使用控制方法创建MXBean?

时间:2019-02-04 23:19:25

标签: kotlin corda

我们计划在我们的产品中实施一些行为控制 CordApp,用于测试目的。有可能创建一个 M(X)Bean,可通过JMX访问,它将改变一些 CordApp中的内部标志?如果这不是一个好的设计 选择,请告知最佳做法。

基本上,我们有一组标志,如下所示:

abstract class BaseFlow() : FlowLogic<SignedTransaction>() {
    var flagBehaviourOne  : Boolean = true
    var flagBehaviourTwo  : Boolean = true
    var flagBehaviourThree: Boolean = true
    var flagBehaviourFour : Boolean = true
...
}

然后,在一些实现类中,我们有这样的东西:

object SomeFlow {
    @InitiatingFlow
    class Initiator(private val destinatario: Party,
                    private val parameter: StateObject,
                    private val isAnonymous: Boolean = false,
                    private val pointer: Any) : BaseFlow() {
    ...
        @Suspendable
        override fun call(): SignedTransaction {

        if (flagBehaviourOne || flagBehaviorTwo) { 
            // enforce some specific behaviour
        }

    ...

    } // end of SomeFlow.Initiator

...  

} // end of SomeFlow

1 个答案:

答案 0 :(得分:0)

我(部分)解决了我的问题。

我添加了一个新的object类及其jmx接口:

package vfalcao.example.jmx

import java.lang.management.ManagementFactory
import javax.management.MXBean
import javax.management.ObjectName

@MXBean
interface BehaviourControlMXBean {
    fun setBehaviourOne(newValue: String)
    fun isBehaviourOne() : String
    ...
    // other "behaviours" ommited for brevity
}

object BehaviourControl : BehaviourControlMXBean {
    // internal data
    ...
    init {
        val objectName = ObjectName("vfalcao.example.jmx:type=BehaviourControl,name=def")
        val platformMBeanServer = ManagementFactory.getPlatformMBeanServer()
        platformMBeanServer.registerMBean(this, objectName)
    }
}

然后,在我的BaseFlow班上:

abstract class BaseFlow() : FlowLogic<SignedTransaction>() {
   companion object {
      ...
      init {
          println("${BehaviourControl}")
      }
      ...
      fun test() {
          var behaviour1 = ((BehaviourControl.props["behaviour1"] as String).toBoolean())
          if (behaviour1) { 
             // do something controlled by behaviour1
          }
      }

   }
   ...
}