Örnek

Tomcat 9 ve JSF 2.3 ile Bir Web Socket Örneği

Bu örnekte JSF 2.3'de "f:websocket" kullanılarak bir web socket örneği yaratılmıştır. Örnekte bir sayfadan mesaj gönderildiği zaman hem mesaj mesaj gönderilen sayfaya hem de ikinci bir sayfaya gelen mesaj sunucudan push edilmiştir.
Öcelikle aşağıdakiler bağımlılıkta olmalıdır :
<dependency>
	<groupId>java.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>4.0.0</version>
</dependency>
<dependency>
	<groupId>org.glassfish</groupId>
	<artifactId>javax.faces</artifactId>
	<version>2.3.9</version>
</dependency>
<dependency>
	<groupId>javax.faces</groupId>
	<artifactId>javax.faces-api</artifactId>
	<version>2.3</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>javax.enterprise</groupId>
	<artifactId>cdi-api</artifactId>
	<version>1.2<version>
</dependency>
<dependency>
	<groupId>org.jboss.weld.servlet</groupId>
	<artifactId>weld-servlet</artifactId>
	<version>2.2.9.Final</version>
</dependency>
<dependency>
	<groupId>javax.json</groupId>
	<artifactId>javax.json-api</artifactId>
	<version>1.1.4</version>
</dependency>
<dependency>
	<groupId>org.glassfish</groupId>
	<artifactId>javax.json</artifactId>
	<version>1.1.4</version>
</dependency>
java.lang.ClassNotFoundException: javax.json.Json
java.lang.ClassNotFoundException: org.glassfish.json.JsonProviderImpl hataları alıyorsanız javax.json ve javax.json-api bağımlılıklarını eklememişsiniz demektir.
Öncelikle girilen mesajı diğerlerine push eden bean yaratıyoruz :
import java.io.Serializable;
import javax.faces.push.Push;
import javax.faces.push.PushContext;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@ViewScoped
public class MessageBean implements Serializable {
	@Inject @Push
        private PushContext mypush;
	private String message;
	
	public void sendMessage() {
		mypush.send(message);
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	
}
mypush, push enpoint'idir. sendMessage() yöntemi çağrıldığında gelen mesaj diğerler sayfalara gönderilir.
Mesaj üreten ve aynı zamanda dışarıdan gelen bir mesajı gösteren sayfa aşağıdaki gibidir :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
  <title>Socket</title>
</h:head>
<h:body>
<h:form>
	<script>
		function myMessageListener(message) {
			alert(message);
		}
	</script>
	
	<f:websocket channel="mypush" onmessage="myMessageListener"/>
	<h:inputText id="pushMessage" value="#{messageBean.message}"/>
	<br/>
	<h:commandButton action="#{messageBean.sendMessage}" value="Send Message"/>
	
</h:form>
</h:body>      
</html>
Yazı alanına mesajı yazıp Send Message düğmesine basılınca MessageBean'in sendMessage yöntemi çağrılır. Bu yöntemde socket açmış tüm sayfalara mesajı iletir.
Sadece gelen mesajı gösterecek ikinci sayfa aşağıdaki gibidir :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:h="http://java.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
<h:head>
  <title>Socket</title>
</h:head>
<h:body>
<h:form>
	<script>
		function myMessageListener(message) {
			alert(message);
		}
	</script>
	
	<f:websocket channel="mypush" onmessage="myMessageListener"/>
	
</h:form>
</h:body>      
</html>

İlk sayfada mesajı girip düğmeye basarsanız hem bulunduğunuz sayfada hem de diğer sayfada alert penceresinde girdiğiniz mesaj gözükecektir.
zafer.teker , 26.03.2020

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir