title: Creating WebLogic users programmatically from a standalone Java client
body: <p>I'm trying to create users in WebLogic (10.3.4) programmatically from a simple standalone Java client (one class --> two methods: createWeblogicUser() &amp; main()).</p>
  
  <pre><code>public void createWeblogicUser() {
  try {
      Hashtable&lt;String, String&gt; env = new Hashtable&lt;String, String&gt;();
      env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
      env.put(Context.SECURITY_PRINCIPAL, "weblogic");
      env.put(Context.SECURITY_CREDENTIALS, "weblogic");
      env.put(Context.PROVIDER_URL, "t3://myserver:7001");
  
      InitialContext ctx = new 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 = new ObjectName("com.bea:Name=RuntimeService, Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
      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");
  
      for(ObjectName providerName : authProviders) {
          if(userEditor == null) {
              ModelMBeanInfo info = (ModelMBeanInfo) wls.getMBeanInfo(providerName);
              String className = (String) info.getMBeanDescriptor().getFieldValue("interfaceClassName");
              if(className != null) {
                  String[] mba = (String[]) wls.invoke(mBeanTypeService
                                                      , "getSubtypes"
                                                      , new Object[] {"weblogic.management.security.authentication.UserEditorMBean"}
                                                      , new String[] {"java.lang.String"}
                                              );
                  for(String mb : mba) {
                      if(className.equals(mb))
                          userEditor = providerName;
                  }
              }
          }
  
          if(userEditor == null)
              throw new RuntimeException("Could not retrieve user editor");
  
          try {
              wls.invoke(userEditor
                          , "createUser"
                          , new Object[] {"wls_user", "password123","User created programmatically."}
                          , new String[] {"java.lang.String", "java.lang.String","java.lang.String"}
              );
          }
          catch(Exception e){
              e.printStackTrace();
          }
  
          ctx.close();
      }
  }
  catch(Exception ex) {
      ex.printStackTrace();
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Any ideas on what the context lookup I should be making? "java:comp" throws a javax.naming.NameNotFoundException; looks like I can use that only from w/in a container.</p>