Apakah kelas dalam pustaka JRE mendukung bacaan yang dapat diamati dan / atau tidak sinkron dari perangkat eksternal / non-JRE?

12

Bagaimana saya bisa menerapkan pustaka lintas platform saya (misalnya pada JRE) untuk beroperasi dengan cara yang aman untuk referensi objek, sehingga ujung depan asli pada platform lain dapat mengamati objek dan mengambil keuntungan dari pola yang dapat diamati?

Sedikit latar belakang - ada konsep pengikatan data yang digunakan di sebagian besar kerangka front-end. Dalam C # dan Java ini terkait dengan sifat yang dapat diamati yang memberikan kelas kemampuan untuk memecat peristiwa ketika perubahan terjadi, di mana beberapa kontrol atau "pengamat" dapat berlangganan. Dengan cara ini pengamat tidak harus terus polling / membaca sumber daya, membandingkan pembaruan.

Saya ingin bekerja pada mesin analisis yang membuat perubahan pada daftar data dari waktu ke waktu. Akan menyenangkan untuk dapat memiliki front-end dapat mengamati daftar ini saat analisis sedang berjalan. Menurut saya ini membutuhkan front-end untuk dapat mengirimkan objek ke mesin analisis, ditulis di perpustakaan yang semoga bersifat cross-platform, dan mampu membuat thread-safe dibaca untuk objek tersebut. Atau yang lain, mintalah perpustakaan memenuhi kontrak pengawasan.

Cara ini ditangani pada engine CLI gaya Unix yang lebih lama adalah dengan menggunakan stdin / stdout / stderr, dan meminta pembaruan pos engine secara berkala. Ini membutuhkan overhead standar dan penguraian teks yang lebih baik saya hindari, jika mungkin.

Brandon Arnold
sumber
2
Biasanya yang terbaik adalah membuat pertanyaan inti sedikit lebih sempit daripada "Apakah X mungkin?", Karena jawaban yang benar hampir selalu "Ya, jika Anda berusaha cukup keras." Sepertinya Anda benar-benar ingin bertanya, "Bagaimana saya bisa melakukan X tanpa overhead stdin / stdout?" Dalam hal ini, mengapa tidak menggunakan perpustakaan yang terhubung secara statis atau dinamis? Apakah Anda memerlukan pustaka ini untuk menjadi program terpisah dari UI karena beberapa alasan?
Ixrec
Terima kasih, Ixrec. Apakah Anda pikir saya telah mengutarakannya seperti yang Anda sarankan dalam judul saya? Alasan saya ingin perpustakaan menjadi portabel, dan front-end menjadi asli, adalah karena saya pikir kerangka UI asli umumnya bekerja lebih baik (peringatan opini!), Tapi saya tidak ingin menulis logika mesin dua kali .
Brandon Arnold
Mengapa pustaka yang terhubung secara statis atau dinamis bisa portabel? Re: Judul, itu adalah contoh buku teks dari pertanyaan "terlalu luas"; Saya tidak fokus pada hal itu karena tampaknya ada pertanyaan yang lebih spesifik di sisa pertanyaan Anda.
Ixrec
@ Isrec. Itu bisa. Pertanyaannya mengasumsikan bahwa itu adalah perpustakaan, yang mencakup kemungkinan-kemungkinan itu. Saya hanya ingin memastikan bahwa setiap aplikasi yang menggunakan pustaka ini akan dapat mengamati referensi ke objek yang diteruskan secara tidak sinkron, saat mereka sedang dioperasikan.
Brandon Arnold
1
@Ixrec Saya telah memperbarui judul menjadi kurang luas
Brandon Arnold

Jawaban:

1

Anda dapat membuat tingkat integrasi di atas model perpustakaan Anda menggunakan (misalnya) kerangka kerja integrasi unta apache. Komponen Netty mungkin dapat memenuhi kebutuhan Anda. Dengan pola yang dapat diamati tingkat integrasi Anda harus mengubah perubahan yang diterima model Anda dan memberitahukannya kepada pelanggan front-end. Cara serupa lainnya untuk menginterpretasikan kebutuhan Anda adalah dengan memikirkan arsitektur yang digerakkan oleh peristiwa di mana ketika model Anda berubah, pendengar pengamat di tingkat integrasi Anda menerbitkan pesan dalam JMS Topic sehingga subscriptor yang terhubung di front-end akan menerimanya.

AlexCG
sumber
0

Saya menulis jawaban yang sama sekali berbeda, menunjukkan bahwa penerbit Anda menulis pembaruan ke antrian atau pipa - tapi kemudian saya membaca kembali pertanyaannya.

Jika saya mengerti benar pertanyaan umum Anda adalah bahwa Anda ingin menulis pustaka untuk dijalankan di JRE, di mana front-end asli dapat melakukan query keadaan objek Java dengan cara yang aman.

Ini sangat luas karena ada ratusan cara front-end dapat berinteraksi dengan kode perpustakaan yang berjalan di JRE - JNI, EJB RPC, antarmuka HTTP gaya-RPC, respons permintaan atas antrian pesan, dll.

Apa pun yang Anda pilih, di beberapa titik dalam rantai, harus ada pemanggilan metode Java, dan di sanalah Anda bisa mengendalikan keamanan benang. Di sana, Anda memiliki seluruh gudang alat pengaman ulir yang Anda inginkan. Anda dapat menyinkronkan, Anda dapat mengembalikan salinan defensif, bekerja dengan data cache, dll.

Namun, pertimbangkan apakah ini model yang ingin Anda ikuti. Mungkin lebih bersih untuk beralih ke model "jangan tanya saya, saya akan memberi tahu Anda", di mana perpustakaan Anda mendorong pembaruan ke front-end yang berisi informasi yang cukup sehingga tidak perlu meminta objek.

ramping
sumber
Komentar ekstra - sudahkah Anda mempertimbangkan untuk menggunakan Redis (atau sejenisnya) sebagai perantara antara ujung depan dan belakang Anda?
langsing