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)
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
}
}
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:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
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 )
Se qualcuno ne sapesse di pi� sulla questione ben felice di leggerne il parere.
e poi la classe FirebaseManager (sempre in Kotlin)
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)
}
}
Il tutto compilato con java8 e operativo in tomcat8.
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