JRE kitaplığındaki sınıflar harici / JRE olmayan derlemelerden gözlemlenebilir ve / veya eşzamansız okumaları destekliyor mu?


12

Diğer platformlardaki yerel ön uçların nesneyi gözlemleyebilmesi ve Gözlenebilir kalıplardan yararlanabilmesi için, çapraz platform kitaplığımı (örneğin JRE'de) nesne başvuruları üzerinde güvenli bir şekilde çalışacak şekilde nasıl uygulayabilirim?

Küçük bir arka plan - çoğu ön uç çerçevede kullanılan veri bağlama kavramı vardır. C # ve Java'da bu, bir sınıfa birden fazla denetimin veya "gözlemcinin" abone olabileceği değişiklikler meydana geldiğinde olayları tetikleme yeteneği veren Gözlemlenebilir özellik ile ilgilidir. Bu şekilde gözlemcilerin, güncellemeleri karşılaştırarak kaynağı sorgulamaya / okumaya devam etmeleri gerekmez.

Zaman içinde veri listelerinde değişiklik yapan bir analiz motoru üzerinde çalışmak istiyorum. Analiz çalışırken ön uçların bu listeleri gözlemleyebilmesi güzel olurdu. Bana öyle geliyor ki bu ön uç, bir nesneyi analiz motoruna aktarabilmeyi, umarım çapraz platform olan bir kütüphanede yazılmasını ve bu nesneye güvenli bir okuma yapabilmesini gerektiriyordu. Veya kütüphanenin gözlemlenebilirlik sözleşmelerini yerine getirmesini sağlayın.

Bunun eski Unix tarzı CLI motorlarında ele alınma şekli, stdin / stdout / stderr kullanmak ve motorun düzenli aralıklarla güncellenmesini sağlamaktır. Bu, mümkünse kaçınmak istediğim standart ek yük ve metin ayrıştırma gerektirir.


2
Çekirdek soruyu "X mümkün mü?" Sorusundan biraz daha dar yapmak genellikle en iyisidir, çünkü bunun doğru cevabı neredeyse her zaman "Evet, yeterince denerseniz". Gerçekten "stdin / stdout yükü olmadan X'i nasıl yapabilirim?" Bu durumda neden statik veya dinamik olarak bağlı bir kütüphane kullanılmıyor? Herhangi bir nedenle kullanıcı arayüzünden ayrı bir program olması için bu kütüphaneye ihtiyacınız var mı?
Ixrec

Teşekkürler, Ixrec. Başlığımda önerdiğin gibi ifade ettiğimi düşünüyor musun? Kütüphanenin taşınabilir olmasını ve ön uçun yerel olmasını istememin nedeni, yerel UI çerçevelerinin genellikle daha iyi çalıştığını düşünüyorum (görüş uyarısı!), Ancak motorun mantığını iki kez yazmak istemiyorum. .
Brandon Arnold

Statik veya dinamik olarak bağlı bir kütüphane neden taşınabilir olamaz? Re: Başlık, bu bir "çok geniş" soru ders kitabı örneği; Buna odaklanmadım çünkü sorunuzun geri kalanında daha spesifik sorular ortaya çıktı.
Ixrec

@Ixrec Olabilir. Soru, kütüphanenin bu olasılıkları içeren bir kütüphane olduğunu varsayar. Bu kütüphaneyi tüketen herhangi bir uygulamanın, çalışırken eşzamansız olarak aktarılan nesnelere referansları gözlemleyebildiğinden emin olmak istiyorum.
Brandon Arnold

1
@Ixrec Başlığı daha az geniş olacak şekilde güncelledim
Brandon Arnold

Yanıtlar:


1

Apache deve entegrasyon çerçevesini (örneğin) kullanarak kütüphanenizin modeli üzerinde bir entegrasyon katmanı oluşturabilirsiniz. Netty bileşeni muhtemelen ihtiyaçlarınızı karşılayabilir. Gözlenebilir bir modelle entegrasyon katmanınız, modelinizin alınan değişikliklerini dönüştürmeli ve ön uç abonelerine bildirmelidir. İhtiyacınızı yorumlamanın bir başka benzer yolu, modeliniz değiştiğinde, entegrasyon katmanınızdaki gözlemci dinleyicilerinin bir JMS Konusunda bir mesaj yayınladığı, böylece ön uçlardaki bağlı abonelerin bunları alacağı, olay odaklı bir mimari düşünmektir.


0

Tamamen farklı bir cevap yazdım, yayıncınızın bir kuyruğa veya pipoya güncellemeler yazdığını gösteriyor - ama sonra soruyu tekrar okudum.

Eğer doğru anlamak genel soru JRE çalıştırmak için bir kütüphane yazmak istediğiniz, hangi yerel ön uç Java iş parçacığı güvenli bir şekilde durumunu sorgulayabilirsiniz.

Bu inanılmaz derecede geniştir, çünkü bir ön ucun JRE - JNI, EJB RPC, RPC tarzı HTTP arabirimleri, mesaj kuyrukları üzerinde istek yanıtı vb.

Hangisini seçerseniz seçin, zincirin bir noktasında bir Java yöntemi çağrısı olmalı ve iş parçacığı güvenliğini kontrol edebileceğiniz yer burası. Orada, tüm iplik güvenlik araçları cephaneliği emrinizde. Senkronize edebilir, savunma kopyalarını iade edebilir, önbelleğe alınmış verilerle çalışabilirsiniz, vb.

Ancak, takip etmek istediğiniz model olup olmadığını düşünün. "Bana sorma, size söyleyeceğim" modeline geçmek daha temiz olabilir, burada kütüphaneniz, nesneleri sorgulamak için yeterli bilgi içermeyen ön uç güncellemeleri getirir.


Ekstra yorum - Redis'i (veya benzeri) ön ve arka uçlarınız arasında bir aracı olarak kullanmayı düşündünüz mü?
ince
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.