Forum İçeriği > Persistence API's > Rich-Client Yapıda Kullanıcılara Mesaj Gönderme

zerenn 25 ay önce
Aktivite Puanı: 10
Merhaba herkese, Öncelikle sistemi anlatarak başlamak istiyorum. Firma içerisinde offline çalışan bir erp sistemi var ve application server üzerinden oracle database de işlemler yapılıyor. Bazen o anda sisteme bağlı olan kullanıcıların bağlantısını kesmek gerekebilir(ear atıldığı durumlar vs..), bu durumda iasları stop etmek bilgi kayıplarına, yada kirli dataların oluşmasına yol açabiliyor. Bu nedenle o anda sistemde olan kullanıcılara erp üzerinden mesaj göndermek istiyorum. İlk aklıma gelen, mesajların yazıldığı bir tablo olması ve erp ye giriş yapıldığında arka tarafta bir thread çalışması ve birkaç dakikada bir tabloyu dinlemesi, ama aynı anda 2000 kullanıcının bağlı olması sistemi çok yavaşlatır. Bu konuda yardımlarınızı bekliyorum, farklı düşüncelerede açığım..
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

Latest Activity

yeni bir mesaj yolladı. TopLink EclipseLink
5 ay önce
mesaja yanıt verdi RE: HttpClient.
6 ay önce
mesaja yanıt verdi RE: HttpClient.
7 ay önce
yeni bir mesaj yolladı. HttpClient
7 ay önce
yeni bir mesaj yolladı. HttpClient
7 ay önce
yeni bir mesaj yolladı. Birt ile Raporlarma
10 ay önce
mesaja yanıt verdi RE: Hibernate.
10 ay önce
mesaja yanıt verdi RE: wicket kendi sayfama yonlendirme.
10 ay önce
yeni bir mesaj yolladı. wicket kendi sayfama yonlendirme
11 ay önce
yeni bir mesaj yolladı. wicket kendi sayfama yonlendirme
11 ay önce

Top Contributors

71
ertugrula
53
Abdulkadir Selcukoglu
49
Altuğ Bilgin Altıntaş
32
wicket_id_tolga
30
Taner Diler