Java скрипты

Скрипты написаны полностью на языке Java, поэтому могут иметь доступ ко всем ресурсам сервера, на котором запущен SberMobile Server, включая:

  • Любые объекты в оперативной памяти
  • Файловую систему
  • Сетевой и последовательный интерфейсы ввода/вывода
  • Консоли, журналирование и даже графический интерфейс пользователя
  • Многопоточную обработку

Скрипты выполняются в среде JVM, и их права доступа никак не ограничены. Обратитесь к разделу безопасность скриптов для получения подробной информации.

Интерфейс скрипта

Скрипты написаны на языке Java. Каждый скрипт - это отдельный Java класс, который должен реализовать интерфейс скрипта:

public interface Script

{

  public DataTable execute(ScriptExecutionEnvironment environment, DataTable parameters) throws ScriptException;

}

Этот интерфейс объявляет единственный метод execute(), который вызывается  SberMobile Server при выполнении скрипта.

Среда выполнения

У каждого скрипта есть доступ к объекту, описыващему интерфейс ScriptExecutionEnvironment, который передается в качестве аргумента методу execute(). Ниже описан интерфейс ScriptExecutionEnvironment:

public interface ScriptExecutionEnvironment

{

  public abstract CallerController getCallerController();

  

  public abstract Context getScriptContext();

}

Экземпляр ScriptExecutionEnvironment предоставляет доступ к объекту, описывающему интерфейс CallerController (он получен в результате вызова метода getCallerController()). Этот объект включает в себя права доступа пользователя, который инициировал выполнение скрипта. Объект CallerController передается в качестве аргумента большинству контекстных операций (Get Context, Get/Set Variable, Call Function, Add/Remove Event Listener и т.д.)

Когда скрипт запускается автоматически при запуске сервера, его среда выполнения включает в себя систему CallerController, которая подавляет все проверки прав доступа.

Context, возвращаемый методом getScriptContext(), позволяет получить доступ к дереву контекстов и всем его объектам.

Разработка скриптов

Изучите руководство по программированию, чтобы получить общую информацию о разработке скриптов SberMobile.

Шаблон скрипта

Когда создается новый скрипт, он содержит автоматически сгенерированную заглушку класса реализации интерфейса Скрипта с пустым методом execute(). Ниже представлен текст скрипта по умолчанию:

import com.tibbo.aggregate.common.context.*;

import com.tibbo.aggregate.common.datatable.*;

import com.tibbo.aggregate.common.script.*;

 

import com.tibbo.linkserver.*;

import com.tibbo.linkserver.context.*;

import com.tibbo.linkserver.script.*;

 

public class %ScriptClassNamePattern% implements Script

{

  public DataTable execute(ScriptExecutionEnvironment environment, DataTable parameters) throws ScriptException

  {

  }

}

Обратите внимание, что %ScriptClassNamePattern% будет заменен автоматически сгенерированным именем Java класса во время компиляции. Не изменяйте эту часть скрипта, чтобы избежать ошибок компиляции.

После того, как вы добавили необходимый код внутрь тела метода execute(), вы можете попробовать выполнить скрипт. Обратите внимание, что скрипт перекомпилируется при каждом выполнении. Система сообщает пользователю о любых ошибках компиляции. Используйте описание действия Выполнить для дополнительной информации.

Пример скрипта

Пример Java скрипта, который меняет IP адрес аппаратного Device Server:

import com.tibbo.aggregate.common.context.*;

import com.tibbo.aggregate.common.datatable.*;

import com.tibbo.aggregate.common.script.*;

 

import com.tibbo.linkserver.*;

import com.tibbo.linkserver.context.*;

import com.tibbo.linkserver.script.*;

 

public class %ScriptClassNamePattern% implements Script

{

  public DataTable execute(ScriptExecutionEnvironment environment, DataTable parameters) throws ScriptException

  {

try

{

       // Getting context of a Device Server

       Context con = environment.getScriptContext().getContextManager().get("users.admin.deviceservers.c1", environment.getCallerController());

       

       if (con == null)

       {

               throw new ScriptException("Device Server not available");

       }

       

       // Getting IP address variable

       DataTable val = con.getVariable("IP_setting", environment.getCallerController());

       // Changing IP address

       val.rec().setValue("IP_setting", "192.168.1.235");

       // Writing new value of variable

       con.setVariable("IP_setting", environment.getCallerController(), val);

       // Rebooting Device Server

       con.callFunction("reboot", environment.getCallerController());

       return null;

}

catch (ScriptException ex)

{

       throw ex;

}

catch (Exception ex)

{

       throw new ScriptException(ex);

}

  }

}