Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从独立Java客户端以编程方式创建WebLogic用户_Java_Weblogic_Jmx - Fatal编程技术网

从独立Java客户端以编程方式创建WebLogic用户

从独立Java客户端以编程方式创建WebLogic用户,java,weblogic,jmx,Java,Weblogic,Jmx,我试图从一个简单的独立Java客户机(一个类-->两个方法:createWeblogicUser()&main())以编程方式在WebLogic(10.3.4)中创建用户 public void createWeblogicUser(){ 试一试{ Hashtable env=新的Hashtable(); 环境put(Context.INITIAL\u Context\u工厂,“weblogic.jndi.WLInitialContextFactory”); 环境保护(Context.SECUR

我试图从一个简单的独立Java客户机(一个类-->两个方法:createWeblogicUser()&main())以编程方式在WebLogic(10.3.4)中创建用户

public void createWeblogicUser(){
试一试{
Hashtable env=新的Hashtable();
环境put(Context.INITIAL\u Context\u工厂,“weblogic.jndi.WLInitialContextFactory”);
环境保护(Context.SECURITY_PRINCIPAL,“weblogic”);
环境保护(Context.SECURITY_凭证,“weblogic”);
put(Context.PROVIDER_URL,“t3://myserver:7001”);
InitialContext ctx=新的InitialContext(env);
MBeanServer wls=(MBeanServer)ctx.lookup(“java:comp/env/jmx/runtime”);
ObjectName userEditor=null;
ObjectName mBeanTypeService=new ObjectName(“com.bea:Name=mBeanTypeService,Type=weblogic.management.mbeanservers.mBeanTypeService”);
ObjectName rs=newobjectname(“com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.runtimeservicebean”);
ObjectName domainMBean=(ObjectName)wls.getAttribute(rs,“DomainConfiguration”);
ObjectName securityConfig=(ObjectName)wls.getAttribute(domainMBean,“SecurityConfiguration”);
ObjectName defaultRealm=(ObjectName)wls.getAttribute(securityConfig,“defaultRealm”);
ObjectName[]authProviders=(ObjectName[])wls.getAttribute(defaultRealm,“AuthenticationProviders”);
对于(ObjectName providerName:authProviders){
if(userEditor==null){
ModelMBeanInfo=(ModelMBeanInfo)wls.getMBeanInfo(providerName);
String className=(String)info.getMBeandDescriptor().getFieldValue(“interfaceClassName”);
if(className!=null){
字符串[]mba=(字符串[])wls.invoke(mBeanTypeService
,“获取子类型”
,新对象[]{“weblogic.management.security.authentication.UserEditorMBean”}
,新字符串[]{“java.lang.String”}
);
for(字符串mb:mba){
if(className.equals(mb))
userEditor=providerName;
}
}
}
if(userEditor==null)
抛出新的RuntimeException(“无法检索用户编辑器”);
试一试{
调用(用户编辑器)
,“createUser”
,新对象[]{“wls_用户”、“密码123”、“以编程方式创建的用户”。}
,新字符串[]{“java.lang.String”、“java.lang.String”、“java.lang.String”}
);
}
捕获(例外e){
e、 printStackTrace();
}
ctx.close();
}
}
捕获(例外情况除外){
例如printStackTrace();
}
}

关于我应该做什么样的上下文查找有什么想法吗?“java:comp”抛出javax.naming.NameNotFoundException;看起来我只能在容器中使用它。

让它工作了

private void createWeblogicUser(String username) {
try {
    Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.SECURITY_PRINCIPAL, "weblogic");
    env.put(Context.SECURITY_CREDENTIALS, "weblogic");

    String hostname = "myserver";
    int port = 7001;
    String protocol = "rmi";
    String url= new String("/jndi/iiop://myserver:7001/weblogic.management.mbeanservers.domainruntime");

    JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, url);
    JMXConnector connector = JMXConnectorFactory.connect(serviceURL, env);
    MBeanServerConnection connection = connector.getMBeanServerConnection();

    ObjectName userEditor = null;
    ObjectName mBeanTypeService = new ObjectName( "com.bea:Name=MBeanTypeService,Type=weblogic.management.mbeanservers.MBeanTypeService");
    ObjectName rs = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
    ObjectName domainMBean = (ObjectName) connection.getAttribute(rs, "DomainConfiguration");
    ObjectName securityConfig = (ObjectName) connection.getAttribute(domainMBean, "SecurityConfiguration");
    ObjectName defaultRealm = (ObjectName) connection.getAttribute(securityConfig, "DefaultRealm");
    ObjectName[] authProviders = (ObjectName[]) connection.getAttribute(defaultRealm, "AuthenticationProviders");

    for(ObjectName providerName : authProviders) {
        System.out.println("Auth provider is: " + providerName) ;

        if(userEditor == null) {
            ModelMBeanInfo info = (ModelMBeanInfo) connection.getMBeanInfo(providerName);
            String className = (String) info.getMBeanDescriptor().getFieldValue("interfaceClassName");
            System.out.println("className is: " + className) ;

            if(className != null) {
                String[] mba = (String[]) connection.invoke(mBeanTypeService
                                        , "getSubtypes"
                                        , new Object[] {"weblogic.management.security.authentication.UserEditorMBean"}
                                        , new String[] {"java.lang.String"}
                                    );
                for(String mb : mba) {
                    System.out.println("Model Bean is: " + mb) ;
                    if(className.equals(mb)) {
                        System.out.println("Found a macth for the model bean and class name!") ;
                        userEditor = providerName;
                    }
                }
            }
        }
    }

    if(userEditor == null)
        throw new RuntimeException("Could not retrieve user editor");

    try {
        connection.invoke(userEditor
                    , "createUser"
                    , new Object[] {username, "password123","User created programmatically."}
                    , new String[] {"java.lang.String", "java.lang.String","java.lang.String"}
        );

        System.out.println("User created successfully") ;
    }
    catch(Exception e){
        e.printStackTrace();
    }

    connector.close();

}
catch(Exception ex) {
    ex.printStacktrace();
}
private void createWeblogicUser(字符串用户名){
试一试{
Hashtable env=新的Hashtable();
环境保护(Context.SECURITY_PRINCIPAL,“weblogic”);
环境保护(Context.SECURITY_凭证,“weblogic”);
字符串hostname=“myserver”;
int端口=7001;
字符串协议=“rmi”;
字符串url=新字符串(“/jndi/iiop://myserver:7001/weblogic.management.mbeanservers.domainruntime");
JMXServiceURL serviceURL=新的JMXServiceURL(协议、主机名、端口、url);
JMXConnector connector=JMXConnectorFactory.connect(serviceURL,env);
MBeanServerConnection=connector.getMBeanServerConnection();
ObjectName userEditor=null;
ObjectName mBeanTypeService=new ObjectName(“com.bea:Name=mBeanTypeService,Type=weblogic.management.mbeanservers.mBeanTypeService”);
ObjectName rs=new ObjectName(“com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceBean”);
ObjectName domainMBean=(ObjectName)connection.getAttribute(rs,“DomainConfiguration”);
ObjectName securityConfig=(ObjectName)connection.getAttribute(domainMBean,“SecurityConfiguration”);
ObjectName defaultRealm=(ObjectName)connection.getAttribute(securityConfig,“defaultRealm”);
ObjectName[]authProviders=(ObjectName[])connection.getAttribute(defaultRealm,“AuthenticationProviders”);
对于(ObjectName providerName:authProviders){
System.out.println(“身份验证提供程序为:“+providerName”);
if(userEditor==null){
ModelMBeanInfo=(ModelMBeanInfo)connection.getMBeanInfo(providerName);
String className=(String)info.getMBeandDescriptor().getFieldValue(“interfaceClassName”);
System.out.println(“类名为:”+className);
if(className!=null){
String[]mba=(String[])connection.invoke(mBeanTypeService
,“获取子类型”
,新对象[]{“weblogic.management.security.authentication.UserEditorMBean”}
,新字符串[]{“java.lang.String”}
);
for(字符串mb:mba){
System.out.println(“模型Bean为:+mb”);
if(className.equals(mb)){
println(“找到模型bean和类名的mach!”);
userEditor=providerName;
}
}
}
}
}
if(userEditor==null)
抛出新的RuntimeException(“无法检索用户编辑器”);
试一试{
调用(用户编辑器)
,“createUser”
,新对象[]{username,“password123”,“用户以编程方式创建。”}
,新字符串[]{“java.lang.String”、“java.lang.String”、“java.lang.String”}
);
private void createWeblogicUser(String username) {
try {
    Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.SECURITY_PRINCIPAL, "weblogic");
    env.put(Context.SECURITY_CREDENTIALS, "weblogic");

    String hostname = "myserver";
    int port = 7001;
    String protocol = "rmi";
    String url= new String("/jndi/iiop://myserver:7001/weblogic.management.mbeanservers.domainruntime");

    JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, url);
    JMXConnector connector = JMXConnectorFactory.connect(serviceURL, env);
    MBeanServerConnection connection = connector.getMBeanServerConnection();

    ObjectName userEditor = null;
    ObjectName mBeanTypeService = new ObjectName( "com.bea:Name=MBeanTypeService,Type=weblogic.management.mbeanservers.MBeanTypeService");
    ObjectName rs = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
    ObjectName domainMBean = (ObjectName) connection.getAttribute(rs, "DomainConfiguration");
    ObjectName securityConfig = (ObjectName) connection.getAttribute(domainMBean, "SecurityConfiguration");
    ObjectName defaultRealm = (ObjectName) connection.getAttribute(securityConfig, "DefaultRealm");
    ObjectName[] authProviders = (ObjectName[]) connection.getAttribute(defaultRealm, "AuthenticationProviders");

    for(ObjectName providerName : authProviders) {
        System.out.println("Auth provider is: " + providerName) ;

        if(userEditor == null) {
            ModelMBeanInfo info = (ModelMBeanInfo) connection.getMBeanInfo(providerName);
            String className = (String) info.getMBeanDescriptor().getFieldValue("interfaceClassName");
            System.out.println("className is: " + className) ;

            if(className != null) {
                String[] mba = (String[]) connection.invoke(mBeanTypeService
                                        , "getSubtypes"
                                        , new Object[] {"weblogic.management.security.authentication.UserEditorMBean"}
                                        , new String[] {"java.lang.String"}
                                    );
                for(String mb : mba) {
                    System.out.println("Model Bean is: " + mb) ;
                    if(className.equals(mb)) {
                        System.out.println("Found a macth for the model bean and class name!") ;
                        userEditor = providerName;
                    }
                }
            }
        }
    }

    if(userEditor == null)
        throw new RuntimeException("Could not retrieve user editor");

    try {
        connection.invoke(userEditor
                    , "createUser"
                    , new Object[] {username, "password123","User created programmatically."}
                    , new String[] {"java.lang.String", "java.lang.String","java.lang.String"}
        );

        System.out.println("User created successfully") ;
    }
    catch(Exception e){
        e.printStackTrace();
    }

    connector.close();

}
catch(Exception ex) {
    ex.printStacktrace();
}