Tutorial ini menjelaskan cara membangun aplikasi Java yang berkomunikasi dengan RabbitMQ menggunakan JSON-LD. Aplikasi ini dapat menambah data Place ke database dan mengirim statusnya ke RabbitMQ menggunakan JSON-LD, dengan mengonsumsi pesan dari topik RabbitMQ tertentu dan menggunakan Jackson untuk konversi objek Java ke JSON-LD.
Tutorial ini membahas cara membuat web service dan client menggunakan Spring Web Services. Langkah-langkahnya meliputi pembuatan project, konfigurasi Spring, pendefinisian endpoint dan interface, serta pengujian client. Web service dibuat untuk melakukan login dengan merespons username tertentu.
Modul Praktikum Pemrograman Berorientasi Objek (Chap.10)Debby Ummul
油
Ringkasan dokumen tersebut adalah:
1. Dokumen tersebut membahas tentang pembuatan antarmuka grafis pengguna (GUI) menggunakan Abstract Window Toolkit (AWT) dan Swing dalam bahasa pemrograman Java.
2. Terdapat penjelasan mengenai komponen-komponen GUI seperti frame, button, label, text field, combo box, check box, radio button beserta cara penggunaannya.
3. Juga dibahas mengenai manajemen tata letak komponen seperti
Teks tersebut membahas perbedaan antara jQuery dan JavaScript. jQuery adalah library JavaScript yang dirancang untuk memudahkan manipulasi dokumen HTML dan interaksi antara JavaScript dengan HTML, sedangkan JavaScript adalah bahasa pemrograman untuk berjalan di browser. jQuery menyederhanakan penulisan kode JavaScript dengan menggunakan objek dan selector CSS.
Makalah ini membahas tentang Object Oriented Programming pada bahasa pemrograman Java. Terdapat pembahasan mengenai sejarah Java, manfaat OOP, karakteristik OOP, dan konsep-konsep dasar Java seperti class, object, method."
JQuery adalah framework Javascript yang memudahkan interaksi antara Javascript dan HTML. Ia dirilis pada tahun 2006 oleh John Resig dan menjadi populer karena kesederhanaan penulisan kode namun hasil yang luas. JQuery merupakan library open source yang hanya berukuran kecil namun fleksibel dengan banyak plugin.
Dokumen tersebut merangkum materi pengenalan Java meliputi pengertian JDK, instalasi JDK, setting path, tips kompilasi dan menjalankan program Java, download Java API documentation, serta beberapa latihan dasar pemrograman Java.
Dokumen ini memberikan panduan lengkap untuk membuat aplikasi Android yang dapat menyimpan data ke database MySQL menggunakan PHP. Langkah-langkahnya meliputi pembuatan database dan tabel di MySQL, file PHP untuk menyimpan data ke database, aplikasi Android untuk mengumpulkan input dan mengirimkannya ke server, serta pengujian program.
Dokumen tersebut merupakan tutorial mengenai penggunaan Netbeans dan JasperReport untuk membuat laporan dari basis data Microsoft Access. Tutorial tersebut menjelaskan langkah-langkah dasar pembuatan proyek Netbeans, membuat antarmuka pengguna, mengakses data dari basis data, dan membuat laporan menggunakan iReport.
Belajar Android PHP MySQL Login dengan VolleyAgus Haryanto
油
Dokumen tersebut memberikan panduan lengkap untuk membuat aplikasi login Android menggunakan Volley dengan backend PHP dan MySQL. Langkah-langkahnya meliputi persiapan database di server, membuat script PHP untuk login, mendesain antarmuka pengguna di Android, dan mengimplementasikan request login menggunakan Volley.
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLitecreatorb dev
油
Dokumen tersebut memberikan tutorial singkat tentang pembuatan aplikasi resep masakan sederhana menggunakan database SQLite untuk menyimpan dan menampilkan data resep, mencakup penjelasan tentang layout, activity, dan implementasi database.
Buku praktikum ini membahas tentang pemrograman berorientasi objek untuk mahasiswa jurusan manajemen informatika dengan modul-modul pengenalan Java, dasar pemrograman Java, penggunaan class BufferedReader dan JOptionPane, serta konsep enkapsulasi. [/ringkuman]"
Dokumen tersebut membahas tentang Java Server Pages (JSP) sebagai teknologi untuk menghasilkan konten dinamis dan statis pada web. JSP memungkinkan pengembang untuk menggabungkan kode Java dan template HTML untuk menghasilkan halaman web dinamis. Dokumen ini menjelaskan syntax dasar JSP seperti scriptlets, ekspresi, dan deklarasi untuk menambahkan logika Java ke dalam halaman web.
- Eloquent merupakan Active Record Implementation pada Laravel yang digunakan sebagai Model untuk membuat sistem CRUD terkait tabel database seperti untuk buku.
- Laravel juga menyediakan Query Builder untuk melakukan pengaksesan data yang kompleks.
- Controller berfungsi sebagai penghubung antara request user ke model yang kemudian dikembalikan ke view sebagai response, sering mengandung logika CRUD.
Teks tersebut membahas perbedaan antara jQuery dan JavaScript. jQuery adalah library JavaScript yang dirancang untuk memudahkan manipulasi dokumen HTML dan interaksi antara JavaScript dengan HTML, sedangkan JavaScript adalah bahasa pemrograman untuk berjalan di browser. jQuery menyederhanakan penulisan kode JavaScript dengan menggunakan objek dan selector CSS.
Makalah ini membahas tentang Object Oriented Programming pada bahasa pemrograman Java. Terdapat pembahasan mengenai sejarah Java, manfaat OOP, karakteristik OOP, dan konsep-konsep dasar Java seperti class, object, method."
JQuery adalah framework Javascript yang memudahkan interaksi antara Javascript dan HTML. Ia dirilis pada tahun 2006 oleh John Resig dan menjadi populer karena kesederhanaan penulisan kode namun hasil yang luas. JQuery merupakan library open source yang hanya berukuran kecil namun fleksibel dengan banyak plugin.
Dokumen tersebut merangkum materi pengenalan Java meliputi pengertian JDK, instalasi JDK, setting path, tips kompilasi dan menjalankan program Java, download Java API documentation, serta beberapa latihan dasar pemrograman Java.
Dokumen ini memberikan panduan lengkap untuk membuat aplikasi Android yang dapat menyimpan data ke database MySQL menggunakan PHP. Langkah-langkahnya meliputi pembuatan database dan tabel di MySQL, file PHP untuk menyimpan data ke database, aplikasi Android untuk mengumpulkan input dan mengirimkannya ke server, serta pengujian program.
Dokumen tersebut merupakan tutorial mengenai penggunaan Netbeans dan JasperReport untuk membuat laporan dari basis data Microsoft Access. Tutorial tersebut menjelaskan langkah-langkah dasar pembuatan proyek Netbeans, membuat antarmuka pengguna, mengakses data dari basis data, dan membuat laporan menggunakan iReport.
Belajar Android PHP MySQL Login dengan VolleyAgus Haryanto
油
Dokumen tersebut memberikan panduan lengkap untuk membuat aplikasi login Android menggunakan Volley dengan backend PHP dan MySQL. Langkah-langkahnya meliputi persiapan database di server, membuat script PHP untuk login, mendesain antarmuka pengguna di Android, dan mengimplementasikan request login menggunakan Volley.
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLitecreatorb dev
油
Dokumen tersebut memberikan tutorial singkat tentang pembuatan aplikasi resep masakan sederhana menggunakan database SQLite untuk menyimpan dan menampilkan data resep, mencakup penjelasan tentang layout, activity, dan implementasi database.
Buku praktikum ini membahas tentang pemrograman berorientasi objek untuk mahasiswa jurusan manajemen informatika dengan modul-modul pengenalan Java, dasar pemrograman Java, penggunaan class BufferedReader dan JOptionPane, serta konsep enkapsulasi. [/ringkuman]"
Dokumen tersebut membahas tentang Java Server Pages (JSP) sebagai teknologi untuk menghasilkan konten dinamis dan statis pada web. JSP memungkinkan pengembang untuk menggabungkan kode Java dan template HTML untuk menghasilkan halaman web dinamis. Dokumen ini menjelaskan syntax dasar JSP seperti scriptlets, ekspresi, dan deklarasi untuk menambahkan logika Java ke dalam halaman web.
- Eloquent merupakan Active Record Implementation pada Laravel yang digunakan sebagai Model untuk membuat sistem CRUD terkait tabel database seperti untuk buku.
- Laravel juga menyediakan Query Builder untuk melakukan pengaksesan data yang kompleks.
- Controller berfungsi sebagai penghubung antara request user ke model yang kemudian dikembalikan ke view sebagai response, sering mengandung logika CRUD.
Bab 11 membahas penjadwalan tugas menggunakan Timers dan meregister koneksi masuk pada Push Registry. Timers digunakan untuk menjalankan tugas berdasarkan jadwal waktu tertentu, sementara Push Registry meregister alamat koneksi sehingga MIDlet dapat dijalankan melalui koneksi tersebut walaupun tidak berjalan. Contoh aplikasi MIDlet yang menggunakan Timer dan Push Registry disajikan untuk memperjelas penjelasan.
1. Dokumen tersebut membahas tentang pengantar jQuery, yaitu sebuah library Javascript yang membantu mempermudah penulisan kode Javascript. jQuery dirilis pada tahun 2006 dan banyak digunakan oleh situs-situs besar.
2. Dokumen tersebut menjelaskan beberapa kemampuan jQuery seperti mempermudah manipulasi elemen, modifikasi tampilan halaman, menambahkan animasi, dan lainnya. Cara kerja jQuery meliputi memilih elemen dengan selector dan memberikan
1. Dokumen tersebut membahas tentang pengantar jQuery, yaitu sebuah library Javascript yang membantu mempermudah penulisan kode Javascript. jQuery dirilis pada tahun 2006 dan banyak digunakan oleh situs-situs besar.
2. Dokumen tersebut menjelaskan beberapa kemampuan jQuery seperti mempermudah manipulasi elemen, modifikasi tampilan halaman, menambahkan animasi, dan merespon interaksi pengguna. jQuery bekerja dengan memilih elemen dan melak
1. Dokumen tersebut membahas tentang pengantar jQuery, yaitu sebuah library Javascript yang digunakan untuk mempermudah penulisan kode Javascript. Dokumen ini juga menjelaskan berbagai kemampuan jQuery seperti manipulasi DOM, animasi, dan Ajax.
Dokumen tersebut membahas pengenalan pemrograman Java meliputi:
1) Sejarah perkembangan Java dan karakteristik bahasa pemrograman Java;
2) Sintaks dasar bahasa Java seperti struktur program, tipe data, variabel, dan kelas;
3) Proses kompilasi dan eksekusi kode Java.
Apa yang dapat Anda raih dengan Besut Kode UniversitasHendy Irawan
油
http://wikimedia-id.github.io/besutkode/beranda-universitas.html
KENAPA KAMU MESTI IKUT BESUT KODE UNIVERSITAS?
ADA TUJUH ALASAN UTAMA KENAPA IKUT BESUT KODE UNIVERSITAS BAIK UNTUK KAMU
Besut Kode Universitas adalah kompetisi online pengembangan perangkat lunak bersumber terbuka untuk mahasiswa berumur 17-24 tahun. Mahasiswa diminta untuk memecahkan soal yang diberikan, dan mentor akan menyatakan peserta tersebut lolos ke putaran selanjutnya atau gugur. Peserta yang lolos, akan mendapatkan sertifikat. Mentor juga akan menganalisa peserta yang berbakat, apabila terpilih, mentor akan membantu peserta untuk dapat mengikuti Google Summer of Code.
Saat mengikuti besut kode, peserta akan memiliki profil berisi karya online yang mumpuni. Setiap pengembang perangkat lunak terbuka handal akan memiliki rekam jejak karya online, mengikuti Besut Kode adalah kesempatan untuk memiliki rekam jejak ini dalam profil Anda. Penting nih!
Anda akan diminta untuk menyiapkan dan menggunakan sistem kendali terdistribusi yang bisa disebarkan (distributed version control system) seperti git, dan menggunakan tempat penyimpanan terdistribusi (online repositories) daring seperti github.com.
Dengan mengikuti besut kode, Anda jadi punya pengalaman untuk menyelesaikan persoalan menggunakan algoritma rumit, sejak kuliah! Biasa dengar lulus kuliah tidak punya pengalaman? Peserta Besut Kode bisa membangun pengalamannya sejak SEKARANG!
Dengan mengerjakan tugas-tugas Besut Kode, Anda sekaligus membangun jaringan internasional dari organisasi-organisasi kontributor perangkat lunak terbuka yang dapat menjamin kemampuan Anda dalam bekerja secara independen tanpa pengawasan, memiliki inisyatif <-- kualitas kualitas penting dalam mendapatkan pekerjaan secara daring di tingkat dunia.
Ciptakan kredibilitas diri saat melamar kerja, karena kontribusi Anda saat mengikuti Besut Kode terbuka untuk ditinjau secara publik, dan Anda mendapatkan pengalaman sembari berkontribusi mengembangkan perangkat lunak terbuka (Open Source) di dunia nyata
Dilatih oleh ahlinya bagaimana menjadi bagian dari komunitas pengembang perangkat lunak terbuka. Dalam pelatihan ini termasuk peninjauan sebuah kode dengan kualitas yang baik vs kode dengan kualitas yang buruk, test-test otomatis terintegrasi terus-menerus (CI), belajar berbagai bahasa pemrograman, dan melihat berbagai masalah yang beragam yang mungkin terjadi dalam perangkat lunak terbuka.
Melihat bagaimana sebuah kode ditinjau, apakah kode memiliki kualitas yang baik vs kode dengan kualitas yang buruk
Mempelajari bagaimana test-test otomatis terintegrasi terus-menerus dilakukan
Mempelajari berbagai bahasa pemrograman, dan melihat berbagai masalah yang beragam yang mungkin terjadi dalam perangkat lunak terbuka pada kehidupan sehari-hari.
Memiliki pengalaman langsung mengerjakan proyek perangkat lunak terbuka yang dapat dimasukkan pada riwayat pengalaman kerja peserta.
Persiapan Google Summer of Code (GSoC)Hendy Irawan
油
Google Summer of Code (GSoC) adalah program magang internasional yang dirancang untuk mendorong partisipasi mahasiswa dalam pengembangan perangkat lunak sumber terbuka. Program ini memberikan mahasiswa kesempatan untuk berkontribusi pada proyek sumber terbuka selama 3 bulan dan menerima tunjangan hingga USD 5.500 dari Google.
EBA Internship Program aims at matching top performing students with cutting-edge companies for JOB OPPORTUNITY.
http://www.eba-consortium.asia/?p=2149
Big Data innovation in Japans energy industry - EBA Fieldwork 2015Hendy Irawan
油
Big Data innovation in Japans energy industry
Deputy Chairman of Smart House and Building Committee,
Japan Smart Community Alliance, Japan
Fellow, ECHONET Consortium
Keio University
Prof. Masaki Umejima
Evidence Based Approach
with Resilience, Innovation and Sustainability
Focus on research and education on BIG DATA
(data collection, analysis, and visualization)
by Yukyik Supanuch
Peraturan Walikota (Perwal) PPDB Kota Bandung Tahun 2015Hendy Irawan
油
Peraturan Walikota Bandung Nomor 361 Tahun 2015
tentang
Perubahan Kelima atas Peraturan Walikota Bandung Nomor 177 Tahun 2010 tentang Tata Cara Penerimaan Peserta Didik Baru (PPDB) Tahun 2015
pada Taman Kanak-Kanak, Raudhatul Athfal, Sekolah dan Madrasah (SD/SMP/SMA/SMK/MA Negeri)
Sumber: http://disdikkota.bandung.go.id/webtemp/index.php/typography/petunjuk/peraturan-walikota-ppdb-2015/category/8-ppdb-2015?download=6:peraturan-walikota-ppdb-2015
Sosialisasi Petunjuk Teknis Penerimaan Peserta Didik Baru (PPDB) Kota Bandung...Hendy Irawan
油
Dokumen tersebut berisi petunjuk teknis pendaftaran peserta didik baru di TK, SD, dan SMP di Kota Bandung tahun ajaran 2015/2016. Termasuk jadwal pendaftaran, persyaratan administrasi dan akademik, proses seleksi, kuota penerimaan, serta tata cara pendaftaran dan penerimaan peserta didik baru.
Twitter Author Prediction from Tweets using Bayesian NetworkHendy Irawan
油
Can We Predict the Author from a Tweet?
Most authors have a distinct writing style
... And unique topics to talk about
... And signature distribution of words used to tweet
Can we train Bayesian Network so that occurrence of words in a tweet can be used to infer the author of that tweet?
In summary: YES!
Disclaimer: Accuracy varies
In a test suite with @dakwatuna vs @farhatabbaslaw (very different tweet topics) 100% prediction accuracy is achieved
Biased Media - Game Theory (EL5000) Course ProjectHendy Irawan
油
Is Unbiased Media Better?
Sequential Randomless Game
2 players
Advertiser
Advertise: Get traffic from medias tweet
Forfeit: No traffic
Media
Pro: Favorable news of supported agenda
Neutral: Balanced news reporting
Contra: Criticizing opposing views
Overhyped: Anecdotes and variety of popular news
Game Tree Simulated for 4 moves (64 leaves)
3D Reality Tracking in Realtime - Team Hendy-SigitHendy Irawan
油
Combining image processing techniques like human detection and motion tracking with 2D-to-3D reconstruction from camera positions, the system can track human and objects for realtime and offline analysis, such as advanced security or construction project monitoring.
(1) Pemrograman Logika Induktif (Inductive Logic Programming/ILP) adalah cabang pembelajaran mesin yang menggunakan pemrograman logika sebagai representasi seragam untuk contoh, pengetahuan latar belakang, dan dugaan. (2) ILP mempelajari aturan logika secara otomatis dari contoh-contoh dan pengetahuan latar belakang. (3) Algoritma utama ILP antara lain Relative Least General Generalization, Progol, dan FOIL.
AksiMata Studio Tablet is an educative photo storytelling studio for children and family members of all ages!
* Express your creativity in laying out photos of you and your friends
* Spice up your photo album with effects, texts, backgrounds, and smileys
* Share your creative photo album with your Facebook and Twitter friends
* View your finished photo album on the web, with cool visual transitions on smartphones and tablets (for best experience use Lenovo速 ThinkPad Tablet)
* Fun with multi-touch finger gestures using Lenovo速 ThinkPad Tablet 2 or compatible device!
AksiMata Studio is a creative photo storytelling studio.
* Express your creativity in laying out photos of you and your friends
* Spice up your photo album with effects, texts, backgrounds, and smileys
* Share your creative photo album with your Facebook and Twitter friends
* View your finished photo album on the web, with cool visual transitions on smartphones and tablets (for best experience use Lenovo速 ThinkPad Tablet)
* Fun with hand gestures using Lenovo速 Horizon AIO camera or compatible device!
AksiMata Studio is a creative photo storytelling studio that allows users to:
1. Lay out photos with friends and add effects, text, backgrounds and stickers.
2. Share customized photo albums on Facebook and Twitter.
3. View finished photo albums on the web or mobile devices with visual transitions.
- Koperasi Kredit lahir pertama kali
sekitar pertengahan abad ke-19 di
Benua Eropa, tepatnya di negara
Jerman.
- Revolusi Industri :Dimana tenaga
buruh digantikan oleh tenaga mesin dan
akibatnya pengangguran merajalela buruh
semakin tak berdaya karena secara
perorangan mereka lemah sekali.
Sumber: Pelatihan Dasar Puskopdit Jawa Barat
How to Develop a Basic Magento Extension TutorialHendy Irawan
油
This document provides instructions for creating a basic Magento extension that displays a Twitter profile stream using blocks and templates. It discusses project folder structure, creating configuration files, block and helper classes, templates, making the block configurable, and adding configuration options in the Magento admin panel. The extension demonstrates how to output Twitter data by rendering templates containing Twitter widgets code.
How to Create A Magento Adminhtml Controller in Magento ExtensionHendy Irawan
油
This document discusses how to create an adminhtml controller in a Magento extension. It explains the necessary files and configurations, including creating a module configuration file, activating the module, defining a controller class, adding router configuration, creating admin menu links, handling GET and POST requests, adding layout files, and displaying messages. The goal is to demonstrate the basic structure and functionality for building out an admin interface in Magento.
How to create a magento controller in magento extensionHendy Irawan
油
This document provides steps for creating a controller in a Magento extension, including:
1. Creating the module configuration file and activating the module.
2. Defining the controller class that extends the core controller and adding controller actions.
3. Configuring the router to map URLs to the controller.
4. Creating layout XML and template files to render the controller output or processing form POST data in the actions. Messages can be added to the session and displayed.
5. Konfigurasi Maven Proxy
Khusus bagi koneksi proxy (seperti ITB). Bila tidak menggunakan
proxy, skip langsung ke slide selanjutnya.
Buat file C:Users<username>.m2settings.xml, isi dengan template
berikut. Perhatikan: Ganti bagian user dan pass sesuai akun AI3 Anda.
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>cache.itb.ac.id</host>
<port>8080</port>
<username>user</username>
<password>pass</password>
<nonProxyHosts>127.0.0.1|localhost|*.itb.ac.id|167.205.*.*</nonProxyHosts>
</proxy>
</proxies>
</settings>
6. Project tutorial-rabbitmq
1. Pastikan koneksi internet Anda aktif
2. Jalankan IntelliJ IDEA
3. Klik Import Project atau New > Project from
Existing Sources
4. Pilih folder project
5. Pilih Import project from external model > Maven
6. Centang:
1. Import Maven projects automatically
2. Automatically download:
Sources
Documentation
7. Klik Next sampai selesai
IntelliJ akan menanyakan SDK (ada di slide
selanjutnya)
7. Platform Settings > SDKs
Bila ditanya SDK, Anda perlu menambahkan JDK 8.
Add New SDK > Java
Name: 1.8
Contoh Path: C:Program FilesJavajdk1.8.0_66
(sesuai build number)
8. Struktur Project
Project ini menggunakan Maven project management system,
yang didukung oleh semua IDE Java termasuk IntelliJ IDEA,
Eclipse, dan NetBeans.
saat ini Maven sedang mengunduh dependencies/libraries yang
dibutuhkan oleh project (oleh karena itu butuh koneksi Internet)
Libraries utama yang digunakan:
Spring Boot, terutama:
Spring Web untuk web support. Termasuk embedded web server yaitu Tomcat.
Spring Data JPA untuk akses database relational.
Apache Wicket untuk web UI
Jackson untuk dukungan format JSON-LD
Camel sebagai message router, yang mendukung RabbitMQ component
9. Maven Project
Aktifkan Maven Project
di sisi kanan, dan pastikan
tidak ada error (merah-
merah)
Bila masih ada error, proses
download mungkin masih
berlangsung atau ada
masalah koneksi
Coba klik Reimport All
Maven Projects (lihat
gambar)
10. Run Project
Di view Project di sisi
kiri, pilih:
tutorial-rabbitmq
> src
> main
> java
> org.soluvas.tutorial.rabbitmq
> DaemonApp
Klik kanan di class
DaemonApp, klik
Run
12. Mengirim JSON-LD ke RabbitMQ
Untuk menambah Place, kirimkan JSON-LD ke topic starter.place, caranya:
1.Buka RabbitMQ Management di http://localhost:15672/ (user: guest,
password: guest)
2.Klik tab Exchanges
3.Klik exchange amq.topic
4.Masuk bagian Publish message, masukkan:
Routing key: starter.place
Payload:
{
"@type": "Place",
"name": "Warung Mamah",
"description": "Enak top markotop"
}
5.Klik Publish message.
6.Cek di web UI aplikasi bahwa place Warung Mamah telah ditambahkan.
13. Struktur Aplikasi
Untuk struktur dan cara kerja Maven, Spring
Boot & Wicket, Spring Data JPA akan dibahas
di tutorial lain (TODO)
Hanya membahas penggunaan libraries
berikut:
Jackson untuk dukungan format JSON-LD
Camel sebagai message router, yang mendukung
RabbitMQ component
14. Cara Kerja Aplikasi
1)PlaceRepository diimplementasi oleh Spring Data JPA untuk mengelola
tabel place di RDBMS
2)RabbitMqConfig membuat ConnectionFactory untuk RabbitMQ Client
3)ToJson membuat Jackson ObjectMapper untuk konversi JSON-LD <-> Java
object
4)AsError mengubah Exception bawaan Java menjadi object Error yang bisa
dikonversi ke JSON-LD
5)ProducerTemplate diimplementasi oleh Camel untuk mengirimkan message
ke RabbitMQ
kebetulan belum dipakai di tutorial ini
6)StarterRouter adalah fungsi utama:
1)mengambil JSON-LD Place dari topic starter.place
2)menyimpannya ke tabel place di RDBMS
3)mengembalikan JSON-LD berupa status berhasil (Status.java) atau gagal (Error.java)
17. StarterThing.java
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeInfo(use= JsonTypeInfo.Id.NAME, property="@type")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSubTypes({
@JsonSubTypes.Type(name="Status", value=Status.class),
@JsonSubTypes.Type(name="Error", value=Error.class),
@JsonSubTypes.Type(name="Place", value=Place.class),
})
public interface StarterThing extends Serializable {
}
interface yang akan diimplementasikan oleh class Status, Error, dan Place
diberi Jackson annotations
@JsonInclude NON_NULL: hanya property yang diisi yang akan diserialize ke JSON-
LD
@JsonTypeInfo @type: informasi class dimasukkan ke property @type sesuai
standar JSON-LD
@JsonIgnoreProperties: property yang tidak dikenali tidak akan menimbulkan error
@JsonSubTypes: daftar class yang dikenali
18. Place.java & PlaceRepository.java
JPA @Entity ini berisi:
1)id - @GeneratedValue, long
2)name - varchar(255)
3)description - text
4)creationTime - timestamp
Digunakan sebagai object yang menyimpan
representasi row di tabel place dalam database
SQL.
19. Place.java
@Entity
@EntityListeners(Place.PlaceListener.class)
@Table(indexes = {@Index(name="ik_place_creationtime", columnList = "creationtime")})
public class Place implements StarterThing {
public static class PlaceListener {
@PrePersist
public void setInitialValues(Place place) {
place.setCreationTime(new DateTime());
}
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String name;
@Column(columnDefinition = "text")
private String description;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime creationTime;
...
20. RabbitMqConfig.java
@Configuration RabbitMqConfig ini bertugas
untuk membuat ConnectionFactory yang
dibutuhkan RabbitMQ Client untuk koneksi ke
server RabbitMQ.
Konfigurasi koneksi RabbitMQ dibaca dari file
application.properties:
# RabbitMQ
amqp.host=localhost
amqp.username=guest
amqp.password=guest
21. RabbitMqConfig.java
@Configuration
public class RabbitMqConfig {
private static final Logger log = LoggerFactory.getLogger(RabbitMqConfig.class);
@Inject
private Environment env;
@Bean
public ConnectionFactory amqpConnFactory() {
final ConnectionFactory connFactory = new ConnectionFactory();
connFactory.setHost(env.getRequiredProperty("amqp.host"));
connFactory.setUsername(env.getRequiredProperty("amqp.username"));
connFactory.setPassword(env.getRequiredProperty("amqp.password"));
log.info("AMQP configuration: host={} username={}", connFactory.getHost(),
connFactory.getUsername());
return connFactory;
}
}
23. ToJson.java
@Service
public class ToJson implements Function<Object, String> {
protected ObjectMapper mapper;
public ToJson() {
mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.registerModule(new GuavaModule());
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
}
@Override
public String apply(@Body Object o) {
try {
return o != null ? mapper.writeValueAsString(o) : null;
} catch (JsonProcessingException e) {
Throwables.propagate(e);
return null;
}
}
public ObjectMapper getMapper() {
return mapper;
}
}
24. StarterRouter.java
@Component ini extends base class yang disediakan
Camel yaitu RouteBuilder
Method configure() harus di-override, yang berisi
definisi route
Route merupakan instruksi kepada Camel untuk:
mengambil message dari endpoint tertentu, dalam hal
ini RabbitMQ Component
melakukan pengolahan
melakukan konversi dari/ke JSON-LD via Jackson
menampilkan log (bila perlu)
mekanisme penanganan kesalahan
25. StarterRouter: Penanganan Kesalahan
onException(Exception.class).bean(asError).bean(toJson).handled(true);
errorHandler(new LoggingErrorHandlerBuilder(log));
Code tersebut:
bila terjadi Exception di dalam route:
akan diserahkan ke bean asError, yang akan mengubah Exception
menjadi object Error
akan diserahkan ke bean toJson, yang akan mengkonversi object Error
menjadi JSON-LD String
menandai handled=true, bahwa kesalahan sudah ditangani oleh code
kita
bila Camel mendeteksi error:
tampilkan dalam log menggunakan LoggingErrorHandlerBuilder
26. StarterRouter: Consume topic RabbitMQ
final String topic = "starter.place";
from("rabbitmq://dummy/amq.topic?
connectionFactory=#amqpConnFactory&exchangeType=topic
&autoDelete=false&routingKey=" + topic)
Consume menggunakan konfigurasi RabbitMQ di bean
amqpConnFactory (lihat RabbitMqConfig.java)
Consume dari exchange amq.topic
Sifat exchange adalah autoDelete=false (exchange tidak
akan dihapus setelah dipakai)
Consume dari routing key starter.place
27. StarterRouter: Log input
.to("log:IN." + topic + "?
showHeaders=true&showAll=true&multiline=true")
Message input dari RabbitMQ consumer akan
ditampilkan di log dengan nama IN.starter.place
Tampilkan:
headers
semua isi message body
mendukung multiline
More info: http://camel.apache.org/log.html
28. StarterRouter: Mengolah message
.process(exchange -> {
final StarterThing thing =
toJson.getMapper().readValue(
exchange.getIn().getBody(byte[].class),
StarterThing.class);
if (thing instanceof Place) {
Place place = (Place) thing;
log.info("Saving {} ...", place);
place = placeRepo.save(place);
// reply
exchange.getIn()
.setBody(new Status(place));
} else {
// unknown thing, ignore
exchange.getOut().setBody(null);
}
})
Gunakan Jackson untuk
mengkonversi message body
(byte[]) menjadi StarterThing
interface StarterThing bisa
diimplementasi oleh class yang
berbeda-beda
Bila thing adalah class Place, maka:
gunakan placeRepo untuk menyimpan
Place tersebut ke RDBMS
mengembalikan Status berisi data
Place yang sudah update
Bila thing tidak dikenali, maka:
set exchange out menjadi null
dengan mengeset exchange out, maka
reply tidak akan dikirimkan
29. StarterRouter: Konversi reply ke JSON-LD
.bean(toJson)
Gunakan Jackson
untuk mengkonversi
reply (bila ada)
bertipe Status atau
Error menjadi JSON-
LD String
30. StarterRouter: Konversi reply ke JSON-LD
.to("log:OUT" + topic);
Optional
Reply akan
ditampilkan di log
dengan nama
OUT.starter.place
sebelum dikirim ke
RabbitMQ
32. pom.xml dependencies:
commons-codec & jdatauri
commons-codec
mendukung berbagai
macam codec, termasuk
Base64 yang umum
dipakai oleh Data URI
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.8</version>
</dependency>
jdatauri untuk parsing
Data URI
<dependency>
<groupId>com.github.ooxi</groupId>
<artifactId>jdatauri</artifactId>
<version>1.0</version>
</dependency>