JMX 編程實現在weblogic中添加使用者

來源:互聯網
上載者:User

 http://blog.csdn.net/saidora/archive/2007/06/23/1663108.aspx

 

在Weblogic中有三種服務MBean,各自的功能如下:
1、DomainRuntime MBean Server
   DomainRuntimeServerMBean 為域範圍服務(應用程式部署,JMS伺服器,JDBC資料來源)提供對MBean訪問。
   com.bea:Name = DomainRuntimeService, Type = weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean
2、Runtime MBean Server
   RuntimeServerMBean 提供對當前伺服器的運行時MBean活動配置訪問。
   com.bea:Name = RuntimeService, Type = weblogic.management.mbeanservers.runtime.RuntimeServiceMBean
3、Edit MBean Server
   EditServiceMBean 提供管理當前weblogic server 域的配置進入點。
  com.bea:Name = EditService, Type = weblogic.management.mbeanservers.edit.EditServiceMBean
 
Weblogic 9.0 編程實現添加使用者和以前版本的方式有所不同,直接使用JMX或WLS。
樣本程式如下:
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Hashtable;
 
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;
 
publicclass AddToWeblogic {
    privatestatic String USERNAME = "weblogic";
    privatestatic String PASSWORD = "weblogic";
    privatestatic String PROTOCOL = "t3";
    privatestatic String HOSTNAME = "localhost";
    privatestaticintPORT = 7001;
    privatestatic String JNDI = "/jndi/";
   //用的是DomainRuntime MBean Server
    privatestatic String RUNTIME_URI = "weblogic.management.mbeanservers.domainruntime";
    privatestatic String EDIT_SERVICE = "com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean";
    private MBeanServerConnection domainMbeanServerConnection = null;
    //在該域中,串連正在啟動並執行伺服器
    public MBeanServerConnection getConnection(String URI) throws IOException,MalformedURLException {
       //描述MBean Server的地址
       JMXServiceURL serviceURL = new JMXServiceURL(PROTOCOL, HOSTNAME, PORT, JNDI + URI);
       Hashtable h = new Hashtable();
        //登入weblogic該域的使用者名稱和密碼
       h.put(Context.SECURITY_PRINCIPAL, USERNAME);
       h.put(Context.SECURITY_CREDENTIALS, PASSWORD);
       h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");
       //構造JMXConnector對象。
       JMXConnector connector = JMXConnectorFactory.connect(serviceURL, h);
       //串連到MBean
       MBeanServerConnection connection = connector.getMBeanServerConnection();
       return connection;
    }
    publicvoid addrun(String username,String password) {
       try {
           domainMbeanServerConnection = getConnection(RUNTIME_URI);
           ObjectName service=new ObjectName(EDIT_SERVICE);
//層層擷取MBean的特定屬性之後在DefaultAuthenticator上添加使用者
           ObjectName domainMBean = (ObjectName) domainMbeanServerConnection.getAttribute(service,"DomainConfiguration");
           ObjectName securityConfiguration
                          = (ObjectName) domainMbeanServerConnection.getAttribute(domainMBean,"SecurityConfiguration");
           ObjectName defaultRealm
                          = (ObjectName) domainMbeanServerConnection.getAttribute(securityConfiguration, "DefaultRealm");
           ObjectName[] atnProviders
                          = (ObjectName[]) domainMbeanServerConnection.getAttribute(defaultRealm,"AuthenticationProviders");
           ObjectName defaultAtnProvider = null;
           for (int i = 0; i < atnProviders.length; i++) {
               String name = (String) domainMbeanServerConnection.getAttribute(atnProviders[i], "Name");
               if (name.equals("DefaultAuthenticator")) {
                 defaultAtnProvider = atnProviders[i];
             }
           }
 //調用weblogic中的createUser函數添加使用者
           domainMbeanServerConnection.invoke(defaultAtnProvider, "createUser",
               new Object[]{username,password,"generaluser"},
               new String[]{"java.lang.String", "java.lang.String","java.lang.String"});
//調用weblogic中的addMemberToGroup把使用者歸類到某個組中          domainMbeanServerConnection.invoke(defaultAtnProvider,"addMemberToGroup",
                   new Object[] {"User", username},
                   new String [] {"java.lang.String", "java.lang.String"});
 
       }
       catch(Exception e){
           e.printStackTrace();
       }     
    }
   
相關函數的解釋:
JMXConnectorFactory
用於建立 JMX API 連接器用戶端的工廠。此類沒有執行個體。
通常使用此類的 connect 方法建立串連。
public static JMXConnector connect(JMXServiceURL serviceURL, Map<String,?> environment)
                            throws IOException
建立到位於給定地址的連接器伺服器的串連。
此方法等效於:
 JMXConnector conn = JMXConnectorFactory.newJMXConnector(serviceURL,environment);
 conn.connect(environment);
 
參數:
serviceURL - 要串連到的連接器伺服器的地址。
environment - 用於確定如何建立串連的一組屬性。此參數可以為 null。此映射中關鍵字必須為字串。每個關聯值的適當類型取決於屬性。此調用不改變 environment 的內容。
返回:
代表建立立串連的 JMXConnector。每次對此方法的成功調用都產生不同的對象。
拋出:
NullPointerException - 如果 serviceURL 為 null。
IOException - 如果由於通訊問題造成無法建立連接器用戶端或串連。
SecurityException - 如果由於安全原因而無法建立串連。
 
 
getMBeanServerConnection
MBeanServerConnection getMBeanServerConnection( ) throws IOException
返回一個代表遠程 MBean 伺服器的 MBeanServerConnection 對象。對於給定的 JMXConnector,對此方法兩次成功的調用通常將返回相同的 MBeanServerConnection 對象,儘管不需要這樣做。
對於返回的 MBeanServerConnection 中的每個方法,調用該方法將導致調用遠程 MBean 伺服器中的相應方法。MBean 伺服器方法返回的值就是返回給用戶端的值。如果 MBean 伺服器方法產生了 Exception,則用戶端上也會出現相同的 Exception。如果 MBean 伺服器方法(或嘗試對它的調用)產生了 Error,則該 Error 將封裝在 JMXServerErrorException 中,從用戶端能夠看到該錯誤。
調用該方法等效於調用 getMBeanServerConnection(null),這意味著未指定任何委託主題並且在 MBeanServerConnection 上調用的所有操作必須使用經驗證的主題(如果有)。
返回:
一個通過將其方法轉寄到遠程 MBean 伺服器而實現 MBeanServerConnection 介面的對象。
拋出:
IOException - 如果無法建立有效 MBeanServerConnection,例如,由於尚未建立到遠程 MBean 伺服器的串連(用 connect 方法),或者串連已關閉,或者串連已斷開。
 
JMXServiceURL
public JMXServiceURL(String protocol,
                     String host,
                     int port)
              throws MalformedURLException
構造具有給定協議、主機和連接埠的 JMXServiceURL。此構造方法等效於 JMXServiceURL(protocol, host, port, null)。
參數:
protocol - URL 的協議部分。如果為 null,則預設為 jmxmp。
host - URL 的主機部分。如果為 null,則預設為本地主機名稱,它由 InetAddress.getLocalHost().getHostName() 確定。如果它為一個數值 IPv6 地址,可選擇將其括在方括弧[ ]中。
port - URL 的連接埠部分。
拋出:
MalformedURLException - 如果某一部分在文法上不正確,或者如果 host 為 null 並且無法找到本地主機名稱,或者如果 port 為負。
 
MBeanServerConnection
此介面表示了與 MBean 伺服器(無論是本地的還是遠端)進行通訊的一種方式。表示本地 MBean 伺服器的 MBeanServer 介面擴充了此介面。
getAttribute
Object getAttribute(ObjectName name,
                    String attribute)
                    throws MBeanException,
                           AttributeNotFoundException,
                           InstanceNotFoundException,
                           ReflectionException,
                           IOException
獲得指定 MBean 的特定屬性值。通過 MBean 的對象名來標識 MBean。
參數:
name - MBean 的對象名,要通過該對象名檢索 MBean 的屬性。
attribute - 指定要檢索的屬性名稱的 String。
返回:
檢索到的屬性值。
拋出:
AttributeNotFoundException - 如果指定的屬性在 MBean 中是不可訪問的。
MBeanException - 封裝 MBean 的擷取方法所拋出的異常。
InstanceNotFoundException - 如果指定的 MBean 未在該 MBean 伺服器中註冊。
ReflectionException - 封裝試圖調用設定方法時所拋出的 java.lang.Exception。
RuntimeOperationsException - 封裝 java.lang.IllegalArgumentException:如果參數中的對象名為 null 或者參數中的屬性為 null。
IOException - 如果與 MBean 伺服器通訊時出現通訊問題。
 
invoke
Object invoke(ObjectName name,
              String operationName,
              Object[] params,
              String[] signature)
              throws InstanceNotFoundException,
                     MBeanException,
                     ReflectionException,
                     IOException
在 MBean 上調用某個操作。
參數:
name - MBean 的對象名,要在該 MBean 上調用方法。
operationName - 要調用的操作名。
params - 一個數組,包含叫用作業時要設定的參數
signature - 包含操作簽名的數組。用於載入類對象的類載入器與用於載入 MBean(要在其上叫用作業)的類載入器相同。
返回:
該操作返回的對象,表示在指定 MBean 上調用該操作的結果。
拋出:
InstanceNotFoundException - 如果指定的 MBean 未在該 MBean 伺服器中註冊。
MBeanException - 封裝在 MBean 上調用的方法所拋出的異常。
ReflectionException - 封裝試圖調用該方法時所拋出的 java.lang.Exception。
IOException - 如果與 MBean 伺服器通訊時出現通訊問題。

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/saidora/archive/2007/06/23/1663108.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.