1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

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

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

Наш партнер Genesis Hackspace
  1. dimat

    dimat Well-Known Member
    Lotus team

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

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

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

    Omh Well-Known Member
    Lotus team

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

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

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

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

    nvyush Well-Known Member
    Lotus team

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

    Omh Well-Known Member
    Lotus team

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

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

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

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

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

    Omh Well-Known Member
    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 Well-Known Member
    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 Well-Known Member
    Lotus team

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Kmet Well-Known Member
    Java Team

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

    savl Well-Known Member
    Команда форума Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.103
    Симпатии:
    155
    Добрый, правда уже сомнительно...
    Замаялся я уже... Не могу подключить в Лотус 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
    Сообщения:
    145
    Симпатии:
    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 Well-Known Member
    Команда форума Lotus team

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

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

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