jboss security
От: RobinHood  
Дата: 28.02.08 13:09
Оценка:
привет всем.
есть java слиент который должен подключаться к удаленному jboss jmx server и получать различную информацию используя технологию jmx.

      собственно ето код клиента который отвечает за подключение:
          org.jboss.jmx.adaptor.rmi.RMIAdaptor adaptor = null;
        Hashtable env = new Hashtable();
        String factory = "org.jboss.security.jndi.JndiLoginInitialContextFactory";
        env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
        String url = "jnp://"+host+":"+port;
        env.put(Context.PROVIDER_URL, url);
        env.put(Context.SECURITY_CREDENTIALS, username);
        env.put(Context.SECURITY_PRINCIPAL, password);
        Context ctx = new InitialContext(env); 
        
        
        Object obj = null;
        //String CLASS_NAME = "[" + JMXJbossConnectorHelper.class.getName() + "]";
        try {
            Context context = new InitialContext(env);
            obj = context.lookup("jmx/invoker/RMIAdaptor");
            adaptor = (org.jboss.jmx.adaptor.rmi.RMIAdaptor) PortableRemoteObject.narrow(obj, org.jboss.jmx.adaptor.rmi.RMIAdaptor.class);
        } catch (ClassCastException e) {
            if (obj != null) {
                Class _class = obj.getClass();
                System.out.println("_class.toString()-->"+_class.toString());
                Class[] interfaces = obj.getClass().getInterfaces();
                for (int i = 0; i < interfaces.length; i++) {
                    System.out.println("interfaces: "+interfaces.toString());
                }
            }
            e.printStackTrace();
        }



если я запускаю клиента из eclipse то все работает как часы.А когда етот клиент деплоится на jboss server то получаю странное исключение:



           java.lang.ClassCastException
     at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:229)
     at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
     at com.bmc.patrol.com_bmc.solutions.DRJAS.collectors.jboss4.JMXJbossConnectorHelper.getConnection(JMXJbossConnectorHelper.java:106)
     at com.bmc.patrol.com_bmc.solutions.DRJAS.collectors.jboss4.AvailabilityCollector.createTreeHead(AvailabilityCollector.java:449)
     at com.bmc.patrol.com_bmc.solutions.DRJAS.collectors.jboss4.AvailabilityCollector.discover(AvailabilityCollector.java:782)
     at com.bmc.patrol.com_bmc.solutions.DRJAS.lib.common.CollectorManagerRSMImpl.startDiscovery(CollectorManagerRSMImpl.java:291)
     at com.bmc.patrol.com_bmc.solutions.DRJAS.RootElementParamlet.doExecute(RootElementParamlet.java:261)
     at com.bmc.patrol.patsdk.paramlet.container.simple.SimpleParamletContainer.executeParamletBatchedJobs(SimpleParamletContainer.java:551)
     at com.bmc.patrol.patsdk.paramlet.container.simple.SimpleParamletContainer.executeJobs(SimpleParamletContainer.java:473)
     at com.bmc.patrol.patsdk.services.CollectionJob.executeParamletJobs(CollectionJob.java:1898)
     at com.bmc.patrol.patsdk.services.CollectionJob.doApplicationCollection(CollectionJob.java:439)
     at com.bmc.patrol.patsdk.services.CollectionJob.execute(CollectionJob.java:226)
     at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
     at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
 Caused by: java.lang.ClassCastException: $Proxy43 cannot be cast to org.omg.CORBA.Object
     at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:212)
     ... 13 more


как быть ? куда копать?


да вот еще что:


              
           SecurityAssociation.setServer();
              if( username != null )
                {
                  SecurityAssociation.setPrincipal( new SimplePrincipal( username ) );
                }

              if( password != null )
                {
                  SecurityAssociation.setCredential( password.toCharArray() );
                }

        org.jboss.jmx.adaptor.rmi.RMIAdaptor adaptor = null;
        
          Hashtable<String, String> env = new Hashtable<String, String>();
          env.put( Context.INITIAL_CONTEXT_FACTORY, JBOSS_CONTEXT_FACTORY );
          env.put( Context.URL_PKG_PREFIXES, JBOSS_URL_PKG_PREFIXES );
          env.put( Context.PROVIDER_URL, host + ":" + port );
          // Disable Discovery
          env.put( NamingContext.JNP_DISABLE_DISCOVERY, "true" );
          // Socket timeout, set to one minute.
          env.put( TimedSocketFactory.JNP_SO_TIMEOUT, "60000" );
          // Initial connect timeout, set to one minute.
          env.put( TimedSocketFactory.JNP_TIMEOUT, "60000" );
        Object obj = null;
        //String CLASS_NAME = "[" + JMXJbossConnectorHelper.class.getName() + "]";
        try {
            Context context = new InitialContext(env);
            obj = context.lookup("jmx/invoker/RMIAdaptor");
            adaptor = (RMIAdaptor) PortableRemoteObject.narrow(obj, org.jboss.jmx.adaptor.rmi.RMIAdaptor.class);
        } catch (ClassCastException e) {
            if (obj != null) {
                Class[] interfaces = obj.getClass().getInterfaces();
                for (int i = 0; i < interfaces.length; i++) {
                }
            }
            e.printStackTrace();
        }


в чем особенность использования выделеного кода? я не нашел подробной документации что именно он делает :
и в чем отличее от предыдушего варианта?просто етот вариант работает не стабильно с периодическими исключениями и поетому я опасаюсь его использовать в конечном продукте.
      SecurityAssociation.setServer();
              if( username != null )
                {
                  SecurityAssociation.setPrincipal( new SimplePrincipal( username ) );
                }

              if( password != null )
                {
                  SecurityAssociation.setCredential( password.toCharArray() );
                }


заранее спасибо.
Re: jboss security
От: Cyberax Марс  
Дата: 28.02.08 13:31
Оценка: 2 (1)
Здравствуйте, RobinHood, Вы писали:

RH> если я запускаю клиента из eclipse то все работает как часы.А когда етот клиент деплоится на jboss server то получаю странное исключение:

У тебя, похоже, проблема с classloader'ами. Скорее всего, в твоём приложении есть jar-файл с классами, которые уже есть в JBoss'е.
Sapienti sat!
Re[2]: jboss security
От: RobinHood  
Дата: 28.02.08 13:43
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, RobinHood, Вы писали:


RH>> если я запускаю клиента из eclipse то все работает как часы.А когда етот клиент деплоится на jboss server то получаю странное исключение:

C>У тебя, похоже, проблема с classloader'ами. Скорее всего, в твоём приложении есть jar-файл с классами, которые уже есть в JBoss'е.

В приложении точно нету , в нем только классы и сторонних библиотек нету.
А вот на счет класслоадеров можно поподробнее?
Как данное исключение может быть связано с класслоадерами и как я могу проверить что откуда загружается?

Спасибо.
Re[3]: jboss security
От: Cyberax Марс  
Дата: 28.02.08 14:27
Оценка: 3 (1)
Здравствуйте, RobinHood, Вы писали:

C>>У тебя, похоже, проблема с classloader'ами. Скорее всего, в твоём приложении есть jar-файл с классами, которые уже есть в JBoss'е.

RH> В приложении точно нету , в нем только классы и сторонних библиотек нету.
RH>А вот на счет класслоадеров можно поподробнее?
RH>Как данное исключение может быть связано с класслоадерами и как я могу проверить что откуда загружается?
Класслоадеры образуют дерево. Вполне возможна ситуация, когда класс может быть загружен дважды в разных ветках. Для JVM это будут два разных класса. Так что такое исключение возникает, если класс, загруженый в одной ветке дерева, передают в другую ветку дерева.

У тебя почти точно на 100% именно оно. Скорее всего, нужно выделить общие классы для приложения и сервера и положить в разделяемый classloader.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.