Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > как увязать не MVC приложение в Java EE


Автор: Walker 28.12.2013, 13:31
Приветы!

Задача простая - надо периодически брать данные из одного места и класть в другое. Какие данные и как часто брать - пользователь скажет (конфигом или через веб страницу пока без разницы). В принципе это был бы обычный системный сервис, но надо, чтобы запускалось под управлением Application сервера. То есть надо, чтобы сервер стартовал и каким-нибудь тредом запускал и мою аппликуху, которая живёт, пока он работает. Я структуру Java EE приложения только в виде квадратиков представляю. BD -> EJB -> JSP/JSF -> HTML. И есть у меня интуитивное чувство, что бизнес логика где-то в EJB жить должна, но как это так реализовать, чтобы к AS на манер полипа присосаться, - без понятия. smile 
Вопрос собственно заключается в том - чтобы на эту тему почитать (можно на международном). Знаю про официальный оракл Java EE 7 tutorial, но это на два-три месяца, начиная с JSF, а мне бы сразу ближе к делу.

Спасибо за любые советы!

Автор: Walker 29.12.2013, 06:47
Хорошо. Несколько перефразирую задачу. Как правильно написать программу, которая запускается в AS при его старте и хеллоувордит раз в минуту в лог на протяжении всего AS-овского жизненного цикла? Ну типа правильная точка входа и всё такое. (Где вот там метод Main должен быть. smile ) Мысль разовью дальше сам. Видел, что у сервлета есть какой-то init. Метод, вроде, по смыслу подходит. Тред/таймер прямо в нём стартовать? Но общий смысл сервелета - респондить на реквесты. И использовать, как я хочу, наверное, не очень правильно?

Автор: Samotnik 29.12.2013, 14:42
Если нужно простое и быстрое решение, я бы порекомендовал http://quartz-scheduler.org//B
Идея:
Пишется сервлет (это входная точка, метода main нет в веб прилагах), в нем определяешь кварц, который по расписанию будет дергать нужный метод. 

Автор: Walker 29.12.2013, 15:59
Ага, ну то есть сервлет-таки нормально заюзать для этих целей. За quartz Спасибо - заценим. Вопрос пока открыт на случай альтернативных интересных мнений.

Автор: Samotnik 29.12.2013, 20:59
Walker, В Java Web всё сервлеты. Даже новомодные Spring controller'ы внутри сервлеты. 
Цитата(Walker @  29.12.2013,  15:59 Найти цитируемый пост)
Вопрос пока открыт на случай альтернативных интересных мнений.

Все зависит только от тебя, будет ли приложение дорабатываться, развиваться, дополняться, будет ли оно сложное или простое. Если в планах достаточно большое приложение, то рекомендую использовать Spring. Без него скучно, даже в какой-то степени сложнее. Но на это нужно много времени, что бы его изучить. Если все будет просто, то нет смысла его сюда тянуть. В нем, кстати, есть свой скедулер.

Автор: sergioK1 15.1.2014, 16:55
Цитата(Samotnik @ 29.12.2013,  13:42)
Если нужно простое и быстрое решение, я бы порекомендовал http://quartz-scheduler.org//B
Идея:
Пишется сервлет (это входная точка, метода main нет в веб прилагах), в нем определяешь кварц, который по расписанию будет дергать нужный метод.


Walker,
у меня реализовано так,
Код


public class InitContextListener implements ServletContextListener {

    private  Logger logger=Logger.getLogger(CWContextListener.class);
    

    
    public void contextInitialized(ServletContextEvent  servletEvent) {
    
   MyData data=new Mydata();    
    
    AnyTask    anyTask = new AnyTask(myData);
int now=0;
int period = 0;


    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        scheduler.scheduleAtFixedRate(anyTask, now, period, TimeUnit.SECONDS);    
    }

}

 class AnyTask implements Runnable (){

 public AnyTask(Mydata data){
    this.data=data;
}
     public void run(){
       logger.info(" param 1 ="+data.getXXX()+ " param 2 "+ data.getYYY());
}
}


в web.xml прописываем 

Код


 <listener>
    <listener-class>package.InitContextListener</listener-class>
 </listener>



т.е. InitContextListener  это entryPoint(main) вебовской апликации.
ну естесно logger сконфигурируй,


Samotnik, 
KISS  smile 
зачем что-то стороннее? профит где?

Автор: Samotnik 18.1.2014, 22:56
sergioK1, как-то не работал с этим скедулером, нужно подробнее изучить

Автор: jk1 21.1.2014, 21:40
Цитата

зачем что-то стороннее? профит где? 


Давай-ка подумаем, что умеет Quartz и не умеет старый добрый ScheduledExecutorService:

1. Quartz умеет привязывать выполнение к конкретному времени по часам, а не просто оперирует интервалами. В том числе позволяет выполнять задачи каждый третий четверг восьмого месяца в 3.15 утра.

2. Quartz умеет отслеживать ситуации, когда периодичность выполнения сбивается (например прошлое выполнение задачи заняло огромное количество времени, превысив даже интервал между запусками) и пытается выправить расписание, "нагоняя" график при дальнейших срабатываниях таймера.

3. Quartz умеет персистить джобы, позволяя переживать рестарты сервера не сбивая расписание выполнения задач.

4. Quartz умеет правильно работать в кластере, не дублируя выполнения задач. Кластеризация для современного AS - очень частый кейс.

5. Quartz умеет работать в контексте транзакций, в том числе распределенных.

6. Quartz предоставляет базовые средства для мониторинга и сбора статистики по выполнению задач.

Выбирать реализацию, разумеется, надо исходя из потребностей конкретного приложения, которых мы пока не знаем.  smile 

Автор: sergioK1 21.1.2014, 22:08
Цитата(jk1 @ 21.1.2014,  20:40)
Цитата

зачем что-то стороннее? профит где? 


Давай-ка подумаем, что умеет Quartz и не умеет старый добрый ScheduledExecutorService:

1. Quartz умеет привязывать выполнение к конкретному времени по часам, а не просто оперирует интервалами. В том числе позволяет выполнять задачи каждый третий четверг восьмого месяца в 3.15 утра.

2. Quartz умеет отслеживать ситуации, когда периодичность выполнения сбивается (например прошлое выполнение задачи заняло огромное количество времени, превысив даже интервал между запусками) и пытается выправить расписание, "нагоняя" график при дальнейших срабатываниях таймера.

3. Quartz умеет персистить джобы, позволяя переживать рестарты сервера не сбивая расписание выполнения задач.

4. Quartz умеет правильно работать в кластере, не дублируя выполнения задач. Кластеризация для современного AS - очень частый кейс.

5. Quartz умеет работать в контексте транзакций, в том числе распределенных.

6. Quartz предоставляет базовые средства для мониторинга и сбора статистики по выполнению задач.

Выбирать реализацию, разумеется, надо исходя из потребностей конкретного приложения, которых мы пока не знаем.  smile

1)T,C, сказал  что надо каждую минуту,
 drinking  glass of milk caw doesn't  require smile 

2) Кварц это не быстрое решение, с ним надо разбираться ,
А в  реальной жизни, когда аджал на 3 недели , времени с ним 
разбираться особо нет ,

3) Ты с ним работал ? или прочитал на сайте какой он крутой  smile ?

Автор: Samotnik 21.1.2014, 23:34
Цитата(sergioK1 @  21.1.2014,  22:08 Найти цитируемый пост)
2) Кварц это не быстрое решение, с ним надо разбираться ,
А в  реальной жизни, когда аджал на 3 недели , времени с ним 
разбираться особо нет ,

Мне хватило первый раз в жизни трех часов, уже года два класс не менялся, все работает  smile 
Ну да ладно, все это флуд, кому что нужно, то и выбирают. Лично на мой взгляд, ScheduledExecutorService показался не гибким. 

Автор: Magistrus 22.1.2014, 12:51
если решишь связыватся с EJB то вот ссылочка
http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

Автор: jk1 22.1.2014, 15:20
Цитата

2) Кварц это не быстрое решение, с ним надо разбираться ,
А в  реальной жизни, когда аджал на 3 недели, времени с ним 
разбираться особо нет ,

Если задача "разобраться с кварцем" занимает больше трех недель, то, конечно, использовать его не стоит. Квалификацию имеющихся разработчиков всегда стоит принимать во внимание при выборе фреймворков и библиотек.
Мой первый опыт с кварцем дал работающий результат через час-два, просто потому что в гугле полно примеров + есть документация.

Цитата

3) Ты с ним работал ? или прочитал на сайте какой он крутой  smile ?

Сам я использую кварц уже порядка двух лет, в основном через спринг. Правда мне не очень понятно, как этот вопрос поможет топикстартеру решить его проблему.

Чтобы избежать недопонимания: Я не пытаюсь объявить кварц панацеей. Мой пост описывает те фичи, которые в кварце есть по сравнению с ExecutorService'ом, отвечает на заданный ранее вопрос.  Дальше ТС пусть сам смотрит, какие фичи больше подходят под его конкретную задачу.

Автор: sergioK1 22.1.2014, 19:23
Цитата(jk1 @ 22.1.2014,  14:20)
Сам я использую кварц уже порядка двух лет, в основном через спринг. Правда мне не очень понятно, как этот вопрос поможет топикстартеру решить его проблему.

Чтобы избежать недопонимания: Я не пытаюсь объявить кварц панацеей. Мой пост описывает те фичи, которые в кварце есть по сравнению с ExecutorService'ом, отвечает на заданный ранее вопрос.  Дальше ТС пусть сам смотрит, какие фичи больше подходят под его конкретную задачу.

Я думаю T.C. этого и хотел (увидеть несколько вариантов решения) ,


Про спринг не понял ?какая разница через что кварц вызывать?  

Автор: jk1 22.1.2014, 20:08
Цитата

Про спринг не понял ?какая разница через что кварц вызывать?  


В спринге есть некоторое количество хелпер-классов, упрощающих работу с Quartz для распространенных кейсов, тот же MethodInvokingJobDetailFactoryBean например. Но никто, конечно, не запрещает использовать родное API как есть.

Автор: sergioK1 27.1.2014, 08:23
У меня тут такая штука выходит, бежит мой скедуляр  раз в час , обращаеться к облако сервису ,пишет в MySQL потом читает  и шлет 
алерты по майлу, если надо, Ничего сложного но раз в 4-5 дней connection теряеться (пишет что pool пустой), прописан он в (context.xml томсата) ,  в mySQL
видно как при новом запуске открываються новые потоки, но закрываються не всегда , конекшион проверял ,открытых не остаеться ,
Чем лечить такое? 

Автор: sergioK1 28.7.2014, 07:33
Цитата(jk1 @ 22.1.2014,  14:20)
Цитата

2) Кварц это не быстрое решение, с ним надо разбираться ,
А в  реальной жизни, когда аджал на 3 недели, времени с ним 
разбираться особо нет ,

Если задача "разобраться с кварцем" занимает больше трех недель, то, конечно, использовать его не стоит. Квалификацию имеющихся разработчиков всегда стоит принимать во внимание при выборе фреймворков и библиотек.
Мой первый опыт с кварцем дал работающий результат через час-два, просто потому что в гугле полно примеров + есть документация.

Цитата

3) Ты с ним работал ? или прочитал на сайте какой он крутой  smile ?

Сам я использую кварц уже порядка двух лет, в основном через спринг. Правда мне не очень понятно, как этот вопрос поможет топикстартеру решить его проблему.

Чтобы избежать недопонимания: Я не пытаюсь объявить кварц панацеей. Мой пост описывает те фичи, которые в кварце есть по сравнению с ExecutorService'ом, отвечает на заданный ранее вопрос.  Дальше ТС пусть сам смотрит, какие фичи больше подходят под его конкретную задачу.

Кварц версии 2, и выше перестал работать,  
кто нидь   сталкивался как исправлять? В гугле ничего внятного не нашел 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)