Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > PainKiller

Оценить эту запись

Поднимаем сервер в облаке (Jelastic + Java + Tomcat + MySQL + BlazeDS) Часть III

Запись от PainKiller размещена 03.03.2014 в 12:14

Для начала надо скачать BlazeDS. При желании можно загрузить BlazeDS Trunk – эта версия сразу интегрирована с какой то версией Tomcat, но нам это не нужно, у нас свой сервер, в любом случае не важно что вы скачали, самое главное в скачанном найти файл blazeds.war – это файл шаблона проекта для BlazeDS. Распаковываем его и видим 2 папки, нас интересует папка WEB-INF, копируем из нее папку flex в нашу папку (путь от корня проекта должен быть такой ../web/WEB-INF/flex), копируем содержимое папки lib в нашу папку lib где уже лежит jdbc-connector (путь от корня проекта web/WEB-INF/lib). В папке flex лежат конфиги, в lib – jar-файлы с классами BlazeDS. В принципе на этом «подключение» BlazeDS к проекту заканчивается, осталось написать тестовую веб-службу и отредактировать конфиги в папке flex. Начнем со службы, это обычный явовский класс, привожу свой вариант:
Код:
import java.util.*;

/**
 *
 * @author PainKiller
 */
public class NameService
{

    public ArrayList<String> getNames()
    {
        DBManager dbm = new DBManager();
        ArrayList<String> res = dbm.getResults();
        return res;
    }
    
    public String sayHello(String name)
    {
        return "Hello " + name;
    }

}
В этой службе реализовано 2 метода: getNames() – показывает пример работы такого типа службы с БД и возвращает массив имен из нашей базы данных, sayHello () – показывает пример передачи параметра с клиента на сервер. Также не возникает проблем с передачами с явы во флекс и обратно типизированных объектов, пример такого типа я не привожу, т.к. пришлось бы писать еще 2 дополнительных класса ValueObject’ов (один на яве, и один на флеше), поэтому я оставляю это на самостоятельное изучение.

Теперь зарегистрируем нашу службу в файле remoting-config.xml (это один из конфигов, который лежит в папке flex), для этого туда надо вписать следующее:
Код:
<destination id="NameService">
		<properties>
			<source>NameService</source>
		</properties>
	</destination>
В тег source вписывается полное имя класса (с пакетами через точку). Полная версия файла remoting-config.xml теперь должна выглядеть так:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"  class="flex.messaging.services.RemotingService">
   <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>
    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
	<destination id="NameService">
		<properties>
			<source>NameService</source>
		</properties>
	</destination>
</service>
На стороне сервера это все. Собираем проект, упаковываем его в war архив, и загружаем на Jelastic. Теперь чтобы проверить работу нашей службы нужно написать клиента.
Создаем проект в Flash Builder, и пишем такой код:
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   minWidth="300" minHeight="600" width="300" height="600" creationComplete="onComplete(event)">
	<fx:Declarations>
		<!-- Разместить невизуальные элементы (например, службы или объекты значений) -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.collections.*;
			import mx.events.*;
			import mx.messaging.*;
			import mx.messaging.Consumer;
			import mx.messaging.Producer;
			import mx.messaging.events.*;
			import mx.messaging.messages.AsyncMessage;
			import mx.rpc.events.*;
			import mx.rpc.remoting.RemoteObject;
 
			[Bindable]
			private var ro:RemoteObject;
 
 
 
			private function onComplete(e:FlexEvent):void
			{
				trace ("onComplete");
				ro = new RemoteObject("NameService");
				ro.endpoint = "http://env-XXXXXXXX.jelasticloud.com/testds/messagebroker/amf";
				ro.addEventListener(FaultEvent.FAULT, faultHandler);
				ro.addEventListener(ResultEvent.RESULT, resultHandler);
				ro.getNames();
				ro.showBusyCursor = true;
 
			}
 
			private function resultHandler(e:ResultEvent):void
			{
				trace ("result:");
				trace(e.result);
				names.dataProvider = e.result as ArrayCollection;
			}
 
			private function faultHandler(e:FaultEvent):void
			{
				trace ("fault");
				trace (e);
			}
 
 
 
		]]>
	</fx:Script>
 
	<s:VGroup y="20" gap="20" horizontalAlign="center" verticalAlign="middle">
	<s:Label id="server_responce" x="2" y="-16" width="276" height="44" fontSize="17"
			 text="{ro.sayHello.lastResult}"/>
		<s:TextInput id="userInput" x="21" width="238"/>
	<s:Button id="send" x="77" y="95" label="Отправить на сервер" click="{ ro.sayHello(userInput.text); }"/>
	<s:List id="names" x="10" y="145" width="280" height="445"></s:List>
	</s:VGroup>
</s:Application>
Можно скомпилировать проект, запустить его, увидеть список имен в компоненте List, ввести какой-нибудь текст в TextInput, нажать кнопку “Отправить на сервер” и получить результат работы удаленной службы.
Тут особо комментировать нечего, мы просто создали удаленную службу, запрашиваем её метод getNames() при старте приложения, и наполняем полученным результатом дата-провайдер компонента List, все это мы делаем в стандартном асинхронном стиле, со слушателями событий. Работа с удаленной службой компонентов TextInput и Button осуществляется через байдинг – флексовый способ связывания данных.
В общем, наверное пока это все, в дальнейшем можно будет рассмотреть Message Service, и работу с типизированными объектами, если к этому будет интерес со стороны читателей.
Исходники прикладываю:
Вложения
Тип файла: rar flex.rar (1.88 Мб, 101 просмотров)
Тип файла: rar javaserver2.rar (9.21 Мб, 123 просмотров)
Всего комментариев 0

Комментарии

 

 


Часовой пояс GMT +4, время: 04:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.