Миграция приложения в сервисный режим [java / groovy] - PullRequest
0 голосов
/ 03 июня 2011

У меня есть приложение, написанное на Groovy. Он принимает несколько аргументов cmd и возвращает ранее отформатированный ответ. По мере роста системы выяснилось, что требуется запускать это приложение очень часто (например, 80 раз за 5 минут), что приводит к определенным проблемам с производительностью. В частности, он создает все свои объекты снова и снова, что приводит к заполнению до 60 МБ ОЗУ за один прогон (можно легко рассчитать степень использования ROM / swap).

Я хочу перевести его в режим работы службы, который просто примет определенные параметры и вернет форматированный вывод. Но:

  1. Приложение всегда запускается скриптом bat / sh (это нельзя изменить)
  2. И скрипт, и приложение находятся на одном хост-сервере

Итак, мне интересно, как было бы лучше выполнить связь сценария и службы?

P.S .: Извините, что я не упомянул, это отдельное приложение, оно никогда не будет использовать сервер или что-то в этом роде, поскольку оно выглядит избыточным. Решение должно быть максимально простым и чрезвычайно легким.

Пример: самая простая вещь, о которой я могу подумать сейчас, - это никогда не переносить ее (я знаю, что это противоречиво;)) и просто вводить БД, в которой будут храниться все результаты, и у приложения будет свое расписание, когда спусковой крючок. Всякий раз, когда он запускается с какими-либо параметрами, он должен просто искать последний результат в БД и возвращать его. Легко, легко, быстро и работает. :)

1 Ответ

0 голосов
/ 03 июня 2011

Для корпоративных сред я бы предложил приложение JavaEE с EJB, работающим на сервере приложений. Для ваших требований это может быть излишним. Простое решение может быть:

  • Служба: внедрение сервера RMI с локальным реестром RMI. Расчеты будут сделаны здесь.
  • Сценарий: подключение к серверу RMI, вызов метода на сервере RMI и отображение результата.

Сервер RMI

public class RmiServer extends UnicastRemoteObject implements RmiInterface
{
    private static final long serialVersionUID = 1L;

    public RmiServer() throws RemoteException
    {
        super();
    }

    public String random() throws RemoteException
    {
        return "Helo World! "+(new Random()).nextInt(100);
    }

    public static void main(String[] args) throws RemoteException, MalformedURLException
    {
        LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
        Naming.rebind("myServer", new RmiServer());
    }
}

Клиент RMI

RmiInterface server = (RmiInterface)Naming.lookup("//127.0.0.1/myServer");
System.out.println(server.random());

Интерфейс RMI

public interface RmiInterface extends Remote
{
    public String random() throws RemoteException;
}
...