Препараты
Как обычно у вас должны быть установлены Java , Maven и GlassFish . Если вам это нужно из одних рук, попробуйте NetBeans 7.2 . Это новейшая и самая лучшая версия, в которой есть все, что нужно для этого примера. Установите части или целое в выбранное вами место и начните с создания нового домена GlassFish:
|
1
|
asadmin create-domain pf_push |
принять значения по умолчанию и начать свой домен
|
1
|
asadmin start-domain pf_push |
Теперь вам нужно включить поддержку Comet для вашего домена. Сделайте это с помощью http: // <host>: 4848 / admin ui или с помощью следующей команды:
|
1
|
asadmin set server-config.network-config.protocols.protocol.http-1.http.comet-support-enabled='true' |
Это все, что вам нужно сделать, чтобы настроить свой домен.
Настройка проекта Maven
Теперь переключитесь на IDE и создайте новый проект Java EE 6 на основе Maven. Добавьте репозиторий primefaces в раздел <repositories> и добавьте зависимость primefaces в раздел вашего проекта <dependencies> или pom.xml вашего проекта:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<repository> <id>primefaces</id> <layout>default</layout> <name>Repository for library PrimeFaces 3.2</name> </repository><dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>3.4</version></dependency> |
Кроме того, нам нужна последняя зависимость от атмосферы (в этом выпуске есть контракты с JeanFrancois Arcand )
|
1
2
3
4
5
|
<dependency> <groupId>org.atmosphere</groupId> <artifactId>atmosphere-runtime</artifactId> <version>1.0.0</version></dependency> |
Он использует Log4j, и если вам нужно иметь больше выходных данных, было бы неплохо также включить соответствующую конфигурацию или соединить ее с JUL с помощью slf4j. Чтобы сделать позже, просто включите следующее в ваш pom.xml:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>1.6.6</version> </dependency> |
Осталось сделать только одно. Компонент PrimePush должен иметь зарегистрированный канал сервлета. Итак, откройте ваш web.xml и добавьте в него следующее:
|
1
2
3
4
5
6
7
8
|
<servlet> <servlet-name>Push Servlet</servlet-name> <servlet-class>org.primefaces.push.PushServlet</servlet-class></servlet><servlet-mapping> <servlet-name>Push Servlet</servlet-name> <url-pattern>/primepush/*</url-pattern></servlet-mapping> |
Вот и все! На коду!
Код
Я собираюсь использовать пример, указанный в руководстве пользователя PrimeFaces . Очень простой пример с глобальным счетчиком, который можно увеличить.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import java.io.Serializable;import javax.faces.bean.ManagedBean;import javax.faces.bean.SessionScoped;import org.primefaces.push.PushContext;import org.primefaces.push.PushContextFactory;/** * Counter is a global counter where each button click increments the count * value and new value is pushed to all subscribers. * * @author eiselem */@ManagedBean@SessionScopedpublic class GlobalCounterBean implements Serializable { private int count; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public synchronized void increment() { count++; PushContext pushContext = PushContextFactory.getDefault().getPushContext(; pushContext.push('/counter', String.valueOf(count)); }} |
PushContext содержит всю магию здесь. Он в основном используется для публикации и планирования сообщений, управления слушателями и многого другого. Это называется с вашего лица. Это выглядит просто и знакомо:
|
1
2
3
4
|
<h:form id='counter'><h:outputText id='out' value='#{globalCounterBean.count}' styleClass='display' /><p:commandButton value='Click' actionListener='#{globalCounterBean.increment}' /></h:form> |
Это в основном ничего не делает, кроме увеличения счетчика. Таким образом, вы должны добавить еще немного магии для подключения к каналу push. Добавьте следующее ниже формы:
|
1
2
3
|
<p:socket channel='/counter' ><p:ajax event='message' update='counter:out' /></p:socket> |
<p: socket /> — это компонент PrimeFaces, который обрабатывает соединение между сервером и браузером. Это делается путем определения канала связи и обратного вызова для обработки трансляций. Содержащийся компонент <p: ajax /> прослушивает событие сообщения и обновляет поле счетчика в форме. Однако для этого требуется и дополнительный сервер туда-обратно. Вы также можете сократить это, используя небольшой java-скрипт и привязав к нему атрибут onMessage, чтобы обновить поле вывода:
|
1
2
3
4
5
|
<script type='text/javascript'>function handleMessage(data) {$('.display').html(data);}</script> |
|
1
|
<p:socket onMessage='handleMessage' channel='/counter' /> |
Это все. Поздравляем с первым примером PrimeFaces Push.
Приятного кодирования и не забудьте поделиться!
Ссылка: PrimeFaces Push with Atmosphere на GlassFish 3.1.2.2 от нашего партнера по JCG Маркуса Эйзела ( Markus Eisele) из блога « Разработка программного обеспечения для предприятий с использованием Java» .
