Пользовательские аргументы для установки в Weblogic JVM

Мне нужно установить пользовательское свойство для каждого сервера JVM в Weblogic. Каков наилучший подход к этому?

Я знаю, что мы можем указать аргументы, как показано ниже:

  1. На панели Структура домена разверните узел Серверы.
  2. Щелкните имя сервера, который вы хотите настроить.
  3. На правой панели щелкните Запуск сервера.
  4. Выберите Блокировка и редактирование.
  5. В текстовом поле «Аргументы» укажите параметры JVM. Вставив параметры, нажмите Сохранить. Затем нажмите «Активировать изменения».
  6. Перезапустите сервер, чтобы использовались новые настройки.

Мой вопрос в том, как именно определяется аргумент? Как использовать этот аргумент внутри приложения, которое будет развернуто внутри этой JVM.

Изменить

Если я укажу -DMyArg=MyValue и в коде value=System.getproperty("MyValue"); это должно работать, верно?


person priceline    schedule 16.11.2011    source источник
comment
Чтобы использовать WLST для добавления аргументов запуска сервера, проверьте мой ответ ">здесь   -  person Mani    schedule 28.09.2012


Ответы (6)


Изменить: если я укажу "-DMyArg=MyValue" и в коде value=System.getproperty("MyValue"); это должно работать, верно?

Небольшая ошибка, вы должны использовать

value=System.getProperty("MyArg");

Однако это работает только с включенным NodeManager. Если это не так, я устанавливаю его в startWeblogic.cmd как один из параметров Java_Options.

Еще лучше setDomainEnv.cmd, в котором есть строки для

set EXTRA_JAVA_PROPERTIES=...
person JoseK    schedule 17.11.2011
comment
Но setDomainEnv.cmd говорит прямо вверху: # ПРЕДУПРЕЖДЕНИЕ: Этот файл создается Мастером настройки. # Любые изменения в этом скрипте могут быть потеряны при добавлении расширений в эту конфигурацию. - person David Balažic; 12.11.2013
comment
я также меняю setDomainEnv.cmd и обеспокоен #WARNING - изменение JAVA_OPTIONS из другого скрипта, возможно, имело бы лучший смысл, но таким образом мне пришлось бы самому контролировать запуск и остановку weblogic - изменение setDomainEnv удобно подключается к умолчанию запустить/остановить процесс.... - person hello_earth; 22.10.2018

В разделе редактирования каталога bin setDomainEnv.sh найдите следующую строку:

Если USER_MEM_ARGS установлена ​​переменная среды, используйте ее для переопределения ALL MEM_ARGS добавьте строки ниже и соответствующим образом измените значения

Для сервера администратора

`if [ "${SERVER_NAME}" = "AdminServer" ] ; then
USER_MEM_ARGS="-Xms256m -Xmx256m -XX:MaxPermSize=256m"
MEM_ARGS="${USER_MEM_ARGS}"
export MEM_ARGS
fi`

Для управляемого сервера

`if [ "${SERVER_NAME}" != "AdminServer" ] ; then
USER_MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"
MEM_ARGS="${USER_MEM_ARGS}"
export MEM_ARGS
fi`
person Deep    schedule 21.10.2015

Если вам нужно "настраиваемое свойство для установки для каждого сервера JVM в weblogic", то использования startWeblogic.cmd или setDomainEnv.cmd будет недостаточно, так как они будут устанавливать одно и то же значение для всех ваших серверы.

Если NodeManager не включен, вы можете вручную отредактировать файл config.xml и добавить/отредактировать элемент <arguments> под элементом <server-start> для каждого сервера.

Но это не рекомендуется (см. здесь: http://docs.oracle.com/cd/E23943_01/web.1111/e13716/config_files.htm). Гораздо лучше положиться на NodeManger и использовать описанную вами процедуру.

В остальном приведенный выше ответ value=System.getProperty("MyArg"); верен.

person talya.gendler    schedule 28.09.2012

Обычно я создаю простые сценарии вызова для каждого управляемого сервера в DOMAIN_HOME, которые, в свою очередь, вызывают общие сценарии запуска в каталоге /bin, подобные тому, который WebLogic автоматически создает для сервера администрирования. Я знаю, что вы можете переопределить аргументы памяти таким образом, и я уверен, что вы можете изменить JVM.

Вот пример проверенного скрипта для Windows:

cd bin
SET USER_MEM_ARGS=-Xms512m -Xmx512m
startManagedWebLogic.cmd new_ManagedServer_1 localhost:7001

который, я думаю, в UNIX будет примерно таким (извините, я мало знаю о сценариях bash):

cd bin
export USER_MEM_ARGS="-Xms512m -Xmx512m"
./startManagedWebLogic.sh new_ManagedServer_1 localhost:7001

Я думаю, что для изменения JVM это будет что-то вроде:

export JAVA_VENDOR="Oracle"
export USER_MEM_ARGS="-Xms512m –Xmx1g"
./startWebLogic.sh

Было бы интересно услышать чьи-нибудь отзывы по этому поводу. Надеюсь, это поможет кому-то. . .

person Edward_Hughes    schedule 10.11.2013

Вы можете сделать это, изменив следующий файл C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\startWebLogic.cmd

в моем случае это домен base_domain.

найдите следующую строку и отредактируйте.

@REM JAVA_OPTIONS   - Java command-line options for running the server. (These
set "JAVA_OPTIONS=%JAVA_OPTIONS% -DyourVariable=value"

Пример

@ECHO OFF

@REM WARNING: This file is created by the Configuration Wizard.
@REM Any changes to this script may be lost when adding extensions to this configuration.

SETLOCAL

@REM --- Start Functions ---

GOTO :ENDFUNCTIONS

:stopAll
    @REM We separate the stop commands into a function so we are able to use the trap command in Unix (calling a function) to stop these services
    if NOT "X%ALREADY_STOPPED%"=="X" (
        exit /b
    )
    @REM STOP DERBY (only if we started it)
    if "%DERBY_FLAG%"=="true" (
        echo Stopping Derby server...
        call "%WL_HOME%\common\derby\bin\stopNetworkServer.cmd"  >"%DOMAIN_HOME%\derbyShutdown.log" 2>&1 

        echo Derby server stopped.
    )

    set ALREADY_STOPPED=true
GOTO :EOF

:generateClassList
    set JAVA_OPTIONS=%JAVA_OPTIONS% -Xshare:off -XX:+UnlockCommercialFeatures -XX:+IgnoreEmptyClassPaths -XX:DumpLoadedClassList=%APPCDS_CLASS_LIST% -XX:+UseAppCDS
GOTO :EOF

:useArchive
    set JAVA_OPTIONS=%JAVA_OPTIONS% -XX:+UnlockCommercialFeatures -Xshare:auto -XX:+UseAppCDS -XX:+IgnoreEmptyClassPaths -XX:SharedArchiveFile=%APPCDS_ARCHIVE% -showversion
    set USING_SHOWVERSION=true
GOTO :EOF


:ENDFUNCTIONS
ECHO HOLA.........................................................................
@REM --- End Functions ---

@REM *************************************************************************
@REM This script is used to start WebLogic Server for this domain.
@REM 
@REM To create your own start script for your domain, you can initialize the
@REM environment by calling @USERDOMAINHOME\setDomainEnv.
@REM 
@REM setDomainEnv initializes or calls commEnv to initialize the following variables:
@REM 
@REM BEA_HOME       - The BEA home directory of your WebLogic installation.
@REM JAVA_HOME      - Location of the version of Java used to start WebLogic
@REM                  Server.
@REM JAVA_VENDOR    - Vendor of the JVM (i.e. BEA, HP, IBM, Sun, etc.)
@REM PATH           - JDK and WebLogic directories are added to system path.
@REM WEBLOGIC_CLASSPATH
@REM                - Classpath needed to start WebLogic Server.
@REM PATCH_CLASSPATH - Classpath used for patches
@REM PATCH_LIBPATH  - Library path used for patches
@REM PATCH_PATH     - Path used for patches
@REM WEBLOGIC_EXTENSION_DIRS - Extension dirs for WebLogic classpath patch
@REM JAVA_VM        - The java arg specifying the VM to run.  (i.e.
@REM                - server, -hotspot, etc.)
@REM USER_MEM_ARGS  - The variable to override the standard memory arguments
@REM                  passed to java.
@REM PRODUCTION_MODE - The variable that determines whether Weblogic Server is started in production mode.
@REM DERBY_HOME - Derby home directory.
@REM DERBY_CLASSPATH
@REM                - Classpath needed to start Derby.
@REM 
@REM Other variables used in this script include:
@REM SERVER_NAME    - Name of the weblogic server.
set "JAVA_OPTIONS=%JAVA_OPTIONS% -DUPLOAD_HOME=C:\files"
@REM JAVA_OPTIONS   - Java command-line options for running the server. (These
@REM                  will be tagged on to the end of the JAVA_VM and
@REM                  MEM_ARGS)
@REM PROXY_SETTINGS - These are tagged on to the end of the JAVA_OPTIONS. This variable is deprecated and should not
@REM                  be used. Instead use JAVA_OPTIONS
@REM 
@REM For additional information, refer to "Administering Server Startup and Shutdown for Oracle WebLogic Server"
@REM *************************************************************************

set SCRIPTPATH=%~dp0
set SCRIPTPATH=%SCRIPTPATH%
for %%i in ("%SCRIPTPATH%") do set SCRIPTPATH=%%~fsi


@REM Call setDomainEnv here.

set DOMAIN_HOME=C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain
for %%i in ("%DOMAIN_HOME%") do set DOMAIN_HOME=%%~fsi

call "%DOMAIN_HOME%\bin\setDomainEnv.cmd" %*

set SAVE_JAVA_OPTIONS=%JAVA_OPTIONS%

set SAVE_CLASSPATH=%CLASSPATH%

set TMP_UPDATE_SCRIPT=%TMP%\update.cmd


@REM Start Derby

set DERBY_DEBUG_LEVEL=0

if "%DERBY_FLAG%"=="true" (
    call "%WL_HOME%\common\derby\bin\startNetworkServer.cmd"  >"%DOMAIN_HOME%\derby.log" 2>&1 

)

set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS%

@REM In order to use resource consumption management policies or to get partition's resource consumption metrics, uncomment the following JAVA_OPTIONS

set #JAVA_OPTIONS=-XX:+UnlockCommercialFeatures -XX:+ResourceManagement -XX:+UseG1GC %SAVE_JAVA_OPTIONS%

set SAVE_JAVA_OPTIONS=

set CLASSPATH=%SAVE_CLASSPATH%

set SAVE_CLASSPATH=

if "%PRODUCTION_MODE%"=="true" (
    set WLS_DISPLAY_MODE=Production
) else (
    set WLS_DISPLAY_MODE=Development
)

if NOT "%WLS_USER%"=="" (
    set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.management.username=%WLS_USER%
)

if NOT "%WLS_PW%"=="" (
    set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.management.password=%WLS_PW%
)

if NOT "%MEDREC_WEBLOGIC_CLASSPATH%"=="" (
    if NOT "%CLASSPATH%"=="" (
        set CLASSPATH=%CLASSPATH%;%MEDREC_WEBLOGIC_CLASSPATH%
    ) else (
        set CLASSPATH=%MEDREC_WEBLOGIC_CLASSPATH%
    )
)

if "%GENERATE_CLASS_LIST%"=="true" (
    CALL :generateClassList
)

if "%USE_ARCHIVE%"=="true" (
    CALL :useArchive
)

echo .

echo .

echo JAVA Memory arguments: %MEM_ARGS%

echo .

echo CLASSPATH=%CLASSPATH%

echo .

echo PATH=%PATH%

echo .

echo ***************************************************

echo *  To start WebLogic Server, use a username and   *

echo *  password assigned to an admin-level user.  For *

echo *  server administration, use the WebLogic Server *

echo *  console at http:\\hostname:port\console        *

echo ***************************************************

@REM START WEBLOGIC

if NOT "%USE_JVM_SYSTEM_LOADER%"=="true" (
    set LAUNCH_ARGS=-cp %WL_HOME%\server\lib\weblogic-launcher.jar -Dlaunch.use.env.classpath=true
)

if "%USING_SHOWVERSION%"=="true" (
    echo starting weblogic with Java version:
    %JAVA_HOME%\bin\java %JAVA_VM% -version
)

if "%WLS_REDIRECT_LOG%"=="" (
    echo Starting WLS with line:
    echo %JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %LAUNCH_ARGS% -Dweblogic.Name=%SERVER_NAME% -Djava.security.policy=%WLS_POLICY_FILE% %JAVA_OPTIONS% %PROXY_SETTINGS% %SERVER_CLASS%
    %JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %LAUNCH_ARGS% -Dweblogic.Name=%SERVER_NAME% -Djava.security.policy=%WLS_POLICY_FILE% %JAVA_OPTIONS% %PROXY_SETTINGS% %SERVER_CLASS%
) else (
    echo Redirecting output from WLS window to %WLS_REDIRECT_LOG%
    %JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %LAUNCH_ARGS% -Dweblogic.Name=%SERVER_NAME% -Djava.security.policy=%WLS_POLICY_FILE% %JAVA_OPTIONS% %PROXY_SETTINGS% %SERVER_CLASS%  >"%WLS_REDIRECT_LOG%" 2>&1 
)

IF ERRORLEVEL 86 IF NOT ERRORLEVEL 87 (set shutDownStatus=86) ELSE (IF ERRORLEVEL 88 IF NOT ERRORLEVEL 89 ( set shutDownStatus=88 ) )


CALL :stopAll

popd

IF EXIST %TMP_UPDATE_SCRIPT% (set fileExists=true) ELSE (set fileExists=false)


if "%shutDownStatus%"=="86" (
    if "%fileExists%"=="true" (
        echo Calling %TMP_UPDATE_SCRIPT%

        cd %TMP:~0,2%
        cd %TMP%
        call %TMP_UPDATE_SCRIPT%
        IF ERRORLEVEL 42 IF NOT ERRORLEVEL 43 (set ustatus=42 )

        @REM restoring the original env before unsetting JAVA_HOME
        @REM in order to unset any JAVA_HOME that was passed in from domainEnv
        if "%ustatus%"=="42" (
            set JAVA_HOME=
        )
    ) else (
        echo ERROR! %TMP_UPDATE_SCRIPT% did not exist
    )
    @REM Call the same script path that was supplied in order to restart ourselves
    @REM restoreOrigEnv will go here

    call "%SCRIPTPATH%\startWebLogic.cmd"

) else (
    if "%shutDownStatus%"=="88" (
        @REM restoreOrigEnv will go here

        call "%SCRIPTPATH%\startWebLogic.cmd"

    )
)

@REM Exit this script only if we have been told to exit.

if "%doExitFlag%"=="true" (
    exit
)



ENDLOCAL
person Alex Yungan    schedule 29.08.2019

Если вы используете Windows, перейдите к %OracleHome%\user_projects\domains\base_domain\bin

Отредактируйте setDomainEnv.cmd в блокноте++.

Найдите строку, в которой установлены окончательные JAVA_OPTIONS,

set JAVA_OPTIONS=%JAVA_OPTIONS%

Над этой строкой вы можете указать java-аргументы вашего клиента. Что-то типа,

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcustom.prop=value

set JAVA_OPTIONS=%JAVA_OPTIONS%

Теперь, если вы работаете с WebLogic, остановите и перезапустите консоль администратора. Вы сможете проверить в командной строке или консоли eclipse, что WebLogic запущен с аргументами java вашего клиента,

Starting WLS with line:
C:\PROGRA~1\Java\JDK18~1.0_1\bin\java -server   
-Xms256m -Xmx512m -XX:CompileThreshold=8000 
BLA BLA BLA 
-Dweblogic.home=C:\ORACLE~1\MIDDLE~1\ORACLE~1\wlserver\server 
-Dcustom.prop=value  
weblogic.Server

Теперь в вашем приложении вы можете получить к нему доступ System.getProperty("custom.prop")

person Lucky    schedule 01.05.2020