Инфраструктура Java для оперативного развертывания кода и планирования развертывания jar-файлов - PullRequest
3 голосов
/ 28 января 2011

Используя инфраструктуру JAVA, я хочу выполнить следующую задачу.

  1. развертывание с горячим кодом (jar), которое будет выполнять определенную задачу в среде
  2. В любое время, если я обновлю этоJAR-файл должен автоматически выгружать старый код и загружать новый код
  3. Я хочу запланировать этот развернутый JAR-файл для выполнения задач.

В настоящее время я вижу, что Apache karaf / Felix выполняет это требование, номеньше справки, доступной и трудной в управлении.

Любая альтернативная конструкция, которую я могу использовать вместо karaf / felix?

Ответы [ 6 ]

5 голосов
/ 05 февраля 2011

Если вы не собираетесь идти по пути OSGi, который вы в основном подразумевали, отказавшись от Карафа / Феликса (и Караф использует Равноденствие по умолчанию), то лучше всего предложить вам рассмотреть LiveRebel, когда он наступитиз.@ В ответе Даниэля упоминается JRebel, который отлично подходит для горячего развертывания во время разработки, но он не предназначен в качестве инструмента для производственных систем .Вместо этого вы должны проверить, что LiveRebel , также сделанный Zero Turnaround, может удовлетворить ваши потребности.Обратите внимание, что это коммерческий продукт, но сейчас он предлагает приватную бета-версию.


[Редактировать]

Идиотски, я забыл упомянуть, что есть также Knoplerfish , другая среда выполнения OSGI, имеющая лицензию в стиле BSD.Может быть, дать этому шанс?

2 голосов
/ 03 февраля 2011

Дайте JRebel попробовать.Это отличный инструмент.

1 голос
/ 08 февраля 2011

Обратите внимание, что вы имеете в виду среду (например, веб, рабочий стол, сервер и т. Д.), Но ...

Работа в обратном направлении:

3: запланированные задачи Вы можете добиться этого в любом контейнере Java с помощью библиотеки Quartz Scheduler . Это позволяет планировать события в стиле CRON.

1-2: горячее развертывание Тогда вопрос в том, где вы хотите развернуть и как справиться с горячим развертыванием. Другие ответы упомянули JRebel и OSGI, которые будут работать. Если вы хотите сверхбыстрого развертывания (например, сохранить код и он доступен) и разместить его в веб-контейнере, используйте Play Framework . Он использует Quartz, очень хорошо реализует Запланированные задания .

Например (из Play docs):

@Every("1h")
public class Bootstrap extends Job {

    public void doJob() {
        List<User> newUsers = User.find("newAccount = true").fetch();
        for(User user : newUsers) {
            Notifier.sayWelcome(user);
        }
    }

}
0 голосов
/ 05 февраля 2011

Функция горячего развертывания большинства веб-контейнеров (таких как Tomcat или Jetty) позволяет вам вести себя по-своему в веб-приложениях.

Такое приложение может быть очень простым и, по сути, просто содержать вашу банку.

Для чего нужно ваше приложение?

0 голосов
/ 28 января 2011
  1. развертывание с горячим кодом (jar), которое будет выполнять определенную задачу в среде
  2. В любое время, если я обновлю этот файл jar, он должен автоматически выгрузить старый код и загрузить новый код
  3. Я хочу запланировать, что развернутый файл jar будет выполнять задачи.

В двух словах, горячее развертывание / повторное развертывание выполняется следующим образом

  • Использованиезагрузчик классов (java.net.URLClassLoader - хорошее начало), загрузите jar-файлы, фактически скопируйте jar-файл (temp) перед его загрузкой
  • Вам нужна некоторая реализация интерфейса, создайте экземпляр класса, реализующего интерфейс (META-INF в банке, пользовательский xml, что угодно), настройте его (props / xml, что угодно)
  • вызовите start () и выполните задачи.
  • Мониторинг фляги: какой-то поток проверяет его каждую секунду и сравнивает последнее измененное время / размер
  • Если изменено - вызовите stop () и отменить развертывание, возможно, потребуется подождать потоков и т. Д., Начать заново

Существует множество платформ, которые позволяют динамическое развертывание

0 голосов
/ 28 января 2011

JBoss имеет функцию горячего развертывания, которую вы описываете. Тем не менее, я думаю, что настроить Караф так же сложно. Может быть, возможно узнать, как JBoss достигает этого, и использовать библиотеки самостоятельно.

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