Ресурсы jar-файла

Тема в разделе "Lotus + Java + LS2J", создана пользователем savl, 20 ноя 2012.

  1. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Добрый. Толком решения не нашел...
    Ситуация такая, есть LS агент (шедуль), внутри себя запускает java-агент (action list selection) через ag.run()
    Все бы хорошо, но выпадает вот такая ошибка.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Ошибка</div></div><div class="sp-body"><div class="sp-content">
    Exception in thread "AgentThread: JavaAgent"
    java.lang.NoClassDefFoundError: nu.xom.Verifier (initialization failure)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
    at nu.xom.Element._setLocalName(Unknown Source)
    at nu.xom.Element.<init>(Unknown Source)
    at nu.xom.Element.<init>(Unknown Source)
    at JavaAgent.NotesMain(Unknown Source)
    at lotus.domino.AgentBase.runNotes(Unknown Source)
    at lotus.domino.NotesThread.run(Unknown Source)
    Caused by:
    java.lang.RuntimeException: Broken XOM installation: could not load nu/xom/characters.dat
    at nu.xom.Verifier.loadFlags(Unknown Source)
    at nu.xom.Verifier.<clinit>(Unknown Source)
    at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
    ... 6 more
    Понимаю, что не может получить ресурс, вернее открыть в потоке. Потому что ресурс так таковой он находит, иначе была бы другая ошибка.
    Более того, если из Designer сделать Run, все отрабатывает без ошибок.
    Никто не сталкивался? Знаете как решить?
    Я подозреваю две вещи:
    1. Доп. настройки надо сделать.
    2. XOM-код переписать именно этот кусок.
     
  2. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    А где у вас это XOM лежит?
     
  3. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    на серванте, в папке ...\lib\ext
    В notes.ini прописаны пути, да и пакет он видит
     
  4. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Не в тему: ситуация конечно специфическая с обработкой больших файлов... но в других случаях я не вижу смысла из агента, крутящегося на сервере, запускать ещё один с помощью Run, runWithDocumentContext(ndParam) гораздо лучше.
    Для этого случая я бы тоже попробовал.
     
  5. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Не вариант, да и контекста нет. Вопрос почему не может получить файл ресурса...
     
  6. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    На какой-нибудь Permission в стек-трейсе не ругается? Попробуйте в java.policy в секции grant прописать permission java.security.AllPermission
     
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Прописано по умолчанию. И да, не ругается. Ищу дальше.
     
  8. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Вы сами прописали ранее? По умолчанию там нет такого гранта. Именно в сеции "grant", а не "grant CodeBase ..."
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    да, в самой секции grant такого не было, сейчас прописал, понаблюдаем...
    Все равно как-то странно, policy такая же как у меня на клиенте, ничем не отличается, разве что это строчкой теперь.
     
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    О, как... XML создан, теперь проблема вот в этом:
    Exception in thread "AgentThread: JavaAgent"
    error message: java.lang.NoClassDefFoundError: org.apache.commons.logging.LogFactory
    error message: at com.zehon.FileTransferClient.<clinit>(FileTransferClient.java:50)
    error message: at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
    at JavaAgent.NotesMain(Unknown Source)
    at lotus.domino.AgentBase.runNotes(Unknown Source)
    at lotus.domino.NotesThread.run(Unknown Source)

    Caused by:
    error message: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.lang.ClassNotFoundException.<init>(ClassNotFoundException.java:77)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:383)
    at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:269)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:652)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:618)


    Я так понял, что он нашел org.apache.commons.logging.LogFactory, но на клиенте работало...
    Если я правильно понял, то мне надо найти этот класс в jar и подключит на сервере, да?
     
  11. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Если доки нет, то да, - ругается на недостачу класса, - добросил пакет, пробуем, опять недостача? - опять добрасываем...
     
  12. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Это он хочет Appache Commons Logging
    Потом он ещё чего-нибудь попросит - ну, так и добавляй потихоньку, пока не угомонится.
     
  13. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Угу, так и подумал, все еще учусь читать стеки...
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Спасибо всем, передача удалась.
    Еще только один вопрос, в логе было вот такое сообщение:
    На передачу файлов это не повлияло, но стало интересно критично ли данное сообщение?
     
  15. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Ключевое слово INFO:. Это Apache Commons Logging "улучшенные" логи пишет. Оно как-то должно настраиваться писать ли всё подряд или только ошибки.
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Все ясно, всем спасибо, закрываем.
     
  17. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    ммм, все прекрасно работало, но началась проблема:
    Понимаю, что возможно ошибка в пакете, из-за инициализации схемы.
    Но в тоже время если сервер перезагрузить, то следующий запуск проходит без ошибки.
    Предположение: LN-JVM "держит" в памяти экземпляр или контейнер java кода (не знаю как назвать все это) и не выгружает правильно.
    Или я чего-то не дописал... Агент запускается раз в неделю, за ним почти не следим.
    Ребутить серв раз в неделю - тупо не хочется, да и не правильно это. Может кто подскажет?
    В коде ничего такого нет, так что выкладываю. Данный агент вызывается через LS агента, через Run. Может в этом дело?
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">java код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ResourceBundle;
    import java.util.Vector;

    import lotus.domino.*;
    import nu.xom.Attribute;
    import nu.xom.Document;
    import nu.xom.Element;
    import nu.xom.Serializer;

    import com.zehon.FileTransferStatus;
    import com.zehon.exception.FileTransferException;
    import com.zehon.sftp.SFTPClient;

    public class JavaAgent extends AgentBase {

    public String tempdir()
    {
    String tempdir = System.getProperty("java.io.tmpdir");
    if ( !(tempdir.endsWith("/") || tempdir.endsWith("\\")) )
    tempdir = tempdir + System.getProperty("file.separator");
    return tempdir;
    }

    public void NotesMain() {

    try
    {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();

    // (Your code goes here)
    boolean debug = false;
    if (debug) System.out.println("Start");

    ResourceBundle settingsRes = ResourceBundle.getBundle("Sett");
    String ExportFileName = settingsRes.getString("ExportFile");
    String[] srvList = settingsRes.getString("ServerList").split(",");

    File exportFile = new File(tempdir() + ExportFileName);
    boolean flag = false;

    // db = null;
    View vw = null;
    lotus.domino.Document doc = null;
    lotus.domino.Document tmpdoc = null;
    long cnt = 0;
    Element expRoot = new Element("ContactList");

    for(int i=0; i<srvList.length;i++)
    {
    if (debug) System.out.println(srvList);
    Database db = session.getDatabase(srvList.toString(), "names.nsf", false);//session.getCurrentDatabase();

    if (db != null && db.isOpen())
    {
    if (debug) System.out.println(db.getTitle());
    vw = db.getView("EmailUser");

    if (vw.getEntryCount() > 0)
    {
    doc = vw.getFirstDocument();
    while (doc != null)
    {
    //if (debug) System.out.println(doc.getFirstItem("MailFile").getValues().elementAt(0).toString());
    if (doc.getItemValueString("FirstName").length() != 0)
    {
    if (debug) System.out.println(doc.getItemValueString("FirstName"));
    Element child = new Element("Contact");

    Element tag = new Element("DisplayName");
    lotus.domino.Item docfields = doc.getFirstItem("FullName");
    Vector values = docfields.getValues();
    docfields.recycle();
    tag.appendChild(values.get(values.size()-1).toString());
    child.appendChild(tag);

    tag = new Element("LastName");
    tag.appendChild(doc.getItemValueString("LastName"));
    child.appendChild(tag);

    tag = new Element("GivenName");
    tag.appendChild(doc.getItemValueString("FirstName"));
    child.appendChild(tag);

    tag = new Element("Company");
    tag.appendChild(doc.getItemValueString("CompanyName"));
    child.appendChild(tag);

    tag = new Element("SMTPAddress");
    tag.appendChild(doc.getItemValueString("InternetAddress"));
    child.appendChild(tag);
    expRoot.appendChild(child);
    flag = true;
    ++cnt;
    if (debug) System.out.println("98");
    }
    if (debug) System.out.println("100");
    tmpdoc = vw.getNextDocument(doc);
    doc.recycle();
    doc = tmpdoc;
    if (debug) System.out.println("104");
    }
    }
    }
    vw.recycle();
    db.recycle();
    if (doc != null) doc.recycle();
    if (tmpdoc != null) tmpdoc.recycle();
    }

    if (flag)
    {
    Attribute count = new Attribute("Count",String.valueOf(cnt));
    expRoot.addAttribute(count);

    FileOutputStream ExportFile = new FileOutputStream(exportFile.getAbsoluteFile());
    Document expDoc = new Document(expRoot);
    try
    {
    Serializer serializer = new Serializer(ExportFile, "ISO-8859-1");
    serializer.setIndent(4);
    serializer.setMaxLength(64);
    serializer.write(expDoc);
    ExportFile.close();
    }
    catch (IOException ioEx)
    {
    ioEx.printStackTrace();
    }
    }

    String host = settingsRes.getString("host");
    String username = settingsRes.getString("username");
    String password = settingsRes.getString("password");
    String sftpFolder = settingsRes.getString("sftpFolder");
    String writeToLocalFolder = tempdir();
    String ImportFile = settingsRes.getString("ImportFile");

    SFTPClient SFTPObj = new SFTPClient(host, username,password);
    if (flag)
    {
    try
    {
    int status = SFTPObj.sendFile(tempdir() + ExportFileName, sftpFolder); //SFTPObj.getFile(ExportFile, "/", writeToLocalFolder);
    if(FileTransferStatus.SUCCESS == status){
    if (debug) System.out.println("Send");
    }
    else if(FileTransferStatus.FAILURE == status){
    if (debug) System.out.println("Can not sent sftp");
    }
    }
    catch(FileTransferException ex){
    ex.getCause().printStackTrace();
    }
    }

    try
    {
    int status = SFTPObj.getFile(ImportFile, sftpFolder, writeToLocalFolder);
    if(FileTransferStatus.SUCCESS == status){
    if (debug) System.out.println("Copy to " + writeToLocalFolder);
    }
    else if(FileTransferStatus.FAILURE == status)
    {
    if (debug) System.out.println("Can not copy from sftp");
    }
    }
    catch(FileTransferException ex)
    {
    ex.getCause().printStackTrace();
    }
    SFTPClient.closeCache();

    if (debug) System.out.println("Done");
    agentContext.recycle();
    session.recycle();
    System.gc();

    } catch(Exception e) {
    e.getCause().printStackTrace();
    }
    }
    }[/CODE]
     
  18. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    то что лежит в lib/ext и не должно выгружаться...
    я не понял насчет существования ResourceBundle settingsRes - оно вам для чего?
    так понимаю - управляете через настройки..., дык почемубы не хранить настройки в доке нотусов?!
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    да, настройки через файл Settings в агенте.
    Хранить в доке не хочется, даже профайл не хочется. Вот такая прихоть.
    Если понадобиться другую адресную книгу синхронизировать, то просто перекинем агента, а в нем все есть.
    Да, минус если измениться пароль и логин или адрес, но ничего сильно страшного.
    как все же сделать успешным - второй запуск?
     
  20. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    вот с этим объектом и морочтесь - как его дестроить ;)
     
Загрузка...

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