суббота, 9 апреля 2011 г.

Интерпретация и компиляция Java-кода в Java-программе

Давайте представим, что вам понадобилось в своей Java-программе выполнять некоторый код, порождаемый пользователем, в некотором выстроенном контексте. Причем, хотелось бы, чтобы из пользовательского кода были доступны некоторые классы и объекты, определенные в исходном приложении.
В 6-ой версии платформы Java появилась технология Java Scripting, которая реализована в пакете javax.script. Используя её и какой-либо из реализованных движков (а может быть вы напишите свой движок), можно получить то что мы хотим - Java-программу, исполняющую некоторый код пользователя, который становится известен лишь в runtime. Типично, используют Java Scripting и движок JavaScript (ссылка), более того JavaScript движок Rhino от Mozilla входит в JDK 6. Нас же будет интересовать Java-движок.

понедельник, 7 марта 2011 г.

Повторяемые задания

Встретился с интересной задачкой.
Есть список некоторых заданий. Что это за задания нам не интересно, главное что они как-то распределены во времени.
Существуют два типа заданий:
  • разовые;
  • повторяемые.
Каждое из них, думаю, допустимо описать парой: (дата окончания, паттерн повторяемости), где:
  • дата окончания - дата, до которой данное задание должно быть выполнено, включительно;
  • паттерн повторяемости - шаблон по которому создаются новые задания. Задание разовое - пуст, повторяемое - имеет свою структуру:
    • тип повторяемости - один из вариантов: 'ежедневно', 'еженедельно', 'ежемесячно', 'ежегодно';
    • повторять через - число дней/недель/месяцев/годов;
    • длительность задания - d-дней, m-месяцев, y-лет.
Думаю с разовыми заданиями все очевидно, задание необходимо выполнить до указанной даты окончания,  больше оно нас не будет тревожить. Что же касается повторяемых заданий, то тут есть проблемы.
На самом деле, повторяемое задание - это одно разовое задание, которое нужно выполнить до указанной даты окончания и шаблон по которому будут созданы новые разовые задания. Вопросы, связанные с повторяемыми заданиями, которые нас будут интересовать:
  1. Как определить, необходимо ли сегодня (DD.MM.YY) создавать новое разовое задание для некоторого повторяемого ? Будем считать, что задание может быть создано за 1 день до официального начала.
  2. Как назначить дату окончания нового разового задания ?