Halaman ini menjelaskan cara memigrasikan aplikasi App Engine yang ada dari runtime Java 7 ke runtime Java 8. Perhatikan bahwa runtime Java App Engine didasarkan pada OpenJDK.
Menentukan runtime Java 8 untuk aplikasi Anda
Untuk menjalankan aplikasi Anda di runtime Java 8:
Tambahkan
<runtime>java8</runtime>
ke fileappengine-web.xml
Anda:Deploy ulang aplikasi Anda.
Bermigrasi dari layanan yang tidak didukung
Beberapa layanan yang tidak digunakan lagi dan tersedia untuk runtime Java 7 tidak didukung oleh runtime Java 8. Google merekomendasikan agar Anda memigrasikan aplikasi ke alternatif yang direkomendasikan dan menguji aplikasi di runtime Java 7 dengan perubahan tersebut sebelum bermigrasi ke Java 8.
Layanan yang tidak digunakan lagi berikut ini tidak tersedia di runtime Java 8:
Layanan yang tidak digunakan lagi | Alternatif yang direkomendasikan |
---|---|
Cloud Endpoints v1 | Bermigrasi ke v2, produk ini telah diganti namanya menjadi Cloud Endpoints Frameworks. Perhatikan bahwa Anda mungkin perlu mengubah aplikasi Web, Android, atau iOS. |
AppStats (jar appengine-api-labs) | Bermigrasi ke Cloud Trace. SDK menghasilkan error untuk aplikasi yang menggunakan class com.google.appengine.tools.AppstatsFilter pada runtime Java 8. Pastikan Anda menghapus semua referensi ke AppstatsFilter dari web.xml Anda. |
Class yang dikemas ulang akan memerlukan jalur impor baru di Java 8. Misalnya, jika aplikasi
Anda menggunakan com.google.appengine.repackaged.com.google.common.base.Optional
,
Anda harus mengimpor com.google.appengine.repackaged.com.google.common.base.$Optional
,
dengan $
yang diawali dengan nama class.
Memigrasikan aplikasi gratis yang menggunakan java.net.HttpURLConnection
Jika aplikasi Anda belum mengaktifkan penagihan dan membuat permintaan HTTP(S) menggunakan
class java.net.HttpURLConnection
atau
library klien Google
yang menggunakan class tersebut, aplikasi akan menyebabkan error runtime.
Untuk menghindari hal ini, tetapkan <url-stream-handler>
ke urlfetch
di appengine-web.xml
aplikasi Anda:
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <url-stream-handler>urlfetch</url-stream-handler> <!-- ... --> </appengine-web-app>
Atau, alih-alih menentukan urlfetch
, Anda dapat mengaktifkan penagihan untuk aplikasi Anda dan menggunakan setelan native
default. Aplikasi Anda tidak boleh menimbulkan
kenaikan biaya apa pun karena menjalankan Java 7. Perhatikan bahwa jika aplikasi Anda bergantung pada
header HTTP X-Appengine-Inbound-Appid
(digunakan untuk komunikasi Modul-ke-Modul), urlfetch
harus digunakan.
Mengubah encoding file default
App Engine telah mengubah encoding file default dari US-ASCII
di Java 7 menjadi
UTF-8
di Java 8. Untuk mengubah encoding default kembali ke
US-ASCII
di Java 8, tambahkan kode berikut ke appengine-web.xml
Anda:
<system-properties>
<property name="appengine.file.encoding" value="US-ASCII"/>
</system-properties>
Error dapat terjadi jika beberapa karakter tidak ada dalam set ASCII dan aplikasi Anda membuat asumsi tertentu, seperti someString.getBytes().length == someString.length()
. Dalam encoding US-ASCII,
hal ini berlaku karena karakter non ASCII dipetakan ke "?", tetapi hal ini tidak
selalu berlaku dengan encoding UTF-8.
Misalnya, jika Anda mencetak byte heksa dari memanggil
Éamonn.getBytes()
, dengan UTF-8, formatnya akan menjadi:
c3 89 61 6d 6f 6e 6e
(Éamonn
), sedangkan dengan US-ASCII, Anda akan mendapatkan:
3f 61 6d 6f 6e 6e
(?amonn
) karena nilai encoding É
yang berbeda.
Memanfaatkan sepenuhnya fitur runtime Java 8
Berikut adalah sebagian daftar keuntungan bermigrasi ke runtime Java 8:
- Jetty 9 mendukung aplikasi web Servlet 2.5 dan 3.1, termasuk anotasi servlet.
- Semua class Java standar kini tersedia, dan tidak ada daftar class yang diizinkan.
- Sistem file
/tmp
dapat ditulisi - ini akan menghabiskan alokasi RAM aplikasi. - I/O jaringan sekarang dapat dilakukan di semua thread Java. Panggilan App Engine API masih harus berada di Request Thread atau thread yang dibuat oleh Thread Manager API.
- Bahasa Java 8 lengkap kini didukung, termasuk Stream API, Lambda, dan Date / Time API.