Читать переменную среды в Java с помощью Websphere - PullRequest
11 голосов
/ 08 августа 2011

У меня небольшая проблема с сервером приложений Websphere 7.0 (WAS7) и чтением переменных среды.

В TomCat я определил переменную как

<Environment name="myVar" type="java.lang.String" value="myVarOnServeur"

иЯ читаю это с помощью поиска по initialContext:

Context ctx = new InitialContext();
String myVar = (String) ctx.lookup( "java:comp/env/myVar" );

, и оно работает!

Но в Websphere я определяю переменную среды в графическом интерфейсе, но не могу прочитать ее в своемJava-кодУ меня есть исключение NamingException.

http://fullahead.org/work/stackoverflow/was-environment-variables.png

Как решить проблему?

Ответы [ 9 ]

8 голосов
/ 25 января 2012

для определения внутри web.xml

<env-entry>
   <env-entry-name>varName</env-entry-name>
   <env-entry-value>56</env-entry-value>
   <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

чтобы увидеть с Java

Context envEntryContext = (Context) new InitialContext().lookup("java:comp/env");
String mydata = (String)envEntryContext.lookup("varName");
4 голосов
/ 03 января 2015

On WebSphere follow this settings

В WAS следуйте приведенным выше настройкам, где имя - это ваш ключ, а значение - это значение вашего свойства.в моем примере я использовал имя: тестовое значение: это тестовое значение.После установки этих значений перезапустите сервер приложений.в вашем Java-коде вызовите System.getProperty ("TEST"), где test - это имя вашего свойства, а значение покажет

4 голосов
/ 21 декабря 2012

Вы смотрите не в том месте.

Вы должны добавить переменную в Environment-> Naming-> Bindings пространства имен-> New.

Если вы выбираете Binding type String, "Привязка идентификатора "и" Имя в пространстве имен ... "myVar, вы можете получить значение переменной с помощью:

Context ctx = new InitialContext();
String myVar = (String) ctx.lookup( "cell/persistent/myVar" );
4 голосов
/ 08 августа 2011

Если вы хотите определить и управлять своими собственными переменными, взгляните на Привязки окружения-> Именования-> Пространство имен. Там вы можете привязать имена jndi к строковым константам. см. Настройки привязки строк

4 голосов
/ 08 августа 2011

Вы можете поместить что-то вроде следующего в файл web.xml, который должен находиться в каталоге WEB-INF вашего приложения:

<env-entry>
    <env-entry-name>myVar</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>myVarOnServeur</env-entry-value>
</env-entry>

Кстати, это стандартный синтаксис, который должен работать на всех серверах приложений. Я использую его с WebSphere, JBoss и WebLogic. Его можно запросить точно так же, как в вашем примере.

3 голосов
/ 17 апреля 2013

Websphere 7.0 - 8.5

Установить переменную Консоль администратора ---> Серверы приложений Websphere -----> Your_sever_name ---> Java и управление процессами ---> Определение процесса -> Виртуальная машина Java -> Пользовательские свойства

Получить значение в Java System.getProperty ( "Your_Variable")

3 голосов
/ 08 августа 2011

Вы должны иметь возможность разрешать их с помощью AdminOperations MBean :

//sample code from WAS 7 Infocenter
private String expandVariable(String s) throws
                         javax.management.JMException {  
  com.ibm.websphere.management.AdminService as = 
     com.ibm.websphere.management.AdminServiceFactory.getAdminService();  

  String server = as.getProcessName();
  String mBeanName = "*:*,type=AdminOperations,process=" + server;

  java.util.Set result = as.queryNames(
     new javax.management.ObjectName(mBeanName) , null);  

   return (String) as.invoke((javax.management.ObjectName)
                             result.iterator().next(),
                             "expandVariable",
                             new Object[]{"${"+s+"}"},
                             new String[]{"java.lang.String"});
}

См. Создание, редактирование и удаление переменных WebSphere .

1 голос
/ 11 ноября 2018

Я просто хотел бы подробнее рассказать о создании переменной в WebSphere, которая может использоваться приложением Java, чтобы, надеюсь, помочь другим, поскольку мне пришлось провести небольшое дополнительное исследование, чтобы выяснить это.

Допустим, вы хотите создать в WebSphere переменную с именем ENV , которая содержит значение dev (или int, или prod, или любое другое значение).

  1. На левой панели консоли администратора WebSphere выберите Серверы > Типы серверов > Серверы приложений WebSphere .
  2. Выберите сервер приложений, содержащий приложение.
  3. Разверните Java и управление процессами и выберите определение процесса .
  4. Выбрать Виртуальные машины Java .
  5. Выбрать Пользовательские свойства .
  6. Выбрать Новый .
  7. Создайте имя и значение переменной и выберите OK .
  8. Выбрать Сохранить .
  9. Перезапуститьсервер приложений , чтобы это изменение вступило в силу.

В этом примере была создана переменная с именем ENV и паролем "dev".

enter image description here

Затем необходимо настроить приложение Java на использование переменной ENV в WebSphere.В приведенной ниже разметке Java-приложение имеет класс с именем «Environment».Этот класс создает переменную с именем env.System.getProperty ("ENV") - это магия, которая получает переменную из WebSphere.Следует отметить, что этот код Java должен также работать с другими серверами приложений, такими как JBoss или Tomcat, поэтому вам не нужно настраивать код Java для конкретной платформы.

Хотя это определенно не требуется, я такжевозвращаю env.Я просто делаю это для демонстрации, чтобы мы могли получить переменную на странице JSP, чтобы мы могли видеть переменные своими глазами на странице JSP, для проверки того, что это работает, как ожидалось.

package com.example.main;

public class Environment {  
    public String env;

    public Environment() {
        env = System.getProperty("ENV");
    } 

    public String getEnvironment(){
        return env;
    }
}

Внутри тегов страницы JSP я добавляю следующую разметку, чтобы получить переменную env из класса Environment, который, в свою очередь, получает переменную ENV из WebSphere.

<%@page import="com.sample.main.Environment"%>

<%
  Environment foo = new Environment();
  String env = foo.getEnvironment();
  out.print("Environment : " + env;
%>

Теперь, когдаприложение было развернуто в WebSphere, должна отображаться среда, поэтому я знаю, что смог успешно получить переменную с сервера приложений.

enter image description here

0 голосов
/ 08 августа 2011

Я не вижу там ничего, что говорило бы о том, что эти записи можно прочитать через ctx.lookup ("java: comp / env / ...");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...