Ruby on Rails merupakan framework web MVC menggunakan bahasa dynamic typed (Ruby) yang termasuk pertama (2005). Diikuti dengan django (2005), laravel (2011). Walaupun di dunia proyek jarang dipakai, di dunia produk/startup banyak dipakai karena lebih cepat waktu yang dibutuhkan untuk membuat nya.
Sebenernya spring boot sudah di embedd applicatoin server tomcat (hanya berisi web container, tidak bisa untuk java EE). Sehingga tidak perlu menggunakan application server lagi. Namun kadang orang karena sudah bayar application server lain, misal weblogic. dan ada beberapa aplikasi lain yang jalan di weblogic. Ingin mendeploy aplikasi spring boot di weblogic.
Secara tertulis harusnya tidak ada yang perlu dilakukan. Karena tujuan standarisasi J2EE adalah WAR/EAR bisa portable antar webserver. Namun kadang kenyataannya tidak, karena ada beberapa yang butuh fungsi spesifik app server, ataupun configurasi spesifik.
Aspose.word merupakan library untuk mengedit file microsoft office .docx. Sebenernya microsoft tidak mengeluarkan dokumentasi resmi API microsoft word. Dan file microsoft word dibuat sesuah mungkin untuk di edit (obfuscate). Makanya ada library open source bernama Apache POI (Poor Obfuscation Implementation) untuk mengedit file .docx (seperti Aspose.Word)
JasperReport adalah library reporting untuk membuat file docx, pdf, csv, xls. Berbeda dengan aspose/poi yang langsung berinteraksi dengan API microsoft office. Jasper menggunakan engine sendiri.
Para Gen Z seperti Saya mungkin bingung J2EE/Java EE/EJB itu apa. Sebelum internet dan WWW booming pada tahun 90an, sudah ada banyak bahasa pemrograman dan aplikasi yang kompleks. Seperti SAP, Aplikasi yang mengelola semua sistem perusahaan misal kepegawaian, keuangan, dan gudang. Aplikasi ini menggunakan Relasional Database SQL, dan aplikasi native sistem operasi (misal unix) untuk olah data dan antar mukanya.
Sedangkan internet sendiri sudah ada sebelum World Wide Web (WWW). Berikut timeline nya:
Tahun
Layer
Nama
Deskripsi
1970
Internet
NCP (Network Control Protocol)
1970
Application
Telnet
1970
Applicatoin
FTP
1980
Internet
TCP/IP
1990
Application
HTTP
World wide web
World wide web hanya berisi situs berupa static page HTML berisi konten yang terstruktur (h1, h2, body, dll). Hyperlink (<a>) yang menyambungkan situs satu ke situslain nya. Mau mengirim pesan (CRUD) lewat web? tidak bisa karena hanya static file.
Sumber : https://networkencyclopedia.com/common-gateway-interface-cgi/
Oleh karena itu dibuatlah CGI (Common gateway interface) yang menyambungkan (gateway/jembatan) www/html dengan bahasa pemrograman.
Misal kita membuka abdillah.my.id/pesan?id=4 :
Webserver (misal Apache) akan membuat proses baru pesan.exe yang Saya buat pakai bahasa C
pesan.exe tersebut membaca path dan query string nya (/pesan?id=4). Lalu di ekstrak id pesan nya
Mengambil pesan dengan id 4 dari database
Data dari database di masukan ke layout HTML untuk dilihat user
Output dari html nya dikirimkan dari pesan.exe ke webserver
Webserver mengirim file html tersebut ke user.
CGI bisa pakai bahasa apa saja. Karena CGI hanya akal akalan saja, sehingga performanya tidak terlalu bagus. Sekarang umumnya cgi sudah tidak digunakan lagi. Kecuali bahasa stateless seperti PHP. Karena selain bahasa PHP, bisa langsung buka port http tanpa menggunakan webserver. Sehingga tidak perlu perantara, dan membuat proses baru setiap request masuk.
Walaupun umumnya kita juga tetap menggunakan Webserver. Namun komunikasinya menggunakan proxy (bukan CGI). Proxy seperti Apache, Nginx digunakan untuk:
Load balancing. Karena proxy itu ringan dan cepat. Satu proxy mendistribusikan request ke banyak Aplikasi
Cache
Contoh kode CGI menggunakan python :
# Contoh kode CGI menggunakan python. sumber : https://en.wikipedia.org/wiki/Common_Gateway_Interface
#!/usr/bin/env python3
import cgi, cgitb
input_data = cgi.FieldStorage()
print('Content-Type: text/html') # HTML is following
print('<h1>Addition Results</h1>')
num1 = int(input_data["num1"].value)
num2 = int(input_data["num2"].value)
print('<output>{0} + {1} = {2}</output>'.format(num1, num2, num1 + num2))
Pada masa itu CGI cukup banyak digunakan karena mudah. Tapi bagaimana dengan aplikasi bisnis yang kompleks? Sayangnya pilihan bahasa terbatas. Java, bahasa baru pada saat itu terlihat menjanjinkan. Karena bahasa lain seperti C++ lebih sulit. Microsoft agak telat masuk ke pasar ini(ASP/J++/C#/.NET). PHP sekarang berbeda dengan dulu, Object oriented baru ada di PHP versi 3 (1998), namepsace di PHP versi 5.3(2009).
Ada perusahaan yang menambah fitur di java (anggep saja seperti membikin framework), lalu di bungkus dengan nama Application Server. sehingga programmer tidak perlu mengurus yang ribet ribet. Contoh application server pertama adalah Weblogic(Sebelum diakuisi Bea, lalu Oracle), NetDynamic/iPlanet(Sun), Websphere(IBM).
Semua application server ini tidak compatible. Kalau kita ngoding di weblogic, tidak akan bisa dijalankan di websphere dan sebaliknya. Oleh karena itu pada tahun 1999 dibuatlah standar/spesifikasi agar Application Server ini bisa kompatible. Kalau kita ngoding lalu di build menjadi file WAR, file WAR nya ini bisa kita deploy di weblogic maupun di appilcation server lain tanpa mengubah kode. Nama standar/spesifikasi ini adalah J22E dan pada tahun 2005 ganti nama menjadi Java EE dan pada tahun 2019 ganti lagi jadi Jakarta EE.
Sumber : https://tekslate.com/distributed-systems-j2ee-architecture
Apa isi spesifikasi/standar J2EE?. Ada banyak. Webcontainer yang isinya Servlet dan JSP. Dan EJB Container untuk mengurus proses bisnis. Servlet ini memudah kan kita sehingga tidak perlu mengurus CGI dan Webserver lagi, serta performanya lebih cepat. Karena servlet adalah webserver. JSP isinya adalah templating engine untuk HTML. Sehingga HTML yang tadinya statis bisa dinamis berubah isinya. Tidak perlu melakukan “print(‘<h1>’, judul_1, </h1>)” atau concat concat string untuk menjadi html seperti contoh python CGI tadi.
Selain itu ada fitur seperti clustering(menjalankan aplikasi di lebih dari satu server), monitoring, connection pooling lengkap dah pokoknya. Kalau pakai CGI tadi, harus di setting lagi untuk monitoring dan clustering nya. Kalau J2EE? tinggal install app server di setiap server, sisanya semua beres diurus Application Server. Lebih mudah kan pakai J2EE?.
Tapi ada juga yang bikin pusing seperti EJB. developer merasa EJB itu overkill. Kata Rod Johnson di buku nya, 80 % fitur/teknik pada EJB sebenernya hanya untuk 20 % masalah di dunia ini. Dan kebanyakan dari kita hanya membutuhkan 20% fitur pada EJB. Sehingga lahir lah buku βExpert one to one J2EE development without EJBβ yang menjadi cikal bakal lahirnya Spring Framework yang masih berjaya sampai sekarang. Komponen yang baik dari J2EE seperti webcontainer (Servlet+JSP) kita tetep pake, sedangkan yang bikin pusing seperti EJB di ganti ke alternatif yang lebih mudah, yaitu spring.
Dan sekarang application server J2EE misal Weblogic, Websphere, Glassfish, Jboss sudah jarang digunakan jika menggunakan Spring. Di Spring kita menggunakan application server Tomcat yang tidak sesuai standar J2EE karena hanya mengimplementasi spesifikasi WebContainer(Servlet+JSP), tidak ada EJB dan lain lain. Bisa dibilang lebih ringan memory dan startup nya karena tidak memuat semua kompnen J2EE yang tidak dipakai di Spring.
Misal di Spring untuk membuat Restful API kita menggunakan Spring MVC rest(alternatif dari JAX-RS di J2EE). Maka library Spring MVC Rest tersebut tidak di bundle di Application Server tomcat, melainkan akan di bundle bersama WAR/JAR aplikasi Spring nya. Untuk clustering supaya aplikasi bisa dijalankan di banyak server bagimana? Bisa memakai Autoscaling Virtual Machine dari cloud seperti AWS EC2, atau Kubernetes.
Sumber twitter pos indonesia https://twitter.com/posindonesia/status/963282532966989825?lang=da
Semua yang bisa di otomasi, akan di otomasi. Hampir semua
tools/program saat ini menyediakan fitur otomasi ataupun custom script.
Dan fitur ini menjadi daya tarik sendiri. Bahkan gitlab CI yang tidak
menyediakan GUI, lebih disukai karena mudah di otomasi dan di program.
Begitu juga postman, sangat cape jika setiap mencoba endpoint lain,
harus mencopy manual token authorization. Apalagi kalau sering ganti
user login di endpoint nya. Postman menyediakan beberapa fitur yang
dapet membantu seperti:
Mekasnisme session default di php adalah locking/blocking. Misal ada 5
request dari orang yang sama (id session yang sama) bersaman yang
menggunakan session, kelima request tersebut tidak bisa berjalan
bersamaan, melainkan hanya satu request yang dapat berjalan, yang
lainnya menunggu sampai request yang berjalan tersebut selesai
(ngantri).
Hal ini tujuannya untuk mencegah race condition. Misalkan ada session variable bernama jk (jumlah keranjang) yang menghitung jumlah barang di keranajng. User menambah barang a dan b, awalnya jumlah keranjang ada 10, setelah ditambah 2 barang tersebut menajdi 12.
Favicon muncul di home (abdillah.my.id) dan wp-admin saja. Diluar link itu favicon tidak terbaca. Padahal saya memakai tema bawaan wordpress (dan dicustom dikit agar keliatan gak pasaran π ) dan mengganti favicon melalui tools -> customize. Browser yang dicoba adalah berikut