【问题标题】:How to create a MXBean with control methods?如何使用控制方法创建 MXBean?
【发布时间】:2019-02-04 23:19:24
【问题描述】:

我们计划在我们的 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

【问题讨论】:

    标签: kotlin corda


    【解决方案1】:

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

    我添加了一个新的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
              }
          }
    
       }
       ...
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      相关资源
      最近更新 更多