У меня есть Lotus Notes база данных, которая выполняет некоторое взаимодействие с удаленным веб-сервисом.Я написал собственный класс Java для выполнения взаимодействия.
Методы класса могут выполняться из одного из трех мест в зависимости от настроек пользователя:
- В библиотеке сценариев Javaвызывается через Java-агент Lotus Notes
- В файле JAR, расположенном в пользовательском каталоге "jvm / lib / ext"
- В файле JAR, расположенном в пользовательском каталоге внутри пользовательского каталога "jvm /"каталог lib "(например," jvm / lib / custom_dir ").Lotus Notes JVM знает о пользовательском каталоге через использование локальной переменной notes.ini "JavaUserClassesExt".
В моем классе я просто хотел бы иметь возможность вернуть местоположение, в котором находится текущий класс.выполняется из.Так что, если он выполняется из опции 2 или 3, верните путь к файлу JAR.Если он выполняется из опции 1, верните что-то еще, что я могу обработать.
Я пробовал следующее.
Метод getProtectionDomain ()
getClass().getProtectionDomain().getCodeSource().getLocation()
Что приводит к:
java.security.AccessControlException: Access denied (java.lang.RuntimePermission getProtectionDomain)
Невозможно изменить какие-либо параметры безопасности на клиентах, работающих под этим.
Метод Class.getResource
String myName = "/" + getClass().getName().replace('.', '/') + ".class";
URL myResourceURL = getClass().getResource(myName);
Результат: myResourceURL ВСЕГДА равен нулю.
Метод ClassLoader.getResource
String myName2 = getClass().getName().replace('.', '/') + ".class";
ClassLoader myCL = getClass().getClassLoader();
URL myResourceURL2 = myCL.getResource(myName);
Результат: myResourceURL2 ВСЕГДА равен нулю.
a) Где я?идет не так, как надо?
и
b) как получить местоположение выполняемого в данный момент класса, используя другой метод?