powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / автостарт приложения. Tomcat, Spring, Hibernate
11 сообщений из 11, страница 1 из 1
автостарт приложения. Tomcat, Spring, Hibernate
    #37853682
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги,
Есть автономное приложение которое крутиться под tomcat'ом. Управление приложением осуществляется через spring mvc в связке с hibernate (грубо говоря через базу данных).
Хочется чтобы приложением при старте tomcat'а запускалось автоматически(выполнялся метод, который в свою очередь уже запустит нужные thread)
Я знаю два способа:
1) В web.xml через параметр <load-on-startup>1</load-on-startup> это вызывает метод init(). Но данный способ как я понял из документации был придуман для сервлетов. А у меня ни разу не сервлет (приложение никому ничего не отвечает, оно крутит ряд потоков )
2) Через ServletContextListener. Но опять же запуск ContextListener происходит в сааам начале tomcat'а до того как происходит связка бинов. Что тоже не есть круто. Так как моё приложение хочет использовать бины.

Будь те добреньки, подскажите пожалуйста как все таки запускать такие приложения.
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37853696
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это Spring MVC и без сервлетов. :)
Чем вас не устраиваюи всякие спринговые @PostConstruct, init-method и т.п.?
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37853719
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Сервлеты то есть. Но бизнес-логика же не в сервлете) А особенность моей бизнес-логики в том, чтобы она начинала работать без вмешательства человека. Если вмешательство человека необходимо, то оно осуществляется через веб, т.е. через сервлеты)
Ща почитаю про PostConstruct)
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37853720
pasha701
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
ApplicationListener, ContextStartedEvent
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37853954
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Спасибо за наводку, не знал об этой аннотация. Но она черт возьми не подходит(
Дело в том что как метод с PostConstruct аннотацией не может стартовать Hibernate Session'ию. Почему не может написано детально вот тут http://forum.springsource.org/showthread.php?58337-No-transaction-in-transactional-service-called-from-PostConstruct.

pasha701,

Тоже спасибо за наводку. Сейчас усиленно читаю доки по этому поводу. Я так понимаю надо создать класс похожий вот на это
Код: java
1.
2.
3.
4.
5.
6.
@Service
public class EventListener implements ApplicationListener<ContextStartedEvent> {  
  public void onApplicationEvent(ContextStartedEvent event) {
        System.out.println("Context '" + event.getApplicationContext().getDisplayName() + "' is started!");
  }  
}



Но в документации ( http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#context-functionality-events) сказано, что для того чтобы сработал этот эвент нужно чтобы интерфейс ApplicationContext вызвал метод start() интерфейса ConfigurableApplicationContext.
Но черт возьми) как заставить ApplicationContext вызвать этот метод?)

Пытался так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Service
public class EventPublisher implements ApplicationContextAware {
    private ApplicationContext context;
    public void setApplicationContext(ApplicationContext applicationContext){
        this.context = applicationContext;
        ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext)this.context;
        configurableApplicationContext.start();
    }
}


и ничего хорошего) эксепшен говорит вначале нужно вызывать метод reload(); Пробовал с reload(); старт приложения уходит в глубокий луп
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37853972
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaДело в том что как метод с PostConstruct аннотацией не может стартовать Hibernate Session'ию. Почему не может написано детально вот тут http://forum.springsource.org/showthread.php?58337-No-transaction-in-transactional-service-called-from-PostConstruct.
Не особо там объясняется. Если бин использует хибер, то от зависит от SessionFactory или HibernateTemplate, которые зависят от TransactionManager. Вся эта лабуда должна быть проинициализирована. Опять же в теме написано и про TransactionTemplate, как способ решения.
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37854009
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНе особо там объясняется. Если бин использует хибер, то от зависит от SessionFactory или HibernateTemplate, которые зависят от TransactionManager. Вся эта лабуда должна быть проинициализирована. Опять же в теме написано и про TransactionTemplate, как способ решения.
"...no way to ensure that all the post processing is already done, so (indeed) there can be no Transactions..."
Да эта вся лабуда хибером связанная инициализируется к моменту когда выполняется метод init(). Эт я как в логах вижу, так и в дебаггере. Но вот на аннотацию @Transactional() методу init() по барабану.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Service
public class Posting {
@Autowired
     private PostingAccountDAO postingAccountDAO;

@Transactional()
     public void clearSchedule() {
        this.postingAccountDAO.clearSchedule();
     }

@PostConstruct
     public void init() {
        clearSchedule();
     }
}


workaround'ы то я нашел (как один из вариантов это TransactionTemplate). Но это все как то кривовато)
Буду дальше копать в сторону ContextStartedEvent, ведь по логике мне именно и нужен этот эвент. Но достучатся до него пока не получается.
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37854596
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaХочется чтобы приложением при старте tomcat'а запускалось автоматически(выполнялся метод, который в свою очередь уже запустит нужные thread)

Эти thread'ы не реализует работу, которая должна вестись по таймеру?
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37854615
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь сказано что проблема в том что PostConstruct вызов идёт мимо прокси.
https://jira.springsource.org/browse/SPR-6002
Можно попробовать разделить на 2 бина. Один для вызова PostConstruct, а второй для выполнения самой Transactional операции. Вот в этом случае вызов должен пойти через прокси и проблемы не будет.
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37854691
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepka,
какой нафик Бизнес-метод, если ты привязываешь всё к старту томката. Т.е. грубо к старту АппСервера.
Это другой уровень окружения.
Если это Админское приложение, тогда другое дело.
Но IMHO кривое обоснование велосипеда.
...
Рейтинг: 0 / 0
автостарт приложения. Tomcat, Spring, Hibernate
    #37854777
pasha701
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tepka как заставить ApplicationContext вызвать этот метод?) Сорри, неправильный event, нужен "ContextRefreshedEvent".
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / автостарт приложения. Tomcat, Spring, Hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]