Salve a tutti.
Ho un server spring con parti delle classi in java e parte in kotlin che implementa un manager di Firebase.
Ho impostato il codice nel seguente modo:
Classe FirebaseStarter (Kotlin)
La variabile statica loaded mi serve perch� ho notato che la classe viene eseguita due volte a meno di non commentare questa sezione in web.xml:codice:@Component @EnableScheduling class FirebaseStarter { @Autowired lateinit var manager: FirebaseManager private var running = false @PostConstruct fun runFirebase() { if (!FirebaseStarter.loaded) { try { manager.initManager() manager.startListeners() } catch (e: Exception) { e.printStackTrace() } FirebaseStarter.loaded = true } } @Scheduled(fixedDelay = 90 * 1000) private fun updateMyMethod() { manager.mymethod() } @PreDestroy private fun stopFirebase() { manager.shutdownFirebaseManager() } companion object { private var loaded = false } }
ma non avendo ancora trovato una guida illuminante sul fatto che sia davvero corretto commentare questa sezione ho preferito lasciarla e gestire la cosa con un booleano (per intenderci il fatto di commentare la parte su web.xml l'ho trovata qui http://stackoverflow.com/questions/1...xecuting-twice )codice:<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
Se qualcuno ne sapesse di pi� sulla questione ben felice di leggerne il parere.
e poi la classe FirebaseManager (sempre in Kotlin)
Il tutto compilato con java8 e operativo in tomcat8.codice:@Service class FirebaseManager { private var myEventRef: DatabaseReference? = null private var myEventListener: MyEventListener? = null fun initManager() { val options = FirebaseOptions.Builder() .setCredential(mycredentials) .setDatabaseUrl(myurl) .build() FirebaseApp.initializeApp(options) myEventListener = MyEventListener() } private fun listenMyListener() { myEventRef= FirebaseDatabase .getInstance() .getReference() .child(firebase_url) myEventRef!!.addChildEventListener(myEventListener) } fun startListeners() { listenMyListener() } fun shutdownFirebaseManager() { myEventRef!!.removeEventListener(myEventListener) } }
Quello che noto � che se tiro gi� il server su tomcat vedo degli errori relativi al fatto che risulta esserci dei thread ancora attivi e spesso il nome del thread incriminato � relativo a Firebase quindo vorrei sapere se bisogna fare qualche operazione per chiudere la sessione di firebase aperta con FirebaseApp.initializeApp
Grazie a chi risponder�
Buona giornata
Sandro

Rispondi quotando