Domanda

Sono nuovo per Wicket e vorrei mantenere un'applicazione web da dentro se stesso utilizzando una sorta di pagina di amministrazione di manutenzione per l'esecuzione di clean-up, aggiornamenti DB, il recupero e così via. Dal momento che ho intenzione di usare Hibernate o simile per l'associazione dati vorrei innescare un riavvio completo dell'applicazione da dentro se stesso senza dare tutti coloro che saranno in grado di eseguire queste azioni il gestore di password Tomcat accompagna.

Per quanto ho scoperto, non sembra essere un modo semplice per innescare un vero e proprio riavvio di un'applicazione Web Java senza la password manager? Tuttavia, dal momento che ci sono molti webapps Java aventi tale funzionalità di riavvio nei loro pannelli di amministrazione, suppongo che dovrebbe essere possibile innescare un riavvio sia in contenitori di servlet specifici o alcuni framework web. Essi hanno in qualche modo a che fare il trucco? (O forse in realtà non ripartono da zero, ma solo reinizializzare senza un riavvio pulito?)

non ho trovato nulla di Wicket o Tomcat essere in grado di essere attivato con un arresto e riavviare dalle proprie applicazioni anche se ci sono alcuni metodi interni in Wicket che potrebbero essere in grado di farlo? (Si può accedere pubblicamente, ma JavaDoc consiglia contro di essa dal momento che sono solo per uso interno)

Dal punto di vista della sicurezza non vedo proprio il motivo per cui la domanda non dovrebbe essere in grado di richiedere un tale riavvio dal proprio codice.

si può fare, e se sì, che cosa dovrò fare nella mia richiesta per averlo riavviato?

Modifica Giusto per rendere la mia domanda più precisa: Né l'utente né l'applicazione dovrebbe avere alcuna password che potrebbero essere utilizzati per accedere all'interfaccia manager di Tomcat. Stavo pensando di qualche metodo da chiamare o qualche bandiera per impostare per avere il contenitore di servlet essere attivato per riavviare quella particolare applicazione, senza la necessità di autorizzazione a farlo. I miei pensieri sono che dato che l'applicazione è in esecuzione in un servlet container che dovrebbe avere un modo per spegnere ed essere riavviato. Se questo non è possibile, in generale, con i server di applicazioni Java, ci può essere un modo per farlo sul livello di applicazione effettuando una chiamata al quadro underlaying (Wicket in questo caso) per terminare tutte le thread in esecuzione, ripulire il più possibile e il riavvio l'applicazione utilizzando il quadro; qualcosa come un "reboot soft" dello stack app.

È stato utile?

Soluzione

E 'per lo più irrilevante per la tua domanda che la vostra applicazione sta usando Wicket. Si tratta di un'applicazione Web Java utilizzando il framework Wicket. Formulata in questo modo, la vostra ricerca di come riavviare una web app, utilizzando il contenitore Tomcat. Se si sceglie un altro contenitore di applicazioni web (molo ecc), allora si avrebbe bisogno di modificare la procedura.

Si può colpire questo URL per avviare un app: http://localhost:8080/manager/start?path=/myapp e http://localhost:8080/manager/stop?path=/myapp per fermare la vostra applicazione. Cambia / myapp al contesto delle applicazioni, e si dispone di start / stop di controllo.

È quindi possibile affrontare le questioni di password internamente nel codice.

Alla luce del chiarimento si potrebbe guardare questa documentazione Tomcat e utilizzare JMX. Tuttavia, anche JMX è protetto da password. Non esiste uno standard per ottenere i controlli contenitore dal web app.

Altri suggerimenti

Sto cercando di pensare a se / quanto altri framework web davvero supportano questa. Penso che Jim è a punta al giusto livello della soluzione. Indipendentemente da ciò che framework utilizzato un contenitore web dovrebbe consentire il riavvio di una web app contenuta. Tomcat richiederebbe l'applicazione di gestione di essere a disposizione. Sembra che (dal mio googling) che Jetty espone questa funzionalità tramite JMX MBeans. Così la funzionalità di riavvio potrebbe non essere portabile tra i contenitori.

Per fare questo portatile, in qualsiasi contesto, penso che avrei dovuto isolare ciò che le cose sono necessarie per riavviare. Se si tratta di ibernazione ri-inizializzare la fabbrica della sessione. Se si tratta di configurazione di primavera, questo può essere certamente più invadente, ma la sostituzione o la riconfigurazione fagioli sembra la strada da percorrere. Se si tratta di i18n o risorse di markup wicket mi crede può aiutare in questo già.

Inoltre vi incoraggio a dare un'occhiata a JMX. È possibile disattivare l'autenticazione per JMX, nel qual caso assicurarsi che la porta JMX non è raggiungibile da internet (filtrare la porta sul firewall basato su host, o si legano solo a un indirizzo IP locale). JMX aveva lo scopo di uniformare il monitoraggio e il controllo delle applicazioni, contenitori in un mondo Java EE distanza, in modo più o meno fornisce l'infrastruttura che stai cercando.

In alternativa utilizzare un altro contenitore web (preferibilmente un incorporato uno) e di gestire anche riavviato il contenitore dal codice Java.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top