编程实现在weblogic中添加用户

  
在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;
 
public class AddToWeblogic {
    private static String USERNAME = "weblogic" ;
    private static String PASSWORD = "weblogic" ;
    private static String PROTOCOL = "t3" ;
    private static String HOSTNAME = "localhost" ;
    private static int PORT = 7001;
    private static String JNDI = "/jndi/" ;
   // 用的是DomainRuntime MBean Server
    private static String RUNTIME_URI = "weblogic.management.mbeanservers.domainruntime" ;
    private static 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;
    }
    public void 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 服务器通信时出现通信问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值