Предотвратите JAVA EE-приложение, запускаются на WebSphere на исключении

Вы на самом деле компилируете исходный код test.c дважды:

  • В первый раз при компиляции test.c сам,
  • Во второй раз при компиляции main.c, который включает весь test.c источник.

, В чем Вы нуждаетесь в Вашем main.c для использования эти test(), функция является простым объявлением, не его определением. Это достигается включением test.h заголовочный файл, который содержит что-то как:

void test(void);

Это сообщает компилятору, что такая функция с входными параметрами и типом возврата существует. Что делает эта функция (все в {, и }) оставлен в Вашем test.c файл.

В main.c, замените #include "test.c" [1 113].

А длятся точку: так как Ваши программы будут более сложны, с Вами будут стоять к ситуациям, когда заголовочные файлы смогут несколько раз включаться. Для предотвращения этого источники заголовка иногда включаются определенными макроопределениями, как:

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED

void test(void);

#endif
5
задан UnclickableCharacter 22 May 2015 в 07:26
поделиться

1 ответ

Да, есть способ сделать это, но я считаю, что он по-прежнему специфичен для WebSphere. У нас была такая же проблема несколько лет назад: приложение, которое требовало большой настройки, по-прежнему показывало, что запущено, даже при возникновении серьезной ошибки. Единственный способ узнать это - посмотреть в файл журнала и увидеть, не возникли ли какие-либо исключения (а веб-интерфейс работал не очень хорошо).

Стандартный способ обработки жизненного цикла, который, кажется, работает в большинстве контейнерами, является ServletContextListener, но, как вы обнаружили, не существует изящного способа обработки ошибок запуска.

В WebSphere (по крайней мере, для нескольких версий) существует концепция компонента запуска. Вместо того, чтобы пытаться подробно объяснить это, как это было пару лет назад, вы можете взглянуть на эту ссылку http: //publib.boulder.ibm.com/inforcenter ...

По сути, это позволяет вам создать компонент EJB, реализующий два метода:

public boolean start() {
    return new Delegate().start();
}

public void stop() {
    new Delegate().stop();
}

Если вы вернете true из метода запуска, он вернет успешный запуск, в противном случае возврат false остановит запуск приложения, поэтому в консоли приложение укажет, что он не запустился. Мы реализовали Delegate для выполнения этой работы, чтобы мы могли подключить его либо к запускаемому bean-компоненту, либо к ServletContextListener, если контейнер не реализовал запускаемые bean-компоненты.

Единственная дополнительная вещь с запускаемыми bean-компонентами - это то, что в WebSphere вам необходимо включить службу компонентов запуска в административной консоли, иначе они не будут работать, и ваше приложение не будет выполнять никакой инициализации, но все равно будет отображаться как запущенное, когда вы попытаетесь запустить его. Информация о том, как это сделать, представлена ​​на странице выше.

4
ответ дан 15 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: