2016-07-30 43 views
1

Ich habe den folgenden Code:EJB Timer Service nicht verfügbar ist, Undeployment fehlgeschlagen für Kontext

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()); 
} 
} 

Nach Bereitstellen der Anwendung erscheint die Fehlermeldung „EJB Timer Service ist nicht verfügbar“.

das Problem zu lösen ich diese Schritte folgen:

  1. Zugang der Glash Fisch Admin-Konsole (http://localhost:4848)
  2. Zum Konfigurationen ->server-config ->EJB Container
  3. Wählen Sie die Registerkarte EJB Timer Service
  4. Füllen Sie dann Timer-Datenquelle: mit JDBC-Ressource (i verwendet "jdbc/projecto_final")
  5. Restart der Server

Wie in Set/configure the EJB Timer Service’s DataSource vorgeschlagen.

Dies führte jedoch dazu, dass der TimerService nach einiger Zeit nicht mehr funktionierte. Nach dem Bereitstellen der Anwendung erscheint folgende Fehlermeldungen:

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 

Das Set/configure the EJB Timer Service’s DataSource auch dieses Problem erwähnen, und eine Lösung in Glassfish DeploymentException: Error in linking security policy for präsentieren.

Die Lösungen präsentiert in Glassfish DeploymentException: Error in linking security policy for besteht grundsätzlich darin, einige Dateien zu löschen. Die Antwort mehr gestimmt schlägt vor, im Grunde die folgenden:

  1. stoped den Glassfish Server
  2. von allen Inhalten Gelöschte glassfishhome/Glasfischen/domains/Domänenname/erzeugt
  3. Glassfish Gestartet

habe ich installiert der "GlassFish Server 4.1.1", und das funktioniert nicht.

Die zweite Antwort stimmte eher auf die im Grunde die folgenden:

1.All das ist erforderlich, um dieses Problem zu beheben, wird die gesamte OSGi-Cache unter $ löschen GLASSFISH_HOME/Glasfischen/domains // osgi-Cache

Das funktioniert auch nicht.

Was kann ich tun?Jede Hilfe wird sehr

Mit freundlichen Grüßen schätzen,

Rafael Costa

+0

Ich denke, Timer sind sehr wichtig, wahrscheinlich haben viele Menschen das gleiche Problem, und sie wissen nicht, wie man es löst. –

+0

Warum denkst du das? Zunächst sollten Sie beginnen, indem Sie Ihre Frage richtig markieren. Wo im Code, den du gepostet hast, siehst du 'jsf'? Ich würde vorschlagen, es ejb 'Tagging es scheint sehr stark GlassFish verwandt, also fügen Sie dieses Tag (und entfernen Sie die JSF-Tag) – Kukeltje

+0

@Kukeltje Vielen Dank. –

Antwort

2

ersetzen

import javax.ejb.Singleton; 

Mit

import javax.inject.Singleton; 

Er arbeitete für mich. Ich verwende die Derby-Datenbank. Ist das bei Ihnen der Fall?

0

Ich löste das Problem. Wenn ich erinnere, habe ich eine neue JDBC-Ressource und einen neuen JDBC-Verbindungspool erstellt.

Der folgende Link erläutert, wie Sie eine JDBC-Ressource und einen JDBC-Verbindungspool erstellen. General Steps for Creating a JDBC Resource

Die JDBC-Ressource und der JDBC-Verbindungspool können mit der Verwaltungskonsole oder dem Dienstprogramm asadmin erstellt werden.

Der folgende Link erläutert die Verwendung des Dienstprogramms asadmin. Using the asadmin Utility (I verwendet, um dieses Dienstprogramm, weil in der Admin-Konsole, wenn ich versuchte, eine JDBC-Ressource und eine JDBC Connection Pool erschien, einen Fehler zu erzeugen)

in der Administratorkonsole, in der erstellten JDBC-Ressource des Feld „Poolname“ sollte entspricht dem Namen des erstellten JDBC-Verbindungspools.

Danach folgte ich vor:

  1. -Konfigurationen> Server-config-> EJB Container
  2. Wählen Sie die Registerkarte EJB Timer Service
  3. Füllen Sie das Feld Timer-Datenquelle mit dem Namen des JDBC Ressource.
  4. den Server

Jede mögliche Frage wenden Sie sich bitte neu starten.

Mit freundlichen Grüßen Rafael Santos Costa

0

Ich habe die "gleiche" Problem in

  1. Löschen Glasfischen/domains/domain-name/erzeugte Ordner vollständig wieder

  2. Bauantrag gelöst

  3. Neustart Glassfish-Anwendung

In meinem Fall habe ich eine neue Version meiner Anwendung nach einem Pull/Push-Vorgang mit GIT installiert und meine Anwendung hat aufgehört zu arbeiten. Ich weiß also, dass meine Anwendung vor diesem neuen Build gut funktionierte und dass bei Glassfish nichts geändert wurde.

Ich habe eine Erklärung auf einer anderen folgenden Website https://dzone.com/articles/solving-ejb-timer-service-not-available-error-in-g-1

Der Glassfish-Anwendungsserver verwendet, um seine eingebettete JavaDB den Zustand seiner verfügbaren EJB Timer zu anhalten. Wenn Sie die Datenressource für den Timer-Dienst nicht richtig einstellen, wird verhindert, dass die EJB-Timer wiederhergestellt werden und möglicherweise nicht ordnungsgemäß funktionieren. In diesem Fall wird normalerweise die Fehlermeldung "EJB-Zeitgeberdienst nicht verfügbar" zurückgegeben. Dieses Problem verhindert, dass jede Anwendung, die einen EJB-Zeitgeberdienst verwendet, gestartet oder bereitgestellt wird.

Es gibt zwei Verfahren zur Verfügung, um solche Situationen zu überwinden Sperr:

Die erste Lösung ist zu gehen, um JDBC-Verbindungspools und überprüfen die Gesundheit des Timerpool Verbindungspools durch Pingen. Wenn der Ping fehlschlägt, muss der Verbindungspool überprüft oder neu definiert werden.

Wenn das Pingen des Verbindungspools erfolgreich ist, könnte das Problem das Vorhandensein der EJB-Timer-Marker-Datei sein. Eine Markierungsdatei wird immer dann erstellt, wenn während des Starts oder der Wiederherstellung des EJB-Zeitgeberdienstes ein Problem auftritt.

Das Löschen des Markers löst das Problem. Die Markierungsdatei "ejb-timer-service-app" befindet sich unter as-install-parent/glassfish/domains/domainname/generated/ejb /. Vergessen Sie nicht, Glassfish neu zu starten!