際際滷

際際滷Share a Scribd company logo
JEE KURZUS 10. HT
SETENY.JANOS@TIGRA.HU
1
WebSocket 辿s Push
1. K辿tir叩ny炭 duplex kommunik叩ci坦 egyetlen TCP socketen

2. Az elz 坦r叩kon haszn叩lt HTTP protokol egyir叩ny炭 request / response
protokol

3. Jellemzen Push - a kliens ir叩ny叩ba men adatforgalomra haszn叩lj叩k

4. L叩sd az al叩bbi p辿ldaalkalmaz叩sokat
http://www.primefaces.org/showcase/push/counter.xhtml
http://www.primefaces.org/showcase/push/chat.xhtml
http://www.primefaces.org/showcase/push/notify.xhtml
http://www.primefaces.org/showcase/push/viewparam.xhtml
http://www.primefaces.org/showcase/push/chart.xhtml
http://www.primefaces.org/showcase/push/photoShare.xhtml

5. https://hu.wikipedia.org/wiki/WebSocket

6. The Java EE Tutorial, Chapter 18 Java API for WebSocket
2
pom.xml - Maven f端ggs辿gek
<!-- WebSocket 辿s Push t叩mogat叩s -->
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-runtime</artifactId>
<version>2.4.7</version>
</dependency>

<!-- JavaServer Faces komponensek Push t叩mogat叩ssal -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>6.0</version>
</dependency>

<!-- response.sendRedirect(index.html);-hez kell -->
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.1_spec</artifactId>
<scope>provided</scope>
</dependency>
3
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://
xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>PrimePushServlet</servlet-name>
<servlet-class>org.primefaces.push.PushServlet</servlet-class>
<init-param>
<param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name>
<param-value>org.atmosphere.cache.UUIDBroadcasterCache</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>PrimePushServlet</servlet-name>
<url-pattern>/primepush/*</url-pattern>
</servlet-mapping>
</web-app>
4
MemberRegistration.java
public void register(Member member) throws Exception {
...
EventBus eventBus = EventBusFactory.getDefault().eventBus();
eventBus.publish("/reload", 1234);
}

// Nem m撤k旦dik a MemberController-ben

@Schedule(hour = "*", minute = "*", second = "*/10")
public void updateTime() {
EventBus eventBus = EventBusFactory.getDefault().eventBus();
Date date = Calendar.getInstance().getTime();
eventBus.publish("/date", String.valueOf(date));
}
5
DateResource.java
@PushEndpoint("/date")
public class DateResource {

@OnMessage(encoders = {JSONEncoder.class})
public String onMessage(Date date) {
DateFormat dateFormat =
new SimpleDateFormat("yyyy.MM.dd. HH:mm:ss");
return dateFormat.format(date);
}
}
6
MemberController.java
public void register() throws Exception {
...
HttpServletResponse response =
(HttpServletResponse) facesContext
.getExternalContext()
.getResponse();

response.sendRedirect("index.html");
facesContext.responseComplete();
}
7
index.xhtml - Allocation list
<h1>Allocation list</h1>

<h:form id="form">
<h:outputText id="out" styleClass="ui-widget display" />

<p:commandButton value="Add" action="add?faces-redirect=true" />
</h:form>

<p:socket onMessage="handleDate" channel="/date" />
<script type="text/javascript">
function handleDate(data) {
$('.display').html(data);
}
</script>

<p:socket onMessage="handleReload" channel="/reload" />
<script type="text/javascript">
function handleReload() {
location.reload();
}
</script>

<h2>Allocations</h2>
8
add.xhtml - Add Allocation
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a="http://xmlns.jcp.org/jsf/passthrough"
template="/WEB-INF/templates/default.xhtml">
...
<h:form id="reg">
<h2>Allocation Registration</h2>
<p>Enforces annotation-based constraints defined on the
model class.</p>
<h:panelGrid columns="3" columnClasses="titleCell">
...
<h:outputLabel for="start" value="Start:"/>
<h:inputText id="start"
a:placeholder="2016-10-13 00:00"
value="#{newAllocation.start}">
<f:converter converterId="myDateTimeConverter"/>
</h:inputText>
<h:message for="start" errorClass=invalid"/>
...
</h:panelGrid>
...
</ui:composition>
9
2. beadand坦
1. Az els beadand坦t kell tov叩bbfejleszteni

2. A feladat l辿nyeges r辿sze a csapatj叩t辿k

3. Sz端ks辿ges lesz tov叩bbi k辿rd辿sekkel pontos鱈tani
a k旦vetkez lapon l辿v feladatkit撤z辿st

4. Aki 2 k辿rd辿st fel tesz a facebook csoportban az
egy jeggyel jobbat kap erre a beadand坦ra

5. Aki technikai k辿rd辿sre helyes v叩laszt ad az m辿g
egy jeggyel jobbat kap
10
Feladatkit撤z辿s 1. lap
1. T旦b terem kezel辿se:
A men端ben f旦l端l lehessen 3 terem k旦z端l v叩lasztani

2. A lista f旦l旦tt lehessen r叩di坦gombokkal ezeket a sz撤r辿si
f旦lt辿teleket v叩lasztani: ma, ez a h辿t, ez a h坦nap, 旦sszes

3. Foglal叩s t旦rl辿se

4. Foglal叩s m坦dos鱈t叩sa (Ez a legkevesebbet 辿r funkci坦. Ha a
t旦bbi funkci坦 j坦l siker端lt en辿lk端l is lehet 5-旦st kapni.)

5. Ne lehessen egym叩st 叩tfed intervallumokat foglalni

6. A minim叩lisan foglalhat坦 intervallum 15 perc

7. Enn辿l kisebb foglal叩st nem szabad elfogadni
11
Feladatkit撤z辿s 2. lap
1. A lista f旦l旦tt egy j foglal叩s nev撤 gomb legyen

2. Ennek megnyom叩s叩ra v叩ltsunk egy olyan lapra, ahol
meg lehet adni az 炭j foglal叩s mezinek 辿rt辿keit

3. Ugyanezt a lapot haszn叩ljuk foglal叩s m坦dos鱈t叩s叩ra is

4. A lista lapra kell visszat辿rni sikeres foglal叩s eset辿n

5. A lista lapon jelenjen meg a pontos id, amit 15
m叩sodpercenk辿nt friss鱈teni kell 

6. A lista lapot akkor is friss鱈teni kell, ha az adott szerverre
kapcsol坦d坦 m叩s f旦lhaszn叩l坦 vett f旦l egy 炭j foglal叩st
12
Feladatkit撤z辿s 3. lap
<h:inputText id="start"
a:placeholder="2016-10-13 00:00"
value="#{newAllocation.start}">
<f:converter converterId="myDateTimeConverter"/>
</h:inputText>
13
Az al叩bbi megold叩ssal 辿s az al叩bbi form叩tumban

kell a start 辿s end d叩tumot 辿s idt bek辿rni.

Ennek megfelel konverter oszt叩lyt kell 鱈rni 辿s 

myDateTimeConverter n辿ven el辿hetv辿 tenni.

More Related Content

Jee kurzus 10. het

  • 1. JEE KURZUS 10. HT SETENY.JANOS@TIGRA.HU 1
  • 2. WebSocket 辿s Push 1. K辿tir叩ny炭 duplex kommunik叩ci坦 egyetlen TCP socketen 2. Az elz 坦r叩kon haszn叩lt HTTP protokol egyir叩ny炭 request / response protokol 3. Jellemzen Push - a kliens ir叩ny叩ba men adatforgalomra haszn叩lj叩k 4. L叩sd az al叩bbi p辿ldaalkalmaz叩sokat http://www.primefaces.org/showcase/push/counter.xhtml http://www.primefaces.org/showcase/push/chat.xhtml http://www.primefaces.org/showcase/push/notify.xhtml http://www.primefaces.org/showcase/push/viewparam.xhtml http://www.primefaces.org/showcase/push/chart.xhtml http://www.primefaces.org/showcase/push/photoShare.xhtml 5. https://hu.wikipedia.org/wiki/WebSocket 6. The Java EE Tutorial, Chapter 18 Java API for WebSocket 2
  • 3. pom.xml - Maven f端ggs辿gek <!-- WebSocket 辿s Push t叩mogat叩s --> <dependency> <groupId>org.atmosphere</groupId> <artifactId>atmosphere-runtime</artifactId> <version>2.4.7</version> </dependency> <!-- JavaServer Faces komponensek Push t叩mogat叩ssal --> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>6.0</version> </dependency> <!-- response.sendRedirect(index.html);-hez kell --> <dependency> <groupId>org.jboss.spec.javax.servlet</groupId> <artifactId>jboss-servlet-api_3.1_spec</artifactId> <scope>provided</scope> </dependency> 3
  • 4. web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http:// xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <servlet> <servlet-name>PrimePushServlet</servlet-name> <servlet-class>org.primefaces.push.PushServlet</servlet-class> <init-param> <param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name> <param-value>org.atmosphere.cache.UUIDBroadcasterCache</param-value> </init-param> <load-on-startup>0</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>PrimePushServlet</servlet-name> <url-pattern>/primepush/*</url-pattern> </servlet-mapping> </web-app> 4
  • 5. MemberRegistration.java public void register(Member member) throws Exception { ... EventBus eventBus = EventBusFactory.getDefault().eventBus(); eventBus.publish("/reload", 1234); } // Nem m撤k旦dik a MemberController-ben @Schedule(hour = "*", minute = "*", second = "*/10") public void updateTime() { EventBus eventBus = EventBusFactory.getDefault().eventBus(); Date date = Calendar.getInstance().getTime(); eventBus.publish("/date", String.valueOf(date)); } 5
  • 6. DateResource.java @PushEndpoint("/date") public class DateResource { @OnMessage(encoders = {JSONEncoder.class}) public String onMessage(Date date) { DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd. HH:mm:ss"); return dateFormat.format(date); } } 6
  • 7. MemberController.java public void register() throws Exception { ... HttpServletResponse response = (HttpServletResponse) facesContext .getExternalContext() .getResponse(); response.sendRedirect("index.html"); facesContext.responseComplete(); } 7
  • 8. index.xhtml - Allocation list <h1>Allocation list</h1> <h:form id="form"> <h:outputText id="out" styleClass="ui-widget display" /> <p:commandButton value="Add" action="add?faces-redirect=true" /> </h:form> <p:socket onMessage="handleDate" channel="/date" /> <script type="text/javascript"> function handleDate(data) { $('.display').html(data); } </script> <p:socket onMessage="handleReload" channel="/reload" /> <script type="text/javascript"> function handleReload() { location.reload(); } </script> <h2>Allocations</h2> 8
  • 9. add.xhtml - Add Allocation <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" template="/WEB-INF/templates/default.xhtml"> ... <h:form id="reg"> <h2>Allocation Registration</h2> <p>Enforces annotation-based constraints defined on the model class.</p> <h:panelGrid columns="3" columnClasses="titleCell"> ... <h:outputLabel for="start" value="Start:"/> <h:inputText id="start" a:placeholder="2016-10-13 00:00" value="#{newAllocation.start}"> <f:converter converterId="myDateTimeConverter"/> </h:inputText> <h:message for="start" errorClass=invalid"/> ... </h:panelGrid> ... </ui:composition> 9
  • 10. 2. beadand坦 1. Az els beadand坦t kell tov叩bbfejleszteni 2. A feladat l辿nyeges r辿sze a csapatj叩t辿k 3. Sz端ks辿ges lesz tov叩bbi k辿rd辿sekkel pontos鱈tani a k旦vetkez lapon l辿v feladatkit撤z辿st 4. Aki 2 k辿rd辿st fel tesz a facebook csoportban az egy jeggyel jobbat kap erre a beadand坦ra 5. Aki technikai k辿rd辿sre helyes v叩laszt ad az m辿g egy jeggyel jobbat kap 10
  • 11. Feladatkit撤z辿s 1. lap 1. T旦b terem kezel辿se: A men端ben f旦l端l lehessen 3 terem k旦z端l v叩lasztani 2. A lista f旦l旦tt lehessen r叩di坦gombokkal ezeket a sz撤r辿si f旦lt辿teleket v叩lasztani: ma, ez a h辿t, ez a h坦nap, 旦sszes 3. Foglal叩s t旦rl辿se 4. Foglal叩s m坦dos鱈t叩sa (Ez a legkevesebbet 辿r funkci坦. Ha a t旦bbi funkci坦 j坦l siker端lt en辿lk端l is lehet 5-旦st kapni.) 5. Ne lehessen egym叩st 叩tfed intervallumokat foglalni 6. A minim叩lisan foglalhat坦 intervallum 15 perc 7. Enn辿l kisebb foglal叩st nem szabad elfogadni 11
  • 12. Feladatkit撤z辿s 2. lap 1. A lista f旦l旦tt egy j foglal叩s nev撤 gomb legyen 2. Ennek megnyom叩s叩ra v叩ltsunk egy olyan lapra, ahol meg lehet adni az 炭j foglal叩s mezinek 辿rt辿keit 3. Ugyanezt a lapot haszn叩ljuk foglal叩s m坦dos鱈t叩s叩ra is 4. A lista lapra kell visszat辿rni sikeres foglal叩s eset辿n 5. A lista lapon jelenjen meg a pontos id, amit 15 m叩sodpercenk辿nt friss鱈teni kell 6. A lista lapot akkor is friss鱈teni kell, ha az adott szerverre kapcsol坦d坦 m叩s f旦lhaszn叩l坦 vett f旦l egy 炭j foglal叩st 12
  • 13. Feladatkit撤z辿s 3. lap <h:inputText id="start" a:placeholder="2016-10-13 00:00" value="#{newAllocation.start}"> <f:converter converterId="myDateTimeConverter"/> </h:inputText> 13 Az al叩bbi megold叩ssal 辿s az al叩bbi form叩tumban kell a start 辿s end d叩tumot 辿s idt bek辿rni. Ennek megfelel konverter oszt叩lyt kell 鱈rni 辿s myDateTimeConverter n辿ven el辿hetv辿 tenni.