Forum İçeriği > Persistence API's > Rich-Client Yapıda Kullanıcılara Mesaj Gönderme
|
|
Onur Aktaş 25 ay önce
Aktivite Puanı: 12
Merhaba, Ear atildigi durumlar dediginiz dikkatimi cekti de, eger komple
uygulama restart olacak bir update vs yapilacak ancak hersey tikir tikir devam
etmesini istiyorsaniz birden fazla sunucuyu kumelemeniz gerekecek. Bunun
disindaki durumlarda aklima gelen bir kac sey var. Surekli kontrol eden bir
thread yazmaktansa, tum methodlar cagrilmadan once calisan bir method, ortada
duran bir degiskeni kontrol etmesi ona gore tamam veya devam etmesi.
Interceptor, Servlet filter, PhaseListener vs size hangisi uyuyorsa artik.
Ortada duracak degisken: 1) global static bir degisken, app serverdaki bagli
uygulama tarafindan gorulebilen, herkese yansiyacaktir. 2) Cache'de tutmak.
Mesaj gostermek icin kullanici hic bir islem yapmasa bile durup dururken bir
mesaj gosteriyim diyorsaniz javascript ile periodik olarak ajax request
gondermek ve sunucunun cevabina gore bir mesaj gostermek.
|
|
|
enes.tahan 25 ay önce
Aktivite Puanı: 10
Anladığım kadarı ile uygulamanızı tek bir uygulama sunucusu üzerinde
çalıştırıyosunuz. uygulama çalışırken deploy yapmanız halinde , sunucunuzu
yeniden başlatmanız gerekecektir. Yenide başlaması sessionların kaybolması
dolayısı ile oturuma acan her kullanıcıya ait ve kayıtlarda kullanılan
bilgilerin bulunmaması ve kayıtlarda tutarsızlıklar oluşacaktır. Eğer bir Jsf
projesi ise phaselistener da sessionın yeni olup olmadıgını kontrol edebilir ve
uygulamanın baslangıç sayfasına yönlendirebilirsiniz. bu durumda oturum
kaybolmuş ise kayıt yapmaya çalışsa bile ilk submitte oturumun kaybolması
sebebiyle kayıt gerçekleşmiyecektir. mesaj kısmı Onur Beyin dediği gibi
javascript ve ajax ile kullanarak yapabilirsiniz. örnek kod parçası bir phase
listener için. public void beforePhase(PhaseEvent e) { FacesContext fc =
e.getFacesContext(); HttpServletRequest userRequest =(HttpServletRequest)
ec.getRequest(); HttpServletResponse userResponse =(HttpServletResponse)
ec.getResponse(); HttpSession session = (HttpSession) ec.getSession(true); if
(session.isNew()) { fc.responseComplete(); userResponse.addHeader("Refresh","5;
URL=/...); ... // üç noktalı kısma uygulamanın giriş sayfasını yazabilirsiniz
...
|
|
|
zerenn 25 ay önce
Aktivite Puanı: 10
teşekkür ederim cevaplar için. Biraz daha detaylandırmakta yarar var; -ear
atıldığı durumlarda sistemin(erp) işlemesini istemiyoruz, restart olsun
istiyoruz(güncellemeleri aldıklarından emin olmak için) ve bunu kullanıcıya
bırakmak istiyoruz. yani deploy yapmak, stop etmek vb. durumlarda kullanıcılara
mesaj göndereceğim "5 dk içinde sistem kapanacaktır, işlemlerinizi kaydedin ve
çıkın" gibi.. -sistem web uygulaması değil offline çalışmakta -tek değil, 3
uygulama sunucusu(tek load balancerdan yönlenen) -onur bey methodlar
çağrılmadan önce bir kontrol koymaktan bahsetmişsiniz fakat bu küçük bir proje
değil, bütün methodları taramak şu an için imkansız gibi.. anlattıklarınızı tam
olarak anlayamamış olabilirim, kusura bakmayın, javada bir hayli yeniyim. daha
düşük seviye anlatırsanız sevinirim:)
|
|
|
Onur Aktaş 25 ay önce
Aktivite Puanı: 12
Merhaba, Sistem web uygulamasi degil ise daha da kolay (Filterlar haric), benim
javascript ile ajax request gonderip donen sonucu alip gosterme ornegi kisitli
bir alanda ki cozum. Desktop uygulamalarinda client ile iletisim icin cok daha
fazla seceneginiz var. (Message Queue (JBoss MQ/Apache MQ, Multicast / Socket).
En basidi yine dusundugunuz tablo mantigi, sayet benim client sayim cok fazla
degil bana timer ile bile yeter bir avuc kum icin tir kiralaminin anlami yok
diyorsaniz ortaya koyun bir cache (memcached vs.) timer ile clientlariniz
periodik olarak kontrol etsin.. Deploy edilmeden once de bu alani set edin
"deploy olacak" diye, clientlar bu mesaji gordugu anda kullaniciya uyari
gostersin, ikinci kontrole kadar birsey yapamasin vs. Tablo yerine cache
kullanmak bu islem icin db'e yazmaktansa daha lightweight daha hizli bir yere
yazmak icin. Tabi fikrimi sorarsaniz bu calisacak ama cok saglikli bir cozum
degil. Her method cagrilmadan once calisacak bir kod demek illa her methodun
onune bir satir eklemeniz anlamina gelmiyor, AOP kavramini incelediyseniz (or:
spring) eger, wildcard bazli a* ile baslayan komutlardan once su komutu
calistir gibi ozellikler sunuyor, veya "void" olan herseyden once sunu calistir
gibilerinden. Daha hizli calisacak, daha saglikli bir cozum mutlaka vardir
arastirmak gerek. Ama cok kritik bir ortam yoksa, client sayisi az ise dedigim
yontemleri kullanabilirsiniz. Iyi calismalar
|
Aktivite Puanı: 10