Edit "server.xml" di Tomcat tanpa me-restart server?

10

Saya mengedit file "server.xml" di conffolder Tomcat 8 . Saya menambahkan Hosttag baru untuk situs web baru.

Haruskah saya memulai kembali server Tomcat?

Bisakah saya membuat Tomcat menguraikan dan menerapkan yang baru diedit server.xml?

Basil Bourque
sumber
@ Dawud Terima kasih atas tautannya, tapi yang kita bicarakan <Host>, tidak <Context>.
Basil Bourque
2
Apapun, bagian penting adalah yang server.xmldiurai sekali saat startup. Itu tidak dapat dimuat ulang tanpa restart.
dawud
@ Dawud Terima kasih. Saya melihat penyebutan itu sekarang. Saya membuat Jawaban ini sehingga saya bisa menutup Pertanyaan ini.
Basil Bourque

Jawaban:

14

Saya akan mulai dengan mengatakan bahwa pertanyaannya tidak sepenuhnya dibuat dengan benar, karena sangat mungkin untuk benar-benar mengedit file tanpa me-restart Tomcat, tetapi perubahannya diabaikan oleh proses yang berjalan.

Pertanyaan sebenarnya adalah bagaimana menerapkan perubahan server.xmltanpa memulai ulang Tomcat.

Mengumpulkan informasi dari proses permulaan dan halaman pemuat kelas pada dokumentasi online Tomcat, dimungkinkan untuk memahami ini secara lebih rinci.

Lebih khusus, dijelaskan di serverStartup.txt dan diagram UML dari proses startup dan bagian-bagian yang relevan dapat diringkas sebagai berikut:

Sequence 1. Start from Command Line
  ...
Sequence 2. Process command line argument (start, startd, stop, stopd)
Class: org.apache.catalina.startup.Bootstrap (assume command->start)
What it does:
a) Catalina.setAwait(true);
b) Catalina.load()
    b3) createStartDigester()
        Configures a digester for the main server.xml elements
    b4) Load the server.xml and parse it using the digester
        Parsing the server.xml using the digester is an automatic
        XML-object mapping tool, that will create the objects defined
        in server.xml
        Startup of the actual container has not started yet.
    b6) Calls initialize on all components, this makes each object
        register itself with the JMX agent.

Ini terjadi setelah penciptaan classloader Bootstrap dari mesin servlet (Catalina).

Dengan informasi ini, jelas sekarang ketika dalam proses startup server.xmlfile diurai, tetapi tidak benar-benar menjawab pertanyaan mengapa diperlukan untuk memulai kembali Tomcat untuk menerapkan perubahan pada file ini.

Jawabannya adalah bahwa beberapa bagian dapat dimodifikasi secara dinamis saat runtime menggunakan JMX . Agar hal ini dimungkinkan, MBean yang sesuai harus didaftarkan (b6 langkah di atas), dan juga harus menerima operasi SET (beberapa MB hanya memiliki antarmuka GET).

Dalam kasus spesifik Anda, tidak ada cara untuk membuat dan mendaftarkan Host baru pada saat runtime karena tidak ada ketentuan untuk itu, dan ini adalah alasan mengapa Anda harus memulai kembali proses Tomcat untuk membuat bootloader classloader instantiate objek itu dan mendaftarkannya dengan Agen JMX.

Setelah itu, dimungkinkan untuk memodifikasi host itu dari klien JMX seperti jconsoleyang dibundel dengan JDK apa pun.

Hubungkan Anda jconsoleke Tomcat yang diaktifkan JMX dan telusuri Host MBean untuk memeriksa semua atribut yang tersedia:

jconsole menunjukkan atribut Host MBean

dan periksa semua operasi yang tersedia (salah satunya ditunjukkan di bawah sebagai contoh):

jconsole menampilkan contoh operasi pada Host MBean

dawud
sumber
1
+1 untuk memperkenalkan saya ke JMX.
Raja Anbazhagan
7

Tidak. Mulai ulang diperlukan.

Halaman dokumen Tomcat untuk <Context>menyebutkan:

... file conf / server.xml utama tidak dapat dimuat ulang tanpa me-restart Tomcat.

Basil Bourque
sumber
1
Suara positif itu harus masuk ke @dudud ... tidak ada komentar lagi. Jawaban buruk untuk seseorang yang mengatakan we’re talking about <Host>, not <Context>.-1 maaf, jarang saya melakukan ini, tetapi saya harus ...
krisFR
@krisFR dawud bebas menulis Jawaban kapan saja, dulu atau sekarang. Tidak semua orang memainkan game ini dengan suara terbanyak.
Basil Bourque
1
@ krisFR, Basil Bourque Saya telah menambahkan jawaban yang lebih terperinci untuk membahas hal ini secara lebih umum. Semoga bermanfaat.
dawud