Mengapa kucing jantan suka menghapus file context.xml saya?

24

Saya sedang mengembangkan aplikasi Java berbasis web di tempat kerja dan (jelas) harus menjalankannya secara lokal selama pengembangan. Saya telah menemukan dokumen Tomcat dan memiliki file context.xml yang sesuai /etc/tomcat6/Catalina/localhost/tetapi sering kali, Tomcat memutuskan untuk menghapusnya! Yang berarti saya harus meletakkannya kembali dan memulai kembali Tomcat.

Mengapa ini melakukan ini? Saya telah mencari dokumen Tomcat tentang hal itu dan tidak ada yang lebih bijak.

(Oh ya: itu sebenarnya tidak disebut context.xmltetapi owners.xmlkarena itu adalah awalan jalur HTTP untuk aplikasi ini.)

Memperbarui

Saya sekarang melihat Tomcat menghapus file sementara Tomcat sedang berjalan . Saya rasa saya perlu mengajukan bug ...

ahli statika
sumber
Punya masalah ini. Sepertinya ketika Anda mengganti perang Anda, hal itu menyebabkan tidak adanya aplikasi yang menyebabkan penghapusan file konteks. Saya tidak memiliki solusi tetapi ingin memilikinya yang lebih nyaman daripada reloadable = false stackoverflow.com/questions/4032773/…
artemb

Jawaban:

18

Ringkasan cepat : ada beberapa kondisi (seperti mengubah file perang, menghapus aplikasi web, atau menggantinya dengan konten baru) di mana tomcat akan menganggur konteks termasuk menghapus file konteks.

Detail : Apakah tomcat melakukan atau tidak melakukan autoDeployment (berarti memeriksa perubahan dalam deskriptor .xml Anda serta memeriksa perubahan dalam direktori webapp) didorong oleh:

  1. server.xml diterjemahkan dalam bagian $ CATALINA_HOME / conf / server.xml:

    <Host name = "localhost" appBase = "webapps" unpackWARs = "true" autoDeploy = "true" xmlValidation = "false" xmlNamespaceAware = "false">

  2. Anda juga dapat mengatur properti ini di file konteks Anda yang melebihi nilai

Mengutip dokumen untuk kasus-kasus ketika autoDeploy = true dapat menyebabkan penghapusan file konteks Anda:

  • Menghapus file PERANG akan memicu pengabaian aplikasi dengan menghapus direktori diperluas yang terkait, file konteks dan direktori kerja.
  • Menghapus direktori akan memicu pengangguran aplikasi dengan menghapus file konteks dan direktori kerja yang terkait.
  • Memperbarui file PERANG akan memicu pengabaian aplikasi dengan menghapus direktori yang diperluas, file konteks, dan direktori kerja yang terkait.
  • Memperbarui direktori (bukan isi direktori) akan memicu pengabaian aplikasi dengan menghapus file konteks dan direktori kerja yang terkait.

Detail lengkap : http://tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment

Jan Zyka
sumber
Ini bukan jawaban yang lengkap - lihat serverfault.com/faq#deletion
Jenny D mengatakan Reinstate Monica
:) tolong bantu diri Anda (sepertinya penyorotan sintaks bekerja sedikit berbeda dari pada stackoverflow yang menghapus bagian dari jawaban sebelumnya)
Jan Zyka
Masalahnya adalah jika Anda hanya menambahkan tautan, target tautan tersebut mungkin hilang, sehingga jawabannya tidak berguna. Itu sebabnya serverfault.com mendorong Anda untuk mengirim jawaban yang sebenarnya, bukan hanya tautannya. Dan ketika saya berkomentar, sisa teks tidak terlihat. Saya tetap merekomendasikan untuk mengirim tanggapan yang lebih lengkap daripada ringkasan singkat tautan.
Jenny D mengatakan Reinstate Monica
1
Itu tidak benar. Jawaban asli berisi (dan masih) ringkasan singkat tentang apa yang dapat Anda temukan di bawah tautan. Tanpa tautan, jawabannya tetap masuk akal dan bersama dengan tautan Anda dapat menemukan detailnya.
Jan Zyka
Tapi saya tidak berencana untuk bersikap ofensif, jadi maaf jika kedengarannya seperti itu :) Saya tidak banyak ke dalam web ini, hanya menyelesaikan hal yang sama dan ingin berbagi.
Jan Zyka
5

Jika Anda tidak ingin fitur autoDeploy , dalam lingkungan produksi misalnya, Anda dapat mempertimbangkan atribut berikut di file konteks conf / Catalina / localhost:

  • autoDeploy = "false"
  • dan deployXML = "false"

autoDeploy = "false" mungkin tidak bekerja sendiri karena application context.xml (dalam META-INF) dapat mengesampingkan pengaturan server.xml dari autoDeploy.

  • Aplikasi META-INF / context.xml akan digunakan dalam lingkungan pengembangan, dengan autoDeploy
  • Konteks conf / Catalina / localhost dalam produksi, tanpa autoDeploy.

dokumentasi atribut deployXML atribut dokumentasi layak dibaca (§ Implementasi Standar).

Kasus pengguna autoDeploy yang lengkap, dan ketika konteks dihapus: mis. Aplikasi tidak dipekerjakan, kasus pengguna didokumentasikan dapat ditemukan di sini .

Gabriel Glenn
sumber
2

Tidak bisa menjawab bagian Why why.

Namun, tautan ini menyatakan Anda bisa menghentikan ini dengan mengatur autoDeploy="false"inserver.xml

JoseK
sumber
1
Di bawah tomcat7 autoDeploy = "false" tidak ada bedanya :(
Joseph Lust
1

Jujur saya tidak tahu apa alasan di balik Tomcat melakukan ini, tetapi cobalah menambahkan atribut XML berikut ke elemen konteks Anda

reloadable="false"

Jadi konteks Anda dapat terlihat seperti ini:

<Context path="/" docBase="/some/path/name" reloadable="false">
<!-- Context related stuff -->
</Context>

Ini harus menjaga Tomcat dari menghapus file

Pria itu
sumber
Sayangnya, itu membuat pengembangan lebih sulit karena saya harus me-restart Tomcat setelah setiap build.
Statika
checkout jrebel untuk membantu dalam pengembangan ini: zeroturnaround.com/jrebel
harmanjd
0

Saya menyadari ini adalah utas lama, tetapi saya pikir saya akan membagikan apa yang saya temukan untuk memperbaiki masalah ini ...

Saya telah memiliki masalah yang sama persis dengan file context.xml saya untuk versi desktop tomcat saya menjadi musnah setiap kali saya akan menggunakan salinan baru file perang untuk aplikasi saya.

Masalahnya adalah karena saya membuat perubahan pada file ini secara langsung pada sistem file. Apa yang diperbaiki masalahnya adalah mengedit file context.xml melalui editor Eclipse saya. Di dalam Eclipse saya, ada proyek "server" yang setelah Anda mengembangkannya, Anda dapat melihat beberapa file, seperti context.xml dan server.xml. Tampaknya jika Anda memodifikasi file dari sini alih-alih pergi ke sistem file, perubahan Anda akan disimpan.

Saya menemukan solusi ini di utas berikut: https://www.liferay.com/community/forums/-/message_boards/message/16511799

Saya harap ini membantu orang lain!

-StephenS

pengguna216156
sumber
0

Masalah umum seperti yang dijelaskan oleh judul ditutupi oleh penyebaran kembali dari perang tanpa menghapus konteks yang masih menjadi masalah terbuka saat ini.

Ada perbedaan yang diakui antara penggunaan kembali yang tidak menghapus konteks, dan penggunaan setelah berhenti digunakan di mana penghapusan itu menghapus konteks. Dokumentasinya sudah ketinggalan zaman, dan manajer GUI masih tidak mendukung penyebaran kembali.

pengguna250343
sumber
-1

Kadang-kadang perlu memiliki nilai yang berbeda untuk aplikasi di server, misalnya jalur untuk menyimpan file yang diunggah. Di lingkungan pengembang mabe kami memiliki sesuatu seperti ini:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" reloadable="false">
     <Parameter name="rutaTrabajo" value="C:\Larry\Proyectos\app\rutaTrabajoxx" override="true"/>
</Context>

Tetapi di server jalurnya berbeda:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/App/rutaTrabajo" override="true"/>
</Context>

Saya juga memiliki masalah yang sama, kucing jantan menghapus context.xml (meapp.xml) dari conf / Catalina / localhost

Untuk mengatasi saya menggunakan context.xml.default, di jalur yang sama saya membuat file bernama context.xml.default dan di dalam konfigurasi put yang ingin saya pegang:

 cat context.xml.default
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/ParkiMeApp/rutaTrabajo" override="true"/>
</Context>

Jadi, ketika memindahkan kemudian aplikasi, parameter confir masih ada.

Larry
sumber