2016-07-30 1 views
1

У меня есть следующий код:EJB Timer Service не доступен, свёртывании Сбой связи

package ejbs; 
import javax.annotation.Resource; 

import javax.ejb.Singleton; 
import javax.ejb.Timeout; 
import javax.ejb.Timer; 
import javax.ejb.TimerConfig; 
import javax.ejb.TimerService; 

@Singleton 
public class timerbackup { 

@Resource 
private TimerService timerservice; 

@Timeout 
public void methodTimeout(Timer timer) 
{  
    System.out.println("timeout"); 
} 
public void settimer(long in) 
{  
    Timer timer=timerservice.createSingleActionTimer(in,new TimerConfig()); 
} 
} 

После развертывания приложения появилось сообщение об ошибке «EJB Timer Service не доступен».

Для решения этой проблемы я следовали за этими шагами:

  1. Доступ к glash рыбы консоли администратора (http://localhost:4848)
  2. Перейдите в Конфигурации ->сервера конфигурации ->Контейнер EJB
  3. Выберите вкладку Служба таймера EJB
  4. Затем заполните Timer Datasource: с ресурса JDBC (я использовал "JDBC/projecto_final")
  5. Restart сервер

Как было предложено в Set/configure the EJB Timer Service’s DataSource.

Это привело, но после некоторого времени TimerService перестала работать. После развертывания приложения появляется следующее сообщение об ошибке:

Severe: Exception while loading the app 
Severe: Undeployment failed for context /ProjetoEE1 
Info: /file:/E:/formacaoJAVA/2moduloJEE/pratica/projecto_final /projfinal2/ProjetoEE1/build/web/WEB-INF/classes/_DEFAULT_PU logout successful 
Warning: EJB Timer Service is not available. Timers for application with id 96332697224871936 will not be deleted 

Set/configure the EJB Timer Service’s DataSource также упоминают эту проблему, и представить решение в Glassfish DeploymentException: Error in linking security policy for.

Решения, представленные в Glassfish DeploymentException: Error in linking security policy for, состоят в основном в удалении некоторых файлов. Ответ более голосовала предлагает в основном следующие:

  1. Stoped сервер GlassFish,
  2. удалил все содержимое из glassfishhome/GlassFish/домены/имя_домена/генерируемый
  3. Начало Glassfish

Я установил «GlassFish Server 4.1.1», и это не работает.

Второй ответ более голосовала предлагает в основном следующие:

1.Все, что нужно, чтобы исправить эту проблему удалить весь кэш OSGi под $ GLASSFISH_HOME/GlassFish/доменов // OSGi-кэш

Это также не работает.

Что я могу сделать?Любая помощь будет очень признателен

С наилучшими пожеланиями,

Рафаэль Коста

+0

Я думаю, что таймеры очень важны, вероятно, у многих людей есть одна и та же проблема, и они не знают, как ее решить. –

+0

Почему вы так думаете? Прежде всего, вы должны начать правильно пометить свой вопрос. Где в коде, который вы опубликовали, вы видите «jsf»? Я бы предложил пометить его «ejb». И это очень сильно связано с GlassFish, поэтому добавьте этот тег в (и удалите ярлык jsf). – Kukeltje

+0

@Kukeltje Большое спасибо. –

ответ

2

Заменить

import javax.ejb.Singleton; 

С

import javax.inject.Singleton; 

Он работал для меня. Я использую базу данных Derby, это дело для вас?

0

Я решил проблему. Если я помню, я создал новый ресурс JDBC и новый пул соединений JDBC.

Следующая ссылка объясняет, как создать ресурс JDBC и пул соединений JDBC. General Steps for Creating a JDBC Resource

Ресурс JDBC и пул соединений JDBC можно создать с помощью консоли администратора или утилиты asadmin.

Следующая ссылка объясняет, как использовать утилиту asadmin. Using the asadmin Utility (я использовал эту утилиту, потому что в консоли администратора, когда я попытался создать ресурс JDBC и соединение JDBC Pool появилась ошибка)

В консоли администратора, в созданном ресурсе JDBC поле «Pool Name» должна равно имени созданного пула соединений JDBC.

После этого я следовал следующие действия:

  1. Configurations-> Сервер-config-> Контейнер EJB
  2. Выберите вкладку EJB Timer Service
  3. Заполните поле Таймер Datasource с именем JDBC ресурс.
  4. Перезапустите сервер

Любой вопрос, пожалуйста, не стесняйтесь.

С наилучшими пожеланиями Рафаэль Сантос Коста

0

Я разрешил "же" проблема в

  1. удаления GlassFish/Домены/доменного имени/ПОЛУЧЕННЫЕ папку, полностью

  2. здание приложение снова

  3. возобновление применения стеклянной рыбы

В моем случае я установил новую версию своего приложения после операции Pull/Push с GIT, и мое приложение перестало работать. Поэтому я знаю, что до этой новой сборки мое приложение хорошо работало и что на Glassfish ничего не изменилось.

я нашел объяснение на другом следующем сайте https://dzone.com/articles/solving-ejb-timer-service-not-available-error-in-g-1

Glassfish сервер приложений использует встроенный JavaDB сохраняться состояние имеющихся таймеров EJB. Неправильная настройка ресурса данных для службы таймера предотвращает восстановление таймеров EJB и, в конечном счете, от правильной работы. В этом случае обычно возвращается сообщение об ошибке «Недействительный таймер EJB». Эта проблема предотвращает запуск или развертывание любого приложения, использующего службу таймера EJB.

Есть два доступных для преодоления таких блокирующих ситуаций процедуры:

Первым решения пойти в JDBC пулов соединений и дважды проверить здоровье пула соединений Timerpool пинга его. Если ping не удается, пул соединений должен быть проверен или переопределен.

Если проверка соединения пула удалась, проблема может заключаться в наличии файла маркера таймера EJB. Файл маркера создается всякий раз, когда возникает проблема во время запуска или восстановления службы таймера EJB.

Удаление маркера решит проблему. Файл-маркер «ejb-timer-service-app» расположен в папке as-install-parent/glassfish/domains/domain-name/generated/ejb /. Не забудьте перезапустить Glassfish!

Смежные вопросы