JavaCall

Эта функция позволяет вызвать метод имя_метода в объекте Java объект_назначения с параметрами или вызвать статический метод имя_метода в классе Java имя_класса с параметрами.

Добавление файлов архива Java (JAR) в совместно используемый каталог библиотеки

Прежде чем использовать эту функцию политики, надо сделать классы Java доступными для Netcool/Impact во время выполнения. Чтобы классы Java стали доступны, сделайте следующее.
  1. Скопируйте классы Java в каталог $IMPACT_HOME/dsalib.
  2. Перезапустите сервер Impact, чтобы загрузить файлы JAR.
Эту процедуру надо повторить для каждого Сервер Impact. Это необходимо, так как файлы классов Java в каталоге $IMPACT_HOME/dsalib не реплицируются между серверами.

Синтаксис

JavaCall( имя_класса, объект_назначения, имя_метода, Параметры )

Анализ важности независимых переменных

Табл. 1. Параметры функции JavaCall

Параметр

Описание

имя_класса

Имя Java-класса. Если вы используете вызов нестатического метода, этому параметру присваивается нулевое значение (null).

объект_назначения

Имя создаваемого объекта Java. Если вы используете статический метод, этому параметру присваивается нулевое значение (null).

имя_метода

Имя метода Java, в вызываемом классе Java.

Параметры

Массив значений параметров, которые требуются методу.

Возвращаемое значение

Значение, возвращаемое методом (если оно есть).

Примеры

Получить системное свойство с именем app. Вызвать метод java.lang.System.getProperty( String key ) с использованием следующей строки:

Пример IPL:

propValue = JavaCall("java.lang.System", null, "getProperty", { "app" } );

Тот же самый пример на языке JavaScript:


propValue = JavaCall("java.lang.System", null, "getProperty", [ "app" ] );

В этом примере данная функция используется для проверки свойств JVM путем вызова методов для класса java.lang.System из политики. В этом примере IPL в журнал будет записано значение системного свойства JRE с именем app:

propvalue = JavaCall("java.lang.System", null, "getProperty",
{ "app" } );
log("Property \"app\" is " + propvalue);

Тот же самый пример на языке JavaScript:


propvalue = JavaCall("java.lang.System", null, "getProperty",
[ "app" ] );
Log("Property \"app\" is " + propvalue);

В следующем примере IPL будет создан Java-объект класса Vector и будут вызваны его методы:

// Создать новый экземпляр Java-класса java.util.Vector
vector = NewJavaObject("java.util.Vector", null);
// Добавить элемент "111111" в вектор.
JavaCall(null, vector, "add", { "111111" });
// Получить элемент, находящийся в позиции 0.
log("Первый элемент - " + JavaCall(null, vector, "get", { 0 }) );
// Добавить элемент "22222" в позицию 0
JavaCall(null, vector, "add", { 0, "22222" });
// Выдать элемент, находящийся в позиции 0.
// Теперь это должно быть "22222", а не "111111".
log("Первый элемент - " + JavaCall(null, vector, "get", { 0 }) );
// Добавить элемент "33333" в вектор.
JavaCall(null, vector, "add", { "33333" });
// Выдать текущий размер вектора. Значение должно быть равно 3.
log("Размер вектора - " + JavaCall(null, vector, "size", {}));

Если вы используете JavaScript, то для функции JavaCall, которой требуется целочисленный аргумент, нужно использовать вызов JavaCall Integer.parseInt, чтобы создать действительное целое число.

// Создать новый экземпляр класса Java java.util.Vector
vector = NewJavaObject("java.util.Vector", null);
 index = JavaCall("java.lang.Integer", null, "parseInt", ["0"]);
//Добавить "111111" в вектор.
JavaCall(null, vector, "add", ["111111"]);
// Получить элемент, находящийся в позиции 0.
Log("Первый элемент - " + JavaCall(null, vector, "get", [index]) );
// Добавить элемент "22222" в позицию 0
JavaCall(null, vector, "add", [index, "22222"]);
Log("Первый элемент - " + JavaCall(null, vector, "get", [index]) );