2012-04-05 72 views
1

我在一個實現MBean的java項目中工作,我的需求是攔截MBean並在註冊表之前更改/添加它們的屬性。例如:插入MBean攔截器

則domainName:名稱= myMBean - >則domainName:名稱= myMBean1,類型=

的myType

我發現this link其中介紹瞭如何應用其他的攔截器則默認攔截器,但我不知道該怎麼辦在代碼中。

在此先感謝。

+0

我已經添加了一個簡單的答案。如果您可以使用您用來註冊mbeans的框架編輯您的問題,我可以更好地回答。 – Gray 2012-04-05 17:01:18

回答

0

一旦你註冊bean顯然已經太晚了。最簡單的做法是改變註冊完成的方式。如果您向我們展示了您正在使用的註冊bean的框架,那麼我將能夠提供更多幫助。

通常無論是進行實際登記做這樣的事情:

private MBeanServer mbeanServer; 
... 
mbeanServer.registerMBean(mbean, objectName); 

因此,您可以提供不同的ObjectName

ObjectName objectName = new ObjectName("domainName:name=myMBean1,type=myType"); 

但我相信你沒有做自己的註冊。


順便說一句,我不知道,你可以切換到使用不同的JMX框架,但我已經把收尾我Simple JMX system最近。它在發佈時允許對象name themselves programmatically

+0

有關的項目實際上是JOnAS。對於mbeans註冊表,JOnAS使用帶有mbean描述符的名爲BaseModelMBean的apache API。我不知道這是否能回答你的問題,我在這方面還沒有多少參考。 如您所描述的更改對象名稱太低級別。我需要更改一些mbeans(取決於要部署的應用程序中是否存在信息)。所以: 1.某處,我們要註冊一個mbean 2.「Something」檢查信息的存在,並更改(如果需要)objectname。 3.註冊mbean 仍然找到這個「東西」:-)。 在此先感謝。 – Mohammed 2012-04-06 07:48:21

+0

對不起,我不知道這個框架。我不確定你可以切換,但我最近在簡單的JMX系統上完成了最後的修改。它允許對象以編程方式命名自己:http://256.com/sources/simplejmx/ – Gray 2012-04-06 13:11:57

+0

我需要的另一面可以看作默認MBeanServer的「代理」。在這個代理中,我們可以處理請求。 該代理將實現相同的接口以及代碼,該代碼允許在註冊表之前處理mbeans,並且還可以訪問mbeans(例如,應用程序只能訪問類型爲myType的mbeans)。 – Mohammed 2012-04-06 15:35:08