Autorun in EJB3

Fórumok

hello,

Egy adatgyűjtő alkalmazást migrálnék EJB3 alá. Van arra mód, hogy egy singleton-bean automatikusan elinduljon amikor az appserver elindul, vagy telepítik az appserver-re?
Ebben fut egy háttér-task, ami a folyamatos adatgyűjtést végzi.

Hozzászólások

Igen, ezt én is megtaláltam, de vagy kell még valami, vagy Glassfish alatt másképp kell.



@Singleton
@LocalBean
@Startup

public class MonitorSingleton implements MonitorSingletonLocal {
	
...	
	@Resource
    TimerService timerService;
    
    private long pollingTime;

	/**
     * Default constructor. 
     */
    public MonitorSingleton() {
    	System.out.println("Starting MonitorSingleton"); //$NON-NLS-1$
    	try {
             ...
	    	this.startTimer();
    	}
    	catch (Exception e) {
			log.error(e);
		}
    }

...
	@Timeout
	protected void background() {
		log.debug("Start polling"); //$NON-NLS-1$
		try {
			...
		}
		catch (Exception e) {
			log.error(e);
		}
		finally{
			this.startTimer();			
		}
	}
	
	private void startTimer() {
    	@SuppressWarnings("unused")
		Timer timer = this.timerService.createTimer(this.pollingTime, "Restart");		 //$NON-NLS-1$
	}

Emlekeim szerint a konstruktor futasa alatt a @Resource-os adattagok meg nem voltak injektalva, de ennek nezzz utana!

Mi a hibajelenseg ,exception, valami..?

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

Atraktam a postconstruct ala, de semmi. Pont ez a bajom, hogy nincs log, nincs kiiras.
Eclipse alol probalkozom, eddig Netbeans alatt csinaltam EJB app-okat, most probalok atkoltozni eclipse ala. A console fulon:

Waiting for domain1 to start .....................
Successfully started the domain : domain1
domain Location: /home/zamek/glassfish-3.1.1/glassfish/domains/domain1
Log File: /home/zamek/glassfish-3.1.1/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Debugging is enabled. The debugging port is: 9009
Command start-domain executed successfully.

Meg allitgatok a gf loglevel-en...

Pont azt szeretnem, hogy ha az appservert ujrainditjak, vagy az ejb-t deploy-oljak, automatikusan induljon el, mert ez egy adatgyujto, mindig futnia kell, akkor is, ha senki nem akar hozzakapcsolodni.

Hatterben fut egy task, ami adatgyujt es adatbazisba tolja a megszerzett adatokat, amit valakik gwt klienssel kerdezhetnek/parameterezhetnek.

milyen adatot? DAQ? rendszerstatisztikák?

Mert a userek igenye folyton no. Eddig a vizualizalast egy java app vegezte, de most mar szeretnenek tavolrol web-en monitorozni, ill. eygszerre tobb helyrol nezegetni/beavatkozni.

A valasztasok:

1. A meglevo java app-ba beepitek egy sajat fejlesztesu web servert (elsore es sokadszorra is butasagnak tunik)
2. Migralom a meglevo adatgyujtot egy appserver ala.

A 2. eseteben lehet eclipse rcp klienssel, gwt-vel monitorozni/parameterezni. Ha van appserver, akkor kesobb szabvanyos feluletekre tudok szolgaltatni.

Teny es valo, nem egy feature gazdag tortenet. De hogy ezt milyen frameworkkel otvozod, es milyen servleteket tolsz ala, az mar csak rajtad mulik.

Raadasul sokan racuppantak a temara, a multkor googleztam ra (nem egy egyszeru...), mar par dologhoz van tamogatas.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Ejb osztaly:

import java.util.Date;

import javax.annotation.PostConstruct;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Startup;

@Singleton
@Startup
public class TestEjbStartup {

@PostConstruct
public void alma() {
System.out.println("######## TestEjbStartup");
}

@Schedule(second = "*/1", minute = "*", hour = "*", persistent = false)
public void doWork() {
System.out.println("timer: " + new Date());
}
}

Ezt asadmin deploy parancssal bevagba a gf-be, mukodott, miutan ujrainditottam a gf-t akkor is elindult (gf 3.1.1). Remelem segit. Az indentalas nem tudom hova tunt :(

Kiprobaltam NB alatt egy egyszeru test singleton-t es mukodott rendesen. Ezutan visszatertem az eclipse ala es ujra problakoztam.
Az elso hiba az volt, hogy a gepemen gf 3.1.1 volt es en gf server opensource edition-t valasztottam. Ezt beallitva mar elindul a singleton es mukodik is, lehet debug-olni, de a kodban elhelyezett system.out.println uzeneteket nem latom sehol. A NB alatt ez jo kis debugolasi lehetoseg volt.

Probaltam a a server-en jobb gombra behozni a log-ot, de abban persze ezek nem latszanak.
Mukodik ez Eclipse alatt?

Azt meg tudom oldani a gyari loggerrel, hogy ha a file eler egy meretet, akkor zarja le es nyisson egy ujat, ill. hogy n peldanyt tart meg a logfile-okbol es a legregebbit torli?

Ha ezt meg tudnam oldani a Logger-rel, az nagy segitseg lenne, mivel honapokig megy ugy a szerkezet, hogy admin nem nez ra. Ez egy panel pc touch screen-nel, a tapperolo kezelo biztos nem fog karbantartani.

Vagy eseteleg egy quartz task, amely ezt megteszi?

Nem tudom, hogy valaki írta-e már. A tisztán EJB3 megoldás az, hogy lesz egy war-od is az ear-on belül, amiben írsz egy ServletContextListenert. Innen pedig fel tudod már hívni az EJB-det startupkor. Ez elvileg nem konténerspecifikus megoldás.