Lucee 8.0: apa yang berubah dan apa yang perlu diuji
Lucee 8.0 kini release candidate, bukan beta. Ketahui perubahan yang mematahkan kod, apa yang perlu diuji, dan cara uji di slot ujian sebelum naik taraf.

Kandungan
- Lucee 8.0: apa yang berubah dan apa yang perlu diuji
- Status semasa: RC, bukan beta, belum keluaran penuh
- Java 21: keperluan paling asas
- Perubahan konfigurasi yang senyap
- Benang maya untuk lelaran selari
- Susunan kunci scope tidak lagi teratur
- Enjin PDF baharu
- Markdown dan SMB berpindah ke sambungan
- Jadual jenis perubahan yang sering mematahkan kod
- Perkara yang perlu diuji sebelum naik taraf
- Cara menguji di slot ujian
- Soalan Lazim (FAQ)
- Sumber
Lucee 8.0: apa yang berubah dan apa yang perlu diuji
Lucee 8.0 ialah keluaran utama seterusnya selepas siri 7.x, dan pada masa penulisan ia berada dalam status release candidate, bukan lagi beta tetapi juga belum keluaran penuh. Versi terkini ialah 8.0.0.186 RC, selepas dua beta 8.0.0.126 dan 8.0.0.172. Artikel ini meringkaskan apa yang berubah berdasarkan dokumentasi rasmi, dan perkara yang perlu anda uji sebelum menaik taraf.
Status semasa: RC, bukan beta, belum keluaran penuh
Di laman muat turun Lucee, barisan 8.0 diletakkan di bawah label EDGE, dengan 8.0.0.186 berstatus Release Candidate dan 8.0.0.172 serta 8.0.0.126 berstatus Beta. Release candidate bermaksud pasukan percaya versi ini hampir siap dan meminta komuniti mengujinya secara meluas, tetapi ia belum dijamin sebagai keluaran penuh dan butiran masih boleh berubah.
Jadi jangan letakkan 8.0 pada pelayan pengeluaran utama anda dahulu. Gunakannya di persekitaran ujian untuk mengenal pasti masalah lebih awal, supaya apabila keluaran penuh tiba, anda sudah bersedia. Ini selari dengan amalan naik taraf 7.1 ke 8.0 yang kami gariskan secara berasingan.
Keluaran besar seperti 8.0 biasanya membawa perubahan arkitekstur yang mendalam, bukan sekadar fungsi baharu. Dalam kes 8.0, dua perubahan besar ialah penulisan semula cara konfigurasi dimuatkan dan penggunaan benang maya Java secara lalai untuk fungsi lelaran selari. Perubahan sebegini menyentuh banyak aplikasi secara tidak langsung, walaupun kod CFML anda sendiri tidak berubah langsung.
Dokumentasi rasmi menyediakan dua halaman penting untuk 8.0: Breaking Changes between Lucee 7.1 and 8.0, dan Upgrade Lucee 7.1 to 8.0: Checklist for AI Coding Agents. Kedua-duanya menjadi asas artikel ini, dan saya hanya menulis perkara yang disahkan daripada sumber tersebut.
Java 21: keperluan paling asas
Perubahan paling keras dalam 8.0 ialah keperluan Java. Lucee 7.1 memerlukan minimum Java 11, tetapi 8.0 dikompil untuk Java 21 dan bundle OSGi-nya mengisytiharkan JavaSE-21, jadi ia tidak akan mula pada Java 11 atau 17. Ini ialah penyekat, bukan amaran.
Jika anda menjalankan 7.1 di atas Java 17 atau 21, anda perlu memastikan JVM anda ialah Java 21 atau lebih baharu sebelum menaik taraf. Bagi pengguna Docker, ini bermakna menukar imej asas daripada contohnya eclipse-temurin:17-jre kepada eclipse-temurin:21-jre. Butiran penuh ada dalam Java 25 dan Lucee.
Perubahan konfigurasi yang senyap
Perubahan paling berbahaya dalam 8.0 ialah perubahan konfigurasi yang senyap, iaitu yang tidak menghasilkan ralat tetapi mengubah tingkah laku. Dalam 7.1, beberapa tetapan dibaca di peringkat atas fail .CFConfig.json, contohnya debuggingTemplate, showDebug, cacheDefaultQuery, dan updateProxyHost. Dalam 8.0, tetapan ini hanya dibaca di dalam seksyen masing-masing: monitoring, cache, dan proxy.
Jika anda meninggalkan kunci lama di peringkat atas, Lucee 8.0 mengabaikannya tanpa sebarang ralat atau amaran dan menggunakan nilai lalai. Maknanya, pilihan nyahpepijat yang anda hidupkan dalam 7.1 akan tiba-tiba mati selepas naik taraf, tanpa sebarang tanda dalam log. Ini sebabnya langkah semakan konfigurasi menjadi wajib sebelum naik taraf.
Benang maya untuk lelaran selari
Dalam 7.1, fungsi lelaran seperti arrayEach, structEach, dan queryEach yang dipanggil dengan parallel=true menggunakan paling banyak 20 benang platform. Dalam 8.0 di atas Java 21, parallel=true berjalan di atas benang maya tanpa had konkurensi secara lalai.
Ini bagus untuk beban yang ringan, tetapi berbahaya jika closure anda menggunakan sumber terhad seperti sambungan pangkalan data atau panggilan HTTP ke perkhidmatan yang dihadkan kadar. Tanpa had, anda boleh membanjiri sumber tersebut. Penyelesaiannya ialah lulus parallel="thread" dan tetapkan maxConcurrency secara eksplisit, atau matikan benang maya secara menyeluruh dengan LUCEE_ALLOW_VIRTUAL_THREADS=false.
Susunan kunci scope tidak lagi teratur
Satu lagi perubahan senyap melibatkan scope application, server, dan sesi JEE. Dalam 8.0, scope ini disokong oleh concurrent map dan tidak lagi mengekalkan susunan sisipan, demi mengurangkan perebutan kunci di bawah beban. Kod yang melingkar ke atas scope ini atau membandingkan output bersiri akan melihat susunan kunci yang berubah.
Ini ialah corak yang sama dengan perubahan susunan kunci struct antara 7.0 dan 7.1 yang pernah mematahkan banyak aplikasi. Pengajarannya konsisten: jangan bergantung pada susunan kunci. Jika susunan penting, salin ke structNew("ordered") dahulu atau susun kunci secara manual.
Enjin PDF baharu
Lucee 8.0 membundel sambungan PDF versi 3.0, menggantikan enjin rendering. Tag cfdocument kini menggunakan OpenHTMLToPDF, manakala cpdf menggunakan PDFBox 3. Enjin PD4ML atau mod "classic" telah dibuang, dan atribut type pada cfdocument serta tetapan this.pdf.type kini diabaikan sepenuhnya.
Aplikasi yang menjana PDF, terutamanya yang bergantung pada susun atur tepat, mesti menjana semula dokumen penting dan membandingkannya dengan output 7.1, dari segi pemisah halaman, fon, CSS, dan pengepala serta pengaki. Anda juga boleh membuang type="classic" kerana ia tidak lagi berfungsi.
Markdown dan SMB berpindah ke sambungan
MarkdownToHTML() dan pembekal sumber smb:// telah dipindahkan keluar daripada teras ke sambungan. Lucee 8.0 membundel kedua-dua sambungan ini, jadi kod anda terus berfungsi tanpa perubahan untuk kebanyakan pemasangan. Pengecualian ialah persediaan yang mengawal sambungan secara eksplisit, contohnya dengan lucee.extensions.install=false atau lucee.extensions.config.only=true, yang perlu menambah sambungan tersebut secara manual ke senarai mereka.
Ini meneruskan corak yang bermula dalam 7.1 apabila Mail, FTP, dan Compress dipindahkan ke sambungan. Kesan praktikalnya ialah kini anda boleh mengemas kini sambungan ini secara berasingan daripada teras Lucee.
Jadual jenis perubahan yang sering mematahkan kod
Untuk memudahkan semakan, berikut ialah kategori perubahan 8.0 yang paling kerap mematahkan kod sedia ada:
| Jenis perubahan | Contoh dalam 8.0 | Kesan tanpa tindakan |
|---|---|---|
| Konfigurasi senyap | Kunci debugging di peringkat atas diabaikan | Pilihan nyahpepijat mati tanpa amaran |
| Susunan kunci | Scope application dan server guna concurrent map | Output bersiri berubah susunan |
| Keperluan runtime | Java 21 minimum | Pelayan tidak mula pada Java 11 atau 17 |
| Enjin rendering | PDF guna OpenHTMLToPDF, PD4ML dibuang | Reka letak PDF berubah |
| API ditukar nama | Argumen Administrator.cfc dan cfadmin | Skrip automasi senyap menyimpan nilai lalai |
Perkara yang perlu diuji sebelum naik taraf
Senarai semak ujian anda harus merangkumi sekurang-kurangnya lima perkara. Pertama, uji boot pelayan pada Java 21 dan pastikan ia mula tanpa ralat konfigurasi. Kedua, jalankan semula suite ujian aplikasi anda dan bandingkan hasilnya. Ketiga, uji laluan kod selari dan jana semula PDF penting. Keempat, semak skrip automasi pentadbir kerana banyak argumen Administrator.cfc telah ditukar nama. Kelima, semak log pelayan untuk ralat sambungan atau muat turun Maven yang gagal.
Untuk semakan konfigurasi, hidupkan LUCEE_CONFIG_VALIDATE=true semasa boot pertama supaya Lucee memuatkan setiap tetapan ketika mula dan bukannya ketika pertama kali digunakan. Ini mendedahkan nilai tidak sah dengan segera, kerana dalam 8.0 nilai yang tidak boleh dihuraikan tidak lagi diabaikan secara senyap seperti dalam 7.1.
Cara menguji di slot ujian
Slot ujian bermaksud persekitaran berasingan yang meniru pengeluaran tetapi tidak melayan trafik sebenar. Cara paling bersih ialah menaikkan bekas Docker dengan imej 8.0 RC, menyalin konfigurasi dan kod anda, dan menjalankan ujian di sana. Panduan deploy Lucee dengan Docker menerangkan cara menyediakan ini.
Sebelum memulakan, pastikan anda mempunyai sandaran kod, pangkalan data, dan konfigurasi yang lengkap, dan pantau log dan pemantauan sepanjang ujian. Uji laluan kritikal aplikasi secara manual selain daripada ujian automatik, kerana perubahan senyap seperti susunan kunci tidak selalu ditangkap oleh suite ujian biasa.
Soalan Lazim (FAQ)
Adakah Lucee 8.0 sudah boleh digunakan dalam pengeluaran?
Belum. Pada masa penulisan, 8.0 berada dalam status release candidate di bawah label EDGE. Gunakannya di persekitaran ujian, bukan pelayan pengeluaran utama.
Apakah keperluan Java minimum untuk Lucee 8.0?
Java 21 atau lebih baharu. Lucee 8.0 tidak akan mula pada Java 11 atau 17.
Adakah saya perlu menulis semula kod CFML untuk 8.0?
Kebanyakan kod tidak perlu ditulis semula. Tetapi anda perlu menyemak perkara yang bergantung pada susunan kunci, fungsi selari, penjanaan PDF, dan skrip automasi pentadbir.
Adakah perubahan konfigurasi menghasilkan ralat?
Tidak, dan itu bahayanya. Kunci konfigurasi yang ditinggalkan di peringkat atas diabaikan tanpa amaran, jadi tetapan anda boleh berubah secara senyap. Gunakan LUCEE_CONFIG_VALIDATE=true untuk mendedahkan masalah.
Adakah MarkdownToHTML() masih berfungsi?
Ya, dalam kebanyakan pemasangan. Ia kini datang daripada sambungan yang dibundel. Hanya persediaan yang mengawal sambungan secara eksplisit perlu menambahnya ke senarai secara manual.