Помогите С Чтением Стэка, Пож-та...

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

  1. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Доброго времени суток...

    Надо было нам сделать popup меню для лотуса на основе Java, из-за ее кроссплатформенности. Только Windows есть, но этого мало.
    Сделал класс на Java, все работает через Eclipse, вставил данный класс в лотус библиотеку, которую положил в базу.
    Сделал класс-прослойку на лотусе, который написан на LS с использываением обращений к Java, что и есть LS2J.
    Сделал кнопку во вьюшке, на которую повесил создание класса и вызов метода Show.

    Ошибка при нажатии на кнопку:
    Код (Java):
    at java.security.AccessController.checkPermission(AccessController.java:108)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:544)
    at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1449)
    at COM.ibm.JEmpower.applet.AppletSecurity.checkAWTPermission(AppletSecurity.java:1191)
    at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1605)
    at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
    at java.awt.MouseInfo.getPointerInfo(MouseInfo.java:73)
    at menu.Show(menu.java:144)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at lotus.domino.JavaConnectInvoker.invoke(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at lotus.domino.JavaConnectLoader.invoke(Unknown Source)
    Я так понимаю, что ошибка происходит при получении координат указателя мыши. У меня это в классе есть, из eclipsa работает, что полагаю совершенно нормально...
    по этой строке: at menu.Show(menu.java:144) вызывается:
    Код (Java):
    Point location = MouseInfo.getPointerInfo().getLocation();
    Как мне прописать "доверенность" этому методу для лотуса?
    И как мне правильно сделать вызов метода через LS2J? сейчас я использую Invoke, для предварительно полученного метода.
     
  2. Кирилл Шваб

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

    Регистрация:
    30 июн 2006
    Сообщения:
    144
    Симпатии:
    4
    Привет, тебе надо добавить разрешение на данный метод в java.policy.

    Ознакомься с этим:
    IBM Technote: Security exceptions are encountered when developing Java agents

    Если захочешь изучить более подробно, то почитай про модель безопасности в Java:
    Java - Security and Permissions


    Кстати, вопрос знатокам. В Лотусе есть два файла java.policy:

    1. {notes.home}\java.policy
    2. {notes.home}\jvm\lib\security\java.policy

    По идее тот, который в jvm\lib\security - это системный файл (а ля общие настройки), а который в корне лотусовой директории - пользовательские разрешения.

    Вопрос, загружаются ли по умолчанию пользовательские разрешения при старте клиента, или надо чтобы обязательно в командной строке (в свойствах ярлыка, запускающего клиент) было указано ...java.policy=${notes.home}/java.policy?
     
  3. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    как оно ругаецо так и...
    добавить в секцию grant
    java.awt.AWTPermission watchMousePointer
    где искать Кирилл Шваб ответил
     
  4. savl

    savl Lotus team
    Lotus team

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

    Кирилл Шваб:
    Судя из содержания файла 1. {notes.home}\java.policy там прописываются разрешения только для eclipse плагина, а все остальные прописаны в 2. {notes.home}\jvm\lib\security\java.policy. Предполагаю, что пользовательский файл не даст сильного эффекта, но я в этом деле новичок могу ошибаться.
     
  5. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Создание файла по пути, с содержанием как в java.policy + свои модификации, решает проблему разрешений.
    После апдейта не затирается, разворачивать гораздо удобнее на клиентах.
    ${user.home}/.java.policy
    Имя файла именно такое, с точкой вначале
     
  6. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    user.home - этож реальный профайл пользователя, нотусня туды смотрит?
     
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @lmike, проверил на 7-ке и MacOS.
    Как показала практика - смотрит, https://www-304.ibm.com/support/docview.wss?uid=swg21679242
    Кстати, знаю есть переменная в notes.ini для указания java классов пользователя.
    Если их так же развернуть в "профайл" и затем прописать в ini пути, то возможно тоже будет работать, но пока еще не проверял.
     
    2 пользователям это понравилось.
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @lmike, проверил
    Если в ${user.home}/ создать папку и положить туда jar, затем прописать в Notes.ini путь к этой папке, то все jar подгрузятся в лотус.
    Я делал так:
    сделал папку LotusJavaLibs, полный путь: ${user.home}/LotusJavaLibs
    Сделал 2 записи в notes.ini:
    XOM_JAR_DIR=C:\Users\dcs-alesh\LotusJavaLibs\xom-1.2.10.jar
    JavaUserClassesExt=XOM_JAR_DIR

    Перезагрузил клиента
    Библиотеки подтянулись.

    Почему я использовал JavaUserClassesExt вместо JavaUserClasses?
    Чтобы стандартный путь к \java\lib\ext не терялся

    Так же зачем писать отдельно путь к JAR?
    Потому что длина сроки в ini ограничена, а путем отдельных переменных можно писать сразу несколько пакетов:
    Пример:
    XOM_JAR_DIR=C:\Users\dcs-alesh\LotusJavaLibs\xom-1.2.10.jar
    JXL_JAR_DIR=C:\Users\dcs-alesh\LotusJavaLibs\jxl.jar
    JavaUserClassesExt=XOM_JAR_DIR; JXL_JAR_DIR
    На *nix разделитель будет : а не ;
    Минус использования JavaUserClassesExt : необходимо указывать путь и имя jar иначе не сработает (по крайней мере я не смог найти решение)
    С другой стороны очень удобно проверять версии пакетов.
    Еще минус такой конструкции: нельзя задать путь к профайлу через системную переменную:(
    на Win вот так не сработало: JXL_JAR_DIR=%UserProfile%\LotusJavaLibs\jxl.jar
    Что логично, платформа может быть разной...
    Надо указывать полный путь.
    Но, опять же, можно задать переменную в ini и так же её использовать. (простите не проверял, но думаю что работает)
    Итого:
    1. Можно разворачивать пакеты jar на клиентах, помещая их в папку в профайле пользователя.
    Доступ на запись в папку есть всегда.
    2. Можно менять разрешение для выполнения java кода, опять же создавая/копируя файл в профайл пользователя
    3. Можно отслеживать версии пакетов.
    4. Написать Java агент для развертывания очень просто.
    5. ...
    6. PROFIT!!!
     
  9. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    я этим давно пользовался, но указание jar меня коробит...

    и все-таки я склоняюсь к использование плагинов, но пока еще не занялся
     
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    У меня перестала работать эта настройка...
    Сначала свалил на FP4, который накатил поверх FP3
    Сейчас поставил чистый клиент - аналогично, не подтянулись библиотеки.
    Что происходит?
     
  11. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Еще фишка, поставил на чистого клиента FP4 - папку jvm снесло подчистую
     
  12. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Что-то где-то покривилось, такого быть не должно, JVM обновляется, но не удаляется совсем. Видать в процессе обновления JVM что-то сломалось. После FP4 Java становится 1.8.0_45.
     
  13. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @garrick,
    Со второго раза встал нормально.
    хм.. как проверить версию?
    я пока нашел только:
    java.fullversion=JRE 1.6.0 IBM J9 2.4 Windows 7 x86-32 jvmwi3260sr16fp4-20150406_242976 (JIT enabled, AOT enabled)
    J9VM - 20150406_242976
    JIT - r9_20150402_88984
    GC - GA24_Java6_SR16_20150406_1410_B242976

    java.vm.info=JRE 1.6.0 IBM J9 2.4 Windows 7 x86-32 jvmwi3260sr16fp4-20150406_242976 (JIT enabled, AOT enabled)
    J9VM - 20150406_242976
    JIT - r9_20150402_88984
    GC - GA24_Java6_SR16_20150406_1410_B242976

    java.runtime.version=pwi3260sr16fp4-20150414_01 (SR16 FP4)
    [DOUBLEPOST=1435142466,1435142444][/DOUBLEPOST]а настройка JavaUserClassesExt так и не заработала
     
  14. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Обманул. У меня на java -version не та Java отозвалась. :(
    Вот правильный вариант.

    Код (Text):
    java version "1.6.0"
    Java(TM) SE Runtime Environment (build pwi3260sr16fp4-20150414_01(SR16 FP4))
    IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Windows 7 x86-32 jvmwi3260sr16fp4-20150406_242976 (JIT enabled, AOT enabled)
    J9VM - 20150406_242976
    JIT - r9_20150402_88984
    GC - GA24_Java6_SR16_20150406_1410_B242976)
    JCL - 20150413_01
    Но так даже и лучше, а то ломай потом голову будет оно работать на 8.5 или нет.
     
  15. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Кто-нибудь может помочь по поводу JavaUserClassesExt и JavaUserClasses?
    У меня не работает ни одна из настроек.
    В чем может быть дело?
    [DOUBLEPOST=1435219190,1435219154][/DOUBLEPOST]Может я не один такой и это отключили?
     
  16. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    м.б. в доступе к нек. частям винды
    у виндядки нек каталоги не совсем каталоги ;), что может воспринимается не правильно сторонними приложениями
    причем они это ломают от версии винды (патчи)
    [DOUBLEPOST=1435228451,1435228350][/DOUBLEPOST]+ может оказаться что ини файл берется не тот, кот. правишь ;) (тоже из-за виндяткиных закидонов, с виртуалсторадж)
     
  17. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @lmike, ini тот, это проверил.
    на этот каталог есть доступ - могу туда писать и читать оттуда.
    Если менять на C:\Java\ тоже не фурычит... будто отключили настройку.
     
  18. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    пользователь - это не программа
    читать чере проводник - это не = читать и из программы

    а это уже странно
    может в java секурити что-то случилось?
    [DOUBLEPOST=1435236578,1435236506][/DOUBLEPOST]в консоле жвм есть что-то странное? кроме как не нашла класс...
    [DOUBLEPOST=1435236612][/DOUBLEPOST]ну и еще момент - если на др. компе и с др. версией нотусни?
    [DOUBLEPOST=1435236902][/DOUBLEPOST]
    это в рантайме не работает или и в сборке проекта? Может пересобрать?
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Итак и эдак, файлов не видит.
    Проверял через ProcessExplorer - библиотеки не загружены, хэндлов нет.

    в FP4 что-то включено было, но на чистом 901 тоже не заработала переменная.
     
  20. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
Загрузка...

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