« Prev : 1 : 2 : 3 : 4 : 5 : Next »

검색어 'BlazeDS'에 대한 23 개의 댓글 검색 결과

  1. 2008/02/05 여기서 뵈니 반갑네요^^ 플렉스컴포넌트카페에서 글 많이 봤는데 ^^ 메... by 머드초보
  2. 2008/02/05 버전이 문제가 있을 수도 있을 것 같습니다. blazeds안에 tomcat이 있는... by 머드초보
  3. 2008/02/12 RemoteObject를 사용하기 위해서는 LCDS나 BlazeDS를 사용해야합니다.... by 머드초보
  4. 2008/02/13 http://labs.adobe.com/technologies/blazeds/ 여기 보니 최소 사양으... by 에이레네
  5. 2008/02/15 blazeds.zip 안에 samples.war 파일 돌려보면 jdk1.5 톰캣 5.5.23에서... by 네버다이
  6. 2008/02/20 오! 그렇군요! 축하드립니다 ^^ 아....그게 프로젝트를 만들 때 blazeDS... by 머드초보
  7. 2008/02/20 머드초보님 드디어 성공했네요. jdk1.5 tomcat.5.5,23, fb 3 beta 3환경... by 네버다이
  8. 2008/03/17 제가 스프링은 잘몰라서 좋은지 안좋은지 모르겠지만 책 구성을 봐서는... by 머드초보
  9. 2008/06/26 앗 시난님 또 방문해주셔서 감사합니다 ^^ 저거 스프링이랑 BlazeDS 잘... by 머드초보
  10. 2008/08/26 저 위에 검색창에서요. remoteobject라고 쳐보세요 ^^ 뭔가 나올겁니다... by 머드초보
  11. 2008/08/29 잘 보고 갑니다... 그런데 blazeDS 링크가 좀 바뀐듯 싶습니다 http:/... by 흐음
  12. 2008/10/08 그렇군요.. 감사합니다..^^ 이렇게 빨리 답변도 해주시구.. 지금 어떤... by Jun
  13. 2008/10/15 좋은 정보 잘 보았습니다. 완전 초보라 잘 이해가 안되어서 질문드릴... by 박병일
  14. 2009/02/06 flex를 공부중인 대학생입니다. DBCP설정하려고 webapps\blazeds\WEB-I... by 왕초보
  15. 2009/02/07 그건 MessageBrokerServlet이라고 해서 DBCP설정하는게 아닙니다. Remo... by 머드초보
  16. 2009/03/24 안녕하세요. 플렉스 초보자 데이비슨입니다. 저는 지금 LCDS를 이용해... by 데이비슨
  17. 2009/03/25 LCDS에서 사용해도 문제가 아마도 없을 겁니다. 근데, 최근에 Spring에... by 머드초보
  18. 2009/08/04 초보 입니다. "blazeds프로젝트아래 WebContent/WEB-INF/flex/remoting... by 천자
  19. 2009/08/07 blazeDS와 LCDS는 remoting-config.xml같은 설정은 동일합니다^^ blaze... by 머드초보
  20. 2009/08/23 안녕하세요~ 제가 이해를 잘 못했는데요-_- 우선 데이터를 Flex컴포넌... by 머드초보
  21. 2009/09/10 안녕하세요, BlazeDS로 Messaging service와 Remote Object를 이용(JAVA... by elyse
  22. 2009/11/09 좋은 예제 감사드립니다 (꾸벅) 덕분에 spring blazeds intergration 1.... by 빠방
  23. 2009/12/31 안녕하세요~ BlazeDS나 LCDS는 서버데이터와 연동하기 위한 도구라고... by 머드초보
다운로드는 여기서....-_- adobe.com 사이트에 가입하셔야 합니다.

BlazeDS버전이 4.X대여야 잘 됩니다. 3.X대면 안되더군요.
그리고 BlazeDS버전이 4.x의 Beta1버전이 있는데, 이걸로 하면 요런 에러가 뜹니다.
ERROR : XML parse error : Error on line 1 of document : cvc-elt.1: Cannot find the declaration of element 'model'. Nested exception: cvc-elt.1: Cannot find the declaration of element 'model'.>$2
그래서 전 Night Build중에 4.0.0.11030버전을 사용해서 하니 되더군요.
다운로드는 여기서 http://opensource.adobe.com/wiki/display/blazeds/download+blazeds+trunk

제 환경은 Eclipse 3.5, Flash Builder 4 Beta 2, JDK 1.6.0 U 16입니다.
플러그인으로 못깐 이유가 기존의 Flex Builder 3가 플러그인으로 깔려있는데, 왠지 꼬일 것 같아서(새가슴 ㄷㄷ)-_-

우선 blazeds.war파일을 Eclipse에서 import.
web.xml을 보면 이상한 Servlet이 하나 더 생겼는데요. RDSDispatchServlet.
이거 풀고, 인증부분을 false로 바꾸면 됩니다. 자체적으로 할 수 있는 인증이 생긴 것 같은데, 이건 더 해봐야 알겠네요.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

<display-name>BlazeDS</display-name>
<description>BlazeDS Application</description>

<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>

<!-- MessageBroker Servlet -->
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<display-name>MessageBrokerServlet</display-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- begin rds -->
<servlet>
<servlet-name>RDSDispatchServlet</servlet-name>
<display-name>RDSDispatchServlet</display-name>
<servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
<init-param>
<param-name>useAppserverSecurity</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>

<servlet-mapping id="RDS_DISPATCH_MAPPING">
<servlet-name>RDSDispatchServlet</servlet-name>
<url-pattern>/CFIDE/main/ide.cfm</url-pattern>
</servlet-mapping>
<!-- end rds -->

<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
</web-app>

테스트 클래스를 하나 만듭니다.
Test.java
package com.mudchobo.test;

public class TestService {

public String sayHello(String name)
{
return "Hello! " + name;
}
}

remoting-config.xml에 destination을 추가.
remoting-config.xml
<destination id="test">
<properties>
<source>com.mudchobo.test.TestService</source>
<scope>application</scope>
</properties>
<adapter ref="java-object" />
</destination>

서버를 이제 작동을 시켜서 띄워둡니다.

이제 Flash Builder로...

프로젝트 생성 -> 타입은 Web, Server type은 J2EE(BlazeDS)
Server location은 Root Folder는 해당 blazeds임포트한 폴더에 있는 WebContent.
Root URL은 http://localhost:8080/blazeds
Context root는 blazeds
Validate Configuration하면 왜 안되지...-_- 암튼 그냥 Finish를 누릅니다-_-

맨 하단에 Data/Services 탭이 있는데, 거기서 Connect to Data/Service.. 클릭.
BlazeDS선택, destionation으로 설정한 test가 하나 보일꺼임. 선택 Finish.
그럼 해당 Destination에 있는 함수인 sayHello가 보이는군요. 사용해봅시다.
여러가지 기능이 있는데요. 저도 잘 몰라서 많이 안해봤는데, 우선 기존에 삽질을 덜어주기 위한 많은 기능을 넣은 것 같습니다. 테스트도 할 수 있고, 자동으로 remoteObject코드도 만들어주고, 뭐 그런 것 같습니다.
Form도 만들어주네요-_-

Test Opeartion을 했더니 파라메터를 던지니 Response value로 나오네요.
사용자 삽입 이미지
버튼 클릭 시 데이터를 요청하는 걸 만들기 위해 Design모드로 변경.
Button과 TextInput, 결과 Label을 하나 추가.
button은 id를 btn, TextInput은 input. button에 오른쪽버튼 누르면 generate Service Call클릭.
그러면 자동으로 click핸들러 함수 만들어지고, sayHello함수 파라메터만 넣으면 되는데, 여기에는 input.text를 넣으면 끝.
Label에는 text에다가 sayHelloResult.lastResult를 바인딩.

DataTest.mxml
<?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/halo" minWidth="1024" minHeight="768" xmlns:test="services.test.*">
<fx:Script>
<![CDATA[
import mx.controls.Alert;

protected function btn_clickHandler(event:MouseEvent):void
{
sayHelloResult.token = test.sayHello(input.text);
}
]]>
</fx:Script>
<fx:Declarations>
<s:CallResponder id="sayHelloResult"/>
<test:Test id="test" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Button x="248" y="245" label="Button" click="btn_clickHandler(event)" id="btn"/>
<s:TextInput x="223" y="215" id="input"/>
<s:Label x="260" y="274" text="{sayHelloResult.lastResult}"/>

</s:Application>

이런 코드가 됨. 개판임-_-
사용자 삽입 이미지

PS. 자동으로 다 해줘서 좋긴 한데...왠지 익숙하지 않은 코드가.....

참고자료
http://sujitreddyg.wordpress.com/2009/06/01/building-flex-application-for-blazeds-remoting-service-using-flash-builder-4/
머드초보 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
그냥 막 하면 잘 안되더군요. 구글링을 해보니 여러 블로그에서 이런 시도를 한 흔적들이 있었습니다-_- App Engine이 자바를 지원한다고 할 때부터 외국에서는 다양한 시도를 하나봅니다-_- 이번 Spring BlazeDS Integration도 누가 먼저 시도를 한 흔적이 있었네요.

이번 Spring BlazeDS Integration 1.0.1릴리즈 기념과 Spring교육 끝난 기념으로 간만에 삽질해봤습니다.
하지만, messaging 등의 심화적인 것은 못해보구요. 우선 서비스를 가져오는지만 해봤습니다.

삽질환경

- IDE
Eclipse3.5와 구글앱앤진 플러그인 - http://code.google.com/intl/ko-KR/eclipse/docs/download.html
Flex Builder 3.0.2
JDK 1.6.0 U14
- 라이브러리
Spring Framework 2.5.6
BlazeDS 3.2.0.3978
Spring BlazeDS Integration 1.0.1
Jackson 1.2.0
Cglib 2.1.3

1. App Engine 프로젝트 생성
프로젝트 생성하고 나서 라이브러리들을 다 복사합니다. 저는 아래와 같이 라이브러리를 복사했습니다.
기존App Engine lib, spring.jar, spring-webmvc.jar, blazeds.war에 있는 lib, jackson-core-lgpl-1.2.0.jar, jackson-mapper-lgpl-1.2.0.jar, cglib-nodep-2.1_3.jar, org.springframework.flex-1.0.1.RELEASE.jar
그리고, appengine-web.xml파일에 한줄 추가합니다.
<sessions-enabled>true</sessions-enabled>

이거 필요한건지는 잘 모르겠군요-_-
WEB-INF폴더아래 blazeds.war파일에 들어있는 flex폴더를 복사합니다(*-config.xml의 파일이 있는 것)

2. 서비스 클래스 생성
이제 서비스를 만들어봅시다. 초간단 헬로우서비스를-_-
src폴더에 만들어봅시다. 전 com.mudchobo.springblazedsserver.service패키지에 HelloService클래스를 생성했음!
HelloService.java
package com.mudchobo.springblazedsserver.service;

public class HelloService {

public String sayHello(String name) {
return "Hello, " + name;
}
}


3. 설정파일 생성 및 설정
스프링관련 설정을 해야해요. web.xml에서 디폴트로 설정된 servlet설정을 지우고 아래를 추가
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/*-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- SpringDispatcherServlet -->
<servlet>
<servlet-name>flex</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>flex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

flex라는 이름의 서블릿을 만들었으니 스프링 설정파일이름인 flex-servlet.xml을 생성합니다.
flex-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:flex="http://www.springframework.org/schema/flex"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">

<flex:message-broker />

<flex:remoting-destination ref="helloService"/>
</beans>

flex라는 네임스페이스를 제공하는데요. <flex:message-broker />이 한줄로 모든 설정이 되어버립니다. M1 삽질했을 때에는 네임스페이스 없어서 bean써주고, 다 설정했던 기억이 나네요. 네임스페이스로 한줄로-_-

remoting-destination태그는 destination을 설정하는 건데, 해당 bean을 ref하면 해당 bean이름으로 destination으로 flex에서 가져올 수 있어요.
그럼 서비스를 설정할 설정파일을 생성해봅시다. configlocation을 /config/*-context.xml을 잡았는데, /config/services-context.xml파일을 만들어봅시다^^
services-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="helloService" class="com.mudchobo.springblazedsserver.service.HelloService" />

</beans>

방금 만든 HelloService를 bean으로 설정.

마지막으로 flex/services-config.xml에서 default-channels를 추가합시다.
<services>
<service-include file-path="remoting-config.xml" />
<service-include file-path="proxy-config.xml" />
<service-include file-path="messaging-config.xml" />
<default-channels>
<channel ref="my-amf"/>
</default-channels>
</services>

그리고 이것도 추가해야해요.
<system>
<manageable>false</manageable>
....
</system>

이거 추가안하면 앱엔진에서 이런 에러로그를 뿜음-_-
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_messageBrokerDefaultHandlerMapping': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_messageBroker': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanInitializationException: MessageBroker initialization failed; nested exception is java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory is a restricted class. Please see the Google App Engine developer's guide for more details.

관리자 기능이라고 하는 것 같은데, 정확히 뭔지는 잘 모르겠지만, 끄면 잘 됩니다-_-

4. 클라이언트 프로젝트 생성
flex project를 생성할 때 이렇게 생성해주면 편합니다.
Flex Project선택 -> Project name쓰고, Application server type은 J2EE, Create combined Java~~는 체크해제, Use remote object access service는 체크하고, Next.
그 다음 Serverlocation 셋팅을 Root folder는 AppEngine의 war폴더를 지정해주면 되구요.
Root URL은 앱엔진 기본 실행 경로인 http://localhost:8080하면 되구요. Context root는 /로 지정하면 됩니다.
그러면 디버그나 Run시에 localhost:8080/프로젝트명/프로젝트명.html로 실행이 돼요.
코드는
SpringBlazeDSClient.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">

<mx:RemoteObject id="srv" destination="helloService" />
<mx:TextInput id="inputName" />
<mx:Button label="전송" id="btnConfirm" click="srv.sayHello(inputName.text)" />
<mx:Label id="labelResult" text="{srv.sayHello.lastResult}" />

</mx:Application>

이 코드 너무 활용하는 것 같아-_- 암튼 destination은 helloService로 설정했기 때문에 이걸로 지정하면 됩니다.

5. 이제 배포 및 실행
이제 swf파일도 appengine프로젝트에 생성하고, AppEngine을 배포하고 실행하면 또다른 에러를 보실 수 있습니다-_-
[RPC Fault faultString="Detected duplicate HTTP-based FlexSessions, generally due to the remote host disabling session cookies. Session cookies must be enabled to manage the client connection correctly." faultCode="Server.Processing.DuplicateSessionDetected" faultDetail="null"]
와....미쳐버립니다. 이건 뭔가....검색해보니 앱엔진이 여러 서블릿배포할 때 1개의 클라이언트 정보를 동일하게 배포를 해서 어쩌구 라고 번역기를 돌리니 써있네요-_- 이걸 픽스한 jar파일이 돌아다닙니다-_-
기존 flex-messaging-core.jar파일을 위 파일로 교체해주면 되더군요.

이제 실행하면 잘 될겁니다.
실행주소입니다.
http://mudchobo1.appspot.com/SpringBlazeDSClient/SpringBlazeDSClient.html


사용자 삽입 이미지

스크린샷.....

messaging이나 security적용한 것도 한번 해봐야겠네요.

참고사이트
http://www.adobe.com/jp/devnet/flex/articles/google_app_eng_w_beazeds_p2.html
http://martinzoldano.blogspot.com/2009/04/appengine-adobe-blazeds-fix.html
머드초보 이 작성.

당신의 의견을 작성해 주세요.

  1. Comment RSS : http://mudchobo.tomeii.com/tt/rss/comment/440
  2. 빠방 2009/11/09 15:57  편집/삭제  댓글 작성  댓글 주소

    좋은 예제 감사드립니다 (꾸벅)
    덕분에 spring blazeds intergration 1.0.1과 ibatis 연동에 성공했습니다.
    이전에 올려주신 연동예제와 새로 릴리즈된 1.0.1 예제가 아니었으면 짧은 영어실력때문에 도저히 알아먹지 못해고 포기해버렸을꺼에요 ㅠㅠ

    • 머드초보 2009/11/09 16:20  편집/삭제  댓글 주소

      아네 도움이 되셨다니 다행이네요.
      저도 짧은 영어실력이어서....ㅠㅠ

  3. 옹씨루 2009/11/12 15:41  편집/삭제  댓글 작성  댓글 주소

    좋은 정보 감사합니다.

[로그인][오픈아이디란?]
PHP는 HTTPService말고 방법이 없을까 하고 찾아보니, Zend에서 AMF를 이용하여 개발한게 있군요. Adobe의 공식 지원으로 만들어진거라 빠르리라고 생각합니다^^ (적어도 HTTPService보단 빠르겠죠!)

암튼, BlazeDS를 하셨다면 그리 어렵지 않군요.
이번에도 간단하게 소녀시대예제를 통해...접근해봅시다-_-;

간단히 데이터를 불러오고, 저장도 해보는 그런 애플리케이션을 만들어봅시다.

우선 Eclipse에서 php가 가능하도록 해야하는데요. 뭐 그냥 editplus에서 해도 상관없습니다. Zend홈페이지에 가면 자기네들 IDE깔라고 합니다-_-; Zend Studio라는 게 있네요. 뭐 php단은 netbeans를 이용해서 개발하셔도 되고, 이클립스에 있는 PDT를 추가하셔서 해도 상관없어요~ ^^ 전 NetBeans를 선호합니다. 좋아요!

DB입니다.
DROP TABLE IF EXISTS `sosi`.`sosi`;
CREATE TABLE `sosi`.`sosi` (
`idx` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sosiname` varchar(45) NOT NULL,
`height` int(10) unsigned NOT NULL,
`blood` varchar(45) NOT NULL,
PRIMARY KEY (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `sosi` (`idx`,`sosiname`,`height`,`blood`) VALUES
(1,'윤아',166,'B'),
(2,'수영',170,'O'),
(3,'효연',160,'AB'),
(4,'유리',167,'AB'),
(5,'태연',162,'O'),
(6,'제시카',163,'B'),
(7,'티파니',162,'O'),
(8,'써니',158,'B'),
(9,'서현',168,'A');

우선 Flex Project를 만듭니다.
여기서 Application server type을 php로 하세요~ php로 하게 되면 설정된 폴더로 swf를 바로 위치시킬 수 있어요!
Project name은 ZendAmfTest -> Web root는 아파치가 돌아가는 폴더를 지정하면 됩니다.
저는 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs여기군요.
Root URL은 http://localhost/ Finish때려주면 ZendAmfTest-debug폴더에 swf가 생기죠.

요 아래 주소에서 ZendAMF를 받을 수 있습니다.
http://framework.zend.com/download/amf
받은 다음에 압축을 풀면 library폴더 안에 Zend라는 폴더가 있는데 통채로 복사해서 src폴더 아래에 놓습니다.

그리고 php파일을 하나 만드세요. ValueObject입니다. Java에서 bean같은..-_-;
SosiVo.php
<?php
class SosiVo {
public $idx;
public $sosiname;
public $height;
public $blood;
}
?>

이제 서비스를 하나 만들어봅시다. SosiService입니다.
SosiService.php
<?php
require_once 'SosiVo.php';

//conection info
define("DATABASE_SERVER", "localhost");
define("DATABASE_USERNAME", "root");
define("DATABASE_PASSWORD", "mudchobo");
define("DATABASE_NAME", "sosi");

class SosiService {
public function getData() {
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME,
DATABASE_PASSWORD);
mysql_select_db(DATABASE_NAME);
$query = "SELECT idx, sosiname, height, blood FROM sosi";
$result = mysql_query($query);

$ret = array();
while ($row = mysql_fetch_object($result)) {
$tmp = new SosiVo();
$tmp->idx = $row->idx;
$tmp->sosiname = $row->sosiname;
$tmp->height = $row->height;
$tmp->blood = $row->blood;
$ret[] = $tmp;
}
mysql_free_result($result);
return $ret;
}
}
?>

php의 array는 ActionScript3의 array와 호환됩니다.
서비스를 만들었으니 EndPoint페이지를 만들어줘야합니다.
amf.php
<?php
require_once 'Zend/Amf/Server.php';
require_once 'SosiService.php';

$server = new Zend_Amf_Server();
$server->setClass("SosiService");
$server->setClassMap("SosiVo", "SosiVo");
echo($server -> handle());
?>

이제 이것을 연결시켜줄 service-config.xml파일을 만들어야합니다.
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="amfphp-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<default-channels>
<channel ref="my-zend"/>
</default-channels>
<destination id="zend">
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-zend"
class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost/ZendAmfTest-debug/amf.php"
class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>

우선 default로 my-zend라는 채널을 잡았는데, my-zend는 endpoint uri가 ~~/amf.php입니다. 우리가 좀전에 작성했던 endpoint죠. 새로운 서비스가 추가되어 새로운 endpoint를 작성하게 될 때 endpoint파일을 amf1.php라고 했을 때 이곳에 추가해서 channel에 기입할 수도 있고, <mx:RemoteObject>에서 endpoint를 해당 uri로 바꿔주는 방법 2가지가 있습니다.

그럼 이제 Flex쪽으로 넘어가봅시다.
ZendAmfTest.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="creationCompleteHandler()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;

private function creationCompleteHandler():void
{
roSosi.getData();
}

private function faultHandler(event:FaultEvent):void
{
Alert.show(event.message.toString());
}

private function resultGetDataHandler(event:ResultEvent):void
{
dgSosi.dataProvider = event.result as Array;
}
]]>
</mx:Script>

<mx:RemoteObject id="roSosi" fault="faultHandler(event)" destination="zend" source="SosiService">
<mx:method name="getData" result="resultGetDataHandler(event)" />
</mx:RemoteObject>

<mx:DataGrid id="dgSosi" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="아이디" dataField="idx"/>
<mx:DataGridColumn headerText="소녀시대이름" dataField="sosiname"/>
<mx:DataGridColumn headerText="신장" dataField="height" />
<mx:DataGridColumn headerText="혈액형" dataField="blood" />
</mx:columns>
</mx:DataGrid>

</mx:Application>

만약 다른 서비스를 추가하게 된다면, <mx:RemoteObject>에서 endpoint를 다른 url로 잡아주면 됩니다.
<mx:RemoteObject id="roAnother" fault="faultHandler(event)" 
destination="zend" source="AnothorService"
endpoint="http://localhost/ZendAmfTest-debug/another_amf.php">

아님 service-config.xml에서 channel을 다르게 해서 destination을 다르게 설정해도 되구요.
사용자 삽입 이미지

ps1. 다른 예제에서는 2개의 service를 이용한 예제가 없더라구요. 그래서 사실 저렇게 하는 게 맞는지 잘 모르겠습니다. 다른 방법이 있을 수도 있구요^^ 암튼, 제가 삽질한 바로는 서비스당 1개의 php파일을 만들어야 하더라구요.

ps2. PHP를 시작한지 얼마 안되었는데, DB연동 시 한글이 깨지더라구요. 인코딩을 my.ini과 php.ini에 utf-8로 맞췄는데, ???로 인식해서 나오는 경우가 있더라구요. php파일에서 db정보를 출력하니 이상하게 그냥 로컬에서 쳤을 때에는 utf-8로 나오는데, php파일이 출력한 db정보는 latin으로 나올 때가 있더라구요. 이 경우 my.ini파일에 이 부분을 추가해주면 됩니다.
[mysqld] 아래에
character-set-client-handshake = FALSE
client 인코딩으로 강제 셋팅하는거라고 하더라구요. 저는 처음에 ??? 뜨길래 이걸로 해결봤습니다-_-;
아 또 다른 방법으로 쿼리날리기 전에 set names 'utf8'이라고 먼저 날려줘도 됩니다.
mysql_query("SET NAMES 'utf8'");

ps3. 이런...생각해보니 client에서 VO를 안만들어줬군요-_-;

참고자료
http://corlan.org/2008/11/13/flex-and-php-remoting-with-zend-amf/

덧. 채널 못찾는 에러는 아래 주너니님의 댓글을 참조하세요~ 컴파일옵션을 추가해야합니다^^
주너니님 감사합니다 ^^
머드초보 이 작성.

당신의 의견을 작성해 주세요.

  1. Comment RSS : http://mudchobo.tomeii.com/tt/rss/comment/398
  2. 지돌스타 2009/03/27 09:42  편집/삭제  댓글 작성  댓글 주소

    매우 유용하군요. PHP에서도 AMFPHP는 AMF0만 지원했던걸로 알고 있는데 AMF3까지 지원한다고 하니... 매우 좋은걸요. 개인적으로 php로 할 프로젝트가 있었는데 적절한 시기에 소개해주셔서 참 감사합니다. 이걸 사용해야겠네요.

    • 머드초보 2009/03/28 09:55  편집/삭제  댓글 주소

      앗 지돌스타님^^
      저도 php를 배운지 얼마 안되었는데, 데이터연동부분에 관한 자료를 찾다보니 Zend Amf가 있더라구요^^ 방문해주셔서 감사해요~^^

  3. 주너니 2009/03/29 21:07  편집/삭제  댓글 작성  댓글 주소

    안녕하세요. 좋은정보 감사합니다.
    내용중에 약간 잘못된게 있는것 같아서 저도 꽤 삽질했네요 ^^;;

    amf.php
    <?php
    require_once 'Zend/Amf/Server.php';
    require_once 'SosiService.php';

    $server = new Zend_Amf_Server();
    $server->setClass("SosiService";);
    $server->setClassMap("SosiVo", "SosiVo";);
    ?>
    마지막에 echo($server -> handle()); 가 빠진것 같네요.
    그리고 $mysql_query("SET NAMES 'utf8'";); -> mysql_query("SET NAMES 'utf8'";);
    이렇게 되야될거 같고요~

    마지막으로 channel 을 못찾는 에러가 나시는 분들은
    해당 프로젝트 Properties -> Flex Compiler -> Additional compiler arguments 에
    -services "D:\work\test\service-config.xml"
    식으로 service-config.xml 이 있는 절대경로값을 추가해주셔야 합니다.

    그럼 좋은정보 감사합니다. 수고하세요~

    • 머드초보 2009/03/30 09:46  편집/삭제  댓글 주소

      헉 그렇네요 ㅠ
      저도 삽질하면서 글을 그냥 기록한거라 ㅠㅠ
      컴파일 옵션 추가도 제가 뺐군요 ㅠ
      감사합니다 ^^

  4. 햇무리 2009/06/19 09:48  편집/삭제  댓글 작성  댓글 주소

    좋은 글 정말 잘 봤습니다.
    AMFPHP가 느리다고 해서 망설이고 있었는데 좋은 게 있었네요.
    그런데 zendamf를 http://framework.zend.com/download/amf 에서 받아서 하니까 Minimal이고
    Zend폴더 밑에 Loader 폴더가 없어서 에러가 나더라구요.
    그래서 http://framework.zend.com/download/current/ 에서 Full로 받아서 해보니 되네요.
    물론 3월에 해보신거라 그때는 잘 되었을지도 모르겠네요.
    앞으로 해보시는 분들은 참고하세요.
    감사합니다.

    (그런데 한글깨지는거
    character-set-client-handshake = FALSE 로 하면 된다고 하셨는데 어떻게 하는지 잘 모르겠어요... ㅠㅠ
    mysql_query("SET NAMES 'utf8'";); 를 쓰는 것보다는 이게 더 좋을 것 같은데요.)

    • 머드초보 2009/06/19 14:09  편집/삭제  댓글 주소

      아....그거 mysql옵션 수정하셔야합니다.
      mysql.ini파일인가-_- 설정파일이 있는데, 그걸 수정해서 mysql다시 리셋해주면 돼요 ^^
      방문해주셔서 감사해요~ ^^좋은 정보도 감사해요!

  5. 햇무리 2009/06/21 11:17  편집/삭제  댓글 작성  댓글 주소

    오... 잘 되네요... 감사합니다.
    그런데 또 안되는 것이 있네요... ㅠㅠ
    서비스 여러개 넣는거 해보는데 잘 안되요.
    위에 말씀하신 두가지를 다 해보고 있는데 워낙 zend에 대한 지식도 없고 하니 잘 안되네요.
    service-config.xml와 flex쪽에서 어떻게 바꾸면 될까요?
    -----
    몇시간 후...
    저도 삽질끝에 성공을 했어요... ^^
    이젠 저장하는 것을 해봐야 겠어요. 감사합니다.

    • 머드초보 2009/06/21 23:38  편집/삭제  댓글 주소

      와 축하드립니다^^
      저도 이거 삽질했던 때가 생각나는군요.
      저도 조만간 이것을 쓰게 될 듯-_- 뭔가 개발해야하는데 서버가 php거든요^^

  6. 햇무리 2009/09/08 21:23  편집/삭제  댓글 작성  댓글 주소

    netbeans을 사용하신다고 했는데요.
    zend amf와 사용할때 php debug를 netbeans으로 어떻게 하나요?
    해보려고 하는데 잘 안되서요.
    php 코드쪽 문제 발생할 경우가 많은데 디버깅 없이는 코딩이 어려울 것 같아요.
    부탁드립니다. ^^

    • 머드초보 2009/09/09 17:41  편집/삭제  댓글 주소

      디버깅을 하시려면 XDEBUG라는 디버거를 설치해야합니다.
      검색 하시면 셋팅하는 것이 다 나올꺼에요 ^^
      xdebug입니다!

  7. 햇무리 2009/09/09 22:30  편집/삭제  댓글 작성  댓글 주소

    감사합니다. xdebug라는 것이 있었네요.
    방금 php만 테스트 해봤는데 잘되네요.
    이젠 flex와도 되는지 봐야겠네요. ^^

    • 머드초보 2009/09/10 17:12  편집/삭제  댓글 주소

      아네 이클립스에서도 php랑 다 할 수 있는데, ide가 전 따로 있는 게 더 편하더라구요. 그래서 서버는 넷빈즈, 클라이언트는 flex를 ^^
      그럼 둘다 디버깅을 편하게 할 수 있어요^^
      방문해주셔서 감사해요~

  8. 붉은고래 2009/10/06 11:58  편집/삭제  댓글 작성  댓글 주소

    좋은 정보 감사합니다..^^
    댓글 정보도 너무 유용하네요...
    오류가나서 이것저것 해보다가 댓글에서 해답들을 찾았네요..감사 감사 ^^

    • 머드초보 2009/10/11 11:14  편집/삭제  댓글 주소

      아네 도움이 되셔서 다행이네요^^
      제가 몇개 좀 빠뜨린게 있었는데, 댓글에 누군가가 올려주셨어요 ㅠㅠ

  9. naiyumie 2010/02/01 10:20  편집/삭제  댓글 작성  댓글 주소

    따라해봤습니다. 감사합니다~~^^

[로그인][오픈아이디란?]
« Prev : 1 : 2 : 3 : 4 : 5 : Next »