понедельник, 27 октября 2008 г.

Тормоза ie

Нужда заставит дык.. В общем накатал на днях java-скриптик для дерева.. Поразили тормоза в ie.
Стало интересно в чём дело. Оказалось, что тормозит поиск по идентификатору. Цикл поиска по 800 элементам работал около 3 секунд.
Ещё интересен процесс отображения. Под ie пока не выпонится onload - страница не выводится.

Ну и напоследок, javascript произвёл приятное впечатление, много информации в инете, правда качество не радует. Также язык довольно легко воспринимается. Единственно, вначале тяжеловато с объектной моделью. Не порадовало, что пришлось-таки писать кусочек для определения браузера.

среда, 17 сентября 2008 г.

JMX. Чтение атрибутов Mbean. OC4J.

Допустим, у нас есть приложение, которое сорит в JMX. В данном случае, создаёт атрибуты. Из другого приложения нам надо этот атрибут прочитать.Повозился не мало, и как всегда начал не от туда, однако вот что вышло. Недостатком можно назвать то, что приходится задавать пароль администратора сервера приложений, но это уже часности. Главное принцип, я думаю, прост и его легко можно применить не только к атрибутам.

Код приложения с коментариями, думаю их будет достаточно:

try {
    // 1. Создаём сервис:
    String address = "service:jmx:rmi://localhost:23791";
    JMXServiceURL serviceURL = new JMXServiceURL(address);

    // 2. Параметры подключения для создания коннектора:
    Hashtable credentials = new Hashtable();
    credentials.put("login", "oc4jadmin");
    credentials.put("password", "***");
    Hashtable environment = new Hashtable();
    environment.put(
        JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "oracle.oc4j.admin.jmx.remote");
    environment.put(JMXConnector.CREDENTIALS, credentials);

    // 3. Создаём коннектор и получаем конкретный коннект в JMX
    JMXConnector jmxConnector =
        JMXConnectorFactory.connect(serviceURL, environment);
    MBeanServerConnection mBeanConnection =
        jmxConnector.getMBeanServerConnection();

    // 4. Задаём имя интересующего Mbean
    // * - означают любой параметр, причём первая — это имя домена,
    // а последняя, то что другие параметры нас не интересуют
    ObjectName exampleServiceName =
        new ObjectName("*:name=MBeanName,*");
    // Получение множества MBean по имени, соответствующим нашему запросу
    Setmbeans = (Set)jmxConnector.
            getMBeanServerConnection().queryNames(exampleServiceName, null);
    // Теперь перемещаемя по всем, подходящим для нас «бинам»
    for(ObjectName mbean: mbeans) {
        // Так можно получить полное имя
        log.debug("MBean="+mbean.getCanonicalName());
        // Получаем атрибут «бина» - объект, который хранится в атрибуте,
        // т.е. тут мы и получили значение атрибута
        Object o = jmxConnector.getMBeanServerConnection().
                getAttribute(mbean, "RunArray");
                log.debug("MBean attribute class="+o.getClass());
        }
} catch (Exception e) {
    // Тут я просто отлавливаю все исключения для удобства в 1 месте
    log.warn(e, e);
}
}