Как настроить JAVA_OPTS для работы AspectJ в Tomcat, работающем как служба на Windows Server?

Проблема

Мне нужно интегрировать код AspectJ в существующее приложение, работающее на Tomcat, но я думаю, что неправильно устанавливаю JAVA_OPTS.

Наш поставщик создал некоторый код AspectJ, который передает зарегистрированную информацию об идентификаторе пользователя объекту CONTEXT_INFO() в рамках подключения MSSQLServer. Это сделано для того, чтобы в созданном нами триггере базы данных аудита мы могли зафиксировать идентификатор пользователя, внесшего изменение.

Что я сделал

  1. Добавлен следующий код в триггер нашей базы данных

    ОБЪЯВИТЬ @appUserID INT

    SET @appUserID = ISNULL(REPLACE(CONVERT(VarChar(128), CONTEXT_INFO()),CHAR(0), ''), '0');

  2. Добавлен aspectjrt.jar в папку веб-приложения WEB-INF\lib.

  3. Добавлен vendorAspectJCode.jar в папку веб-приложения WEB-INF\lib.
  4. Добавлен aspectjweaver.jar в папку lib tomcat \tomcat7.0.27\lib.
  5. Отредактировано catalina.bat со следующим:

есть строка кода, которая выглядит так:

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%

я изменил это на

 set JAVA_OPTS=”%JAVA_OPTS% %LOGGING_CONFIG% -javaagent:D:\tomcat\tomcat7.0.27\lib\aspectjweaver.jar"

но, похоже, это не сработало.

Итак, я попытался настроить его так, добавив новый набор JAVA_OPTS:

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
set JAVA_OPTS="-javaagent:D:\tomcat\tomcat7.0.27\lib\aspectjweaver.jar"

но это тоже не помогло

После внесения следующих изменений и запуска теста через внешний интерфейс веб-приложения идентификатор пользователя, который был вставлен в базу данных, был 0, так что это говорит мне о том, что что-то было сделано неправильно, и часть, которая Я чувствую себя менее комфортно со всеми шагами выше, чем с шагом 5.

  1. Кто-нибудь знает, правильный ли синтаксис для установки JAVA_OPTS?
  2. или есть ли другое место, чтобы положить его?

person Viriato    schedule 04.06.2013    source источник


Ответы (1)


После долгих проб и ошибок я узнал, как интегрировать AspectJ в Tomcat, работающий как служба на сервере Windows. Я не знаю почему, но жирный шрифт был причиной моих проблем.

Конечно, как я уже упоминал в своем вопросе выше, вам нужны следующие предварительные условия:

  1. Добавьте aspectjrt.jar в папку веб-приложения WEB-INF\lib.
  2. Добавьте vendorAspectJCode.jar в папку веб-приложения WEB-INF\lib.
  3. Добавьте aspectjweaver.jar в папку lib tomcat \tomcat7.0.27\lib

Установка -javaagent:PathToMyAspectjweaver\aspectjweaver.jar в файле service.bat не работает. Поэтому мне пришлось установить его в реестре вместе с удалением/установкой службы Tomcat для получения изменений, выполнив следующие действия:

  1. Сначала я рекомендую отключить UAC и убедиться, что вы являетесь администратором.
  2. Остановите службу Tomcat, если она запущена.
  3. Удалите службу tomcat.
  4. Убедитесь в службах Windows, что этой службы больше нет.
  5. Убедитесь в реестре Windows, что все, что связано со службой, удалено. Если нет, сделайте это вручную.
  6. Установите службу Tomcat.
  7. Убедитесь в службах Windows, что служба была создана.
  8. Найдите службу в реестре и отредактируйте переменную Options, добавив следующее:

    -javaagent:PathToMyAspectjweaver\aspectjweaver.jar

Для этих шагов я создал пару bat-файлов. Шаги 2 и 3 будут выглядеть примерно так, как показано ниже (TomcatServiceUninstall.bat):

echo OFF
ECHO Removing Tomcat Service...
sc stop YourServiceName
sc delete YourServiceName
ECHO Removing Registry Key containing config data for Tomcat7
REG DELETE "HKLM\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\YourServiceName" /f
REG DELETE "HKLM\SOFTWARE\Wow6432Node\Apache Software Foundation\Tomcat\7.0" /f
ECHO Uninstall Complete - File Directories remain intact. 

Шаг 6 будет выглядеть следующим образом (TomcatServiceInstall.bat)

ECHO OFF
ECHO Running Service.bat to install the Tomcat 7 - YourServiceName - Service
cd "C:\Path to your tomcat\tomcat7.0.27\bin"
service.bat install
person Viriato    schedule 13.06.2013