Подключение внешних Java-библиотек

Тема в разделе "Lotus + Java + LS2J", создана пользователем dimat, 14 апр 2010.

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Хочу сказать что на яве я никогда ничего не писал и в связи с этим есть вопрос:
    Вот скачал я один из примеров и что дальше с ним делать?
    там куча папок файлов
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    dimat
    пример может быть оформлен по-разному
    в виде набора классов запакованных в jar (готовая библиотека)
    в виде кода - каждый класс в своем файле
    вариант первый - кладём либу в jvm/lib/ext
    вариант второй - импортим код в агент
     
  3. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Подсел я тут немного на твиттер, хочу синтегрировать с одной лотусной базой.
    Будет твиттить униды документов ;)
    Шутка.

    Скачал я такую библиотеку:
    http://www.winterwell.com/software/jtwitter.php

    С экземплами, вроде всё красиво.
    Помятуя слова lmike кинул jar в <NOTES>\jvm\lib\ext\
    И всё, дальше затык.
    Даже к агенту подключить не могу.

    Пока есть запал, помогите плз, что я делаю не так.
    Спасибо заранее, камрады!
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    В начале агента есть строка "import winterwell.jtwitter;"?
     
  5. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Во!
    Скомпилилось!
    Только
    Код (Text):
    import winterwell.jtwitter.*
    я написал.

    Как я понял, "winterwell.jtwitter" это путь к классам внутри jar'a?

    Я в джаве - ноль.
    Надо учить.
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    угу
    это путь разделённый точками (как каталоги слэшами)
    звезда заменяет название конкретных классов в пути
    открой jar (это zip) и сам увидишь
     
  7. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Значит
    Код (Text):
    import winterwell.jtwitter.*;
    сделал

    Теперь пытаюсь объявить новый обьект
    Код (Text):
    Twitter twitter = new Twitter("my-name","my-password");
    .
    Получаю ошибку
    Код (Text):
    cannot access winterwell.jtwitter.Twitter
    Пошто?

    В jar уже поковырялся.
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    По ссылке есть исходник библиотеки, в нём первая строка "package winterwell.jtwitter;" — указывает, в каком пакете лежат классы.
    Разумеется, нужно добавлять звёздочку, это я в попыхах упустил. Ну или можно явно указывать импортируемые классы, т.е. можно вместо
    <!--shcode--><pre><code class='Java'>import java.util.*;[/CODE]указать
    <!--shcode--><pre><code class='Java'>import java.util.ArrayList;
    import java.util.Arrays;[/CODE]
    или явно указывать пакет при объявлении переменных:
    <!--shcode--><pre><code class='Java'>java.util.ArrayList myArray;[/CODE]
     
  9. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    ты для какой версии jvm взял jar (в манифесте смори)
    и под какой jvm пущаешь...
    она те грит версия класса новее - чем поддерж.

    исходники у них под LGPL могешь сам пересобрать...
    у них лежит готовый класс (для остальных есть исходники) BuildJTwitter.class
    тока вот не знаю его версию
    в любом раскладе - можно исходники втянуть в проект нетбинса или эклипса и пересобрать с нужной версией жвм

    Добавлено:
    засада с этой библой
    там женерики и аннотации, т.е. минимально - 1.5 джава
    либо код править
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Уже замучился копать.. никак не получается подключить java-класс. Получаю ошибку:
    Куда только jar-файл не кидал. :)
    Может есть возможность загрузить класс динамически? На лету.

    Вот нашел это... правда не разобрался как работать дальше :(
    Класс вроде как подгружается но получаю все ту же ошибку :(
     
  12. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    512
    Симпатии:
    13
    сторонние jar'ки нужно класть в %notes%\jvm\lib\ext\.
    после этого нужна перезагрузка клиента.
     
  13. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ложили :)
    но сдается мне не перегружали :(
    А с динамической загрузкой ничего решить нельзя?
    Забыл уточнить - речь идет о Solaris
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    вероятно можно - если свой класслоадер писать по типу http://turumbay.wordpress.com/2011/05/03/l...-notes-session/

    Добавлено: но сдаётся мне что в большинстве случаев, правильнее - смириться :)
     
  15. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    надо смотреть весь стектрейс
    java.lang.NoClassDefFoundError не обязательно значит что класс не найден, часто этот эксептион означает, что класс был найден, но ициализовать его не получилось
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Добрый, правда уже сомнительно...
    Замаялся я уже... Не могу подключить в Лотус jar-файлы.
    В {home}\jvm\lib\ext\ файлы кинул, писал в notes.ini JavaUserClasses, перезагружал комп (база на локале)
    Но не видит и все...
    Задача написать агента, из-за библиотек, которые открывают свои потоки не могу вставить их в тело агента, агент по завершению не закрывает нормально их. Надо вот вынести...

    Если в агенте сделать в JavaAgent.java "Project->Proteries->Libraries, Add External JAR", то ошибка исчезает. НО ровно до закрытия JavaAgent.java, как только закрыл уже есть ошибка. Прошу помощи, никогда такого не делал...

    UPD: сделал, почему получилось не сразу не знаю...

    в Notes.ini клиента:
    JavaUserClasses=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\
    JavaUserClassesExt=commonsnet,commonsvfs,zehon,jsch
    commonsnet=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\commons-net-2.0.jar
    commonsvfs=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\commons-vfs-2.0.jar
    zehon=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\zehon_file_transfer-1.1.6.jar
    jsch=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\jsch-0.1.41.jar
     
  17. Кирилл Шваб

    Кирилл Шваб Well-Known Member

    Регистрация:
    30 июн 2006
    Сообщения:
    143
    Симпатии:
    4
    savl,

    по идее если jar библиотеки кладутся в jvm\lib\ext, то достаточно только выложить файлы туда и перезапустить клиент/сервер, чтобы JVM подхватила нужные библиотеки.

    А JavaUserClasses и JavaUserClassesExt в notes.ini заполняют, когда библиотеки хранятся в какой-то другой директории.
     
  18. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    У меня точно также, но до закрытия, когда код нормальный, оно ж компилит, и потом работает, хотя и ошибка светится.

    to All
    Это всегда так или может можно как-то правильно закрыть?
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    VladSh
    Как почитал - всегда. Когда сторонний jar открывает свои нити лотусовый java поток не может их нормально закрыть и выгрузить из памяти эти jar. Идет ошибка "Error cleaning up agent threads". Единственный вариант - положить их в папку и прописать, чтобы клиент/сервер их видел.
    А вот компиляция до закрытия меня просто не устраивает, сегодня помню что все хорошо, а через месяц могу и забыть... Буду ошибку искать.
    Не каждый jar открывает потоки, тот же iText я встраивал в тело агента, но сейчас работал с SFTP. Вот при создании канала идет свой поток.
    UPD: Можно обойти, если самому выгружать jar из памяти... Я пока не знаю как.

    Кирилл Шваб
    Вот как бы да, но в то же время нет. У меня клиент 8.5.3 может это его фича, но пока не прописал в ini ничего не находил, да и после того как прописал перезапустил лотус пару раз.
     
Загрузка...

Поделиться этой страницей