获取UnSupported Protocol:使用JMX

时间:2017-01-23 09:07:06

标签: java plsql weblogic

我使用pl / sql为weblogic用户创建开发了java代码。

代码是:

  CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "NewUserCreation31" AS
   import javax.management.ObjectName;
   import javax.management.modelmbean.ModelMBeanInfo;
   import java.util.Locale;
   import java.util.Hashtable; 
   import javax.naming.Context;
   import javax.management.MBeanServerConnection;
   import javax.management.remote.JMXServiceURL;
   import javax.management.remote.JMXConnector;
   import javax.management.remote.JMXConnectorFactory;
   import java.sql.Connection;
   import java.sql.DriverManager;
   import java.sql.Statement;
   import java.sql.ResultSet;

  public class NewUserCreation31

  {
private static ObjectName defaultAuthenticator;
private static String authenticatorName="DefaultAuthenticator";
public static String username=null;
public static String password=null;
public static String user_role=null;
public static String retVal="exception";
public static String createWeblogicUser()
{
    try {
        Hashtable<String, String> env = new Hashtable<String, String>();
       // Connection conn = null;
        String url1 = "jdbc:oracle:thin:@191.169.151.13:1521:SER140";
        String driver = "oracle.jdbc.driver.OracleDriver";
        String userNm = "user1";
        String psword = "password1";
        Statement stmt=null;
        String query=" select user_id,enc_dec.decrypt(passwd) pwd,user_priv from user_data";
        try
        {
        retVal= "return 1";

            username="uname1";
            password="pwd123";
            user_role="A";

            retVal= "return all";
            String user_grp =
            (user_role.equals("A")) ? "A" :
            (user_role.equals("P")) ? "P" :
            (user_role.equals("PA")) ? "PA" :
            (user_role.equals("R")) ? "R" :
            (user_role.equals("RA")) ? "RA" :
            (user_role.equals("RP")) ? "RP" : (user_role.equals("RPA")) ? "RPA" : "U";
          retVal= "return user_role";
            env.put(Context.SECURITY_PRINCIPAL, "weblogic");
            env.put(Context.SECURITY_CREDENTIALS, "weblogic123");

       retVal= "return env";
            String hostname ="192.168.161.17";
       retVal= hostname;
            int port = Integer.parseInt("8001");
       retVal= "port";
            String protocol = "rmi";
       retVal= protocol;
            String url = new String("/jndi/weblogic.management.mbeanservers.runtime");
       retVal= url;
            JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, url);
       retVal= serviceURL.toString();
            JMXConnector connector =        JMXConnectorFactory.connect(serviceURL, env);
    retVal="connector";
            MBeanServerConnection connection = connector.getMBeanServerConnection();
    retVal="MBeanServerConnection";
            ObjectName userEditor = null;
            ObjectName mBeanTypeService =
                new ObjectName("com.bea:Name=MBeanTypeService,Type=weblogic.management.mbeanservers.MBeanTypeService");
      retVal="mBeanTypeService";
            ObjectName rs1 =
                new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
            retVal="rs1";
    ObjectName domainMBean = (ObjectName) connection.getAttribute(rs1, "DomainConfiguration");
            retVal="domainMBean";
    ObjectName securityConfig = (ObjectName) connection.getAttribute(domainMBean, "SecurityConfiguration");
            retVal="securityConfig";
    ObjectName defaultRealm = (ObjectName) connection.getAttribute(securityConfig, "DefaultRealm");
            retVal="defaultRealm";
    ObjectName[] authProviders =
                (ObjectName[]) connection.getAttribute(defaultRealm, "AuthenticationProviders");
    retVal="authProviders";
                for (ObjectName providerName : authProviders) {

                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 match for the model bean and class name!");
                                userEditor = providerName;
                            }
                        }
                    }
                }
            }
            if (userEditor == null)
                throw new RuntimeException("Could not retrieve user editor");
           try {
                for (int i = 0; i < authProviders.length; i++) {
                                String name =
                                    (String)connection.getAttribute(authProviders[i],
                                                                    "Name");
                      System.out.println("name " + name);
                                if (name.equals(authenticatorName))
                                    defaultAuthenticator = authProviders[i];
                            }
                            boolean userExists =
                            ((Boolean)connection.invoke(defaultAuthenticator, "userExists",
                                                        new Object[] { username },
                                                        new String[] { "java.lang.String" })).booleanValue();
           System.out.println("userExists" + userExists);
            if(userExists)
            {
            return "User Already exists";    
            }
            else if(!(userExists))
            {
            connection.invoke(userEditor, "createUser", new Object[] {
                              username, password, "User created by LPM admin." }, new String[] {
                              "java.lang.String", "java.lang.String", "java.lang.String"
            });

            connection.invoke(userEditor, "addMemberToGroup", new Object[] { user_grp, username }, new String[] {
                              "java.lang.String", "java.lang.String"
            });
            connection.invoke(userEditor, "addMemberToGroup", new Object[] { "Administrators", username }, new String[] {
                              "java.lang.String", "java.lang.String"
            });

            System.out.println("User created successfully");
            }
              connector.close();
        }

         catch (Exception ex) {
            ex.printStackTrace();
            return "Error";
              }

       // }
       // conn.close();
        System.out.println("Disconnected from database");
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    }
    catch(Exception e3)
    {
    e3.printStackTrace();
    return "Error";
    }
   return retVal;
   }
   };

/

这里我将在行

处获得异常
      JMXConnectorFactory.connect() as Unsupported protocol : rmi.

如果我将协议更改为t3,那么它将通过

      Unsupported protocol : t3

我已直接通过java运行代码。这是工作。但每当我尝试通过pl / sql调用它时,我都会得到提到的异常。

请建议我这个。有没有其他方法来创建weblogic用户。 我需要从我的数据库中的一个表创建weblogic用户:user_data。

是否可以通过PL / SQL创建weblogic用户?我可以在某个时间间隔内从weblogic服务器调用我的java类吗?请在此建议。

0 个答案:

没有答案