- notice 스킨변경~
[스프링(Spring)]검색결과, 23건
- [Spring/Flex] Spring BlazeDS Integration AppEngine위에서 간단히 구동 후기 2009/09/28 (4)
- [Google App Engine JAVA] Spring MVC를 이용한 방명록 예제(기존예제 변환-_-) 2009/05/02 (4)
- [NetBeans6.5] Spring + Hibernate(스프링 + 하이버네이트) 연동하기2 - 사용해보기 2009/02/26
- [NetBeans6.5] Spring + Hibernate(스프링 + 하이버네이트) 연동하기1 - 설정 2009/02/26
- [Spring/Flex] Spring BlazeDS Integration 1.0.0.M1 삽질 후기-_-; 2008/12/27 (20)
[Spring/Flex] Spring BlazeDS Integration AppEngine위에서 간단히 구동 후기
Posted in 스프링(Spring) // Posted at 2009/09/28 01:26이번 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


스크린샷.....
참고사이트
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
-
빠방
좋은 예제 감사드립니다 (꾸벅)
덕분에 spring blazeds intergration 1.0.1과 ibatis 연동에 성공했습니다.
이전에 올려주신 연동예제와 새로 릴리즈된 1.0.1 예제가 아니었으면 짧은 영어실력때문에 도저히 알아먹지 못해고 포기해버렸을꺼에요 ㅠㅠ -
-
-
[Google App Engine JAVA] Spring MVC를 이용한 방명록 예제(기존예제 변환-_-)
Posted in 스프링(Spring) // Posted at 2009/05/02 00:15놀랍게도 잘 되네요. 하는 도중 약간의 혈압이 상승했지만요-_-
우선 샘플주소입니다.
http://springguestbook.appspot.com
소스코드 주소입니다. trunk/SpringGuestBook입니다^^
http://my-svn.assembla.com/svn/mudchobosample
마치...그냥 앱엔진에서 제공하는 샘플이랑 같아보여서 사기를 치는 것 같지만, Model2방식의 예제입니다ㅠ
우선 하면서 가장 처음에 겪는 문제점입니다.
Your Web Application Project must be configured to use a JDK in order to use JSPs.
JSP를 쓰려면 jdk를 설정해야한다는 뜻인데요. 보통 JDK를 깔고, 이클립스를 실행하면 디폴트로 JRE가 잡혀있어요. 이걸 JDK로 추가해서 바꿔주시면 돼요.
이클립스에서 Window -> Preferences -> Java -> Installed JREs선택.
Add -> Standard VM -> JRE home에서 Directory선택해서 JDK주소를 찾으세요.
디폴트로 설치하셨다면 C:\Program Files\Java\jdk1.6.0_12 여기에 있을겁니다.
폴더만 선택하고, Finsh를 누르면 추가가 되었습니다. 체크박스를 jdk로 옮겨주세요. 그러면 저 위에 에러 안날꺼에요.
그다음으로 겪는 문제점은....-_- 앱엔진에서 지원안하는 클래스를 쓰는 곳이 있는 것 같아요.
spring mvc를 사용하려면 spring.jar하고 spring-webmvc.jar 두개만 있으면 되는데요. 이거 두개 lib폴더에 넣어놓고 서버에 디플로이 시키면
exception is java.lang.NoClassDefFoundError: javax/naming/NamingExceptionApp engine로그를 볼 수 있는데, 거기서 로그를 보면 클래스를 찾을 수 없다고 나와요. spring-orm.jar에서 쓰는 것 같더라구요. 어차피 구글앱엔진은 jdo만 지원해서 jdo only라이브러리가 있습니다-_- 그걸로 바꿔주시면 돼요.
전 라이브러리복사할 때
spring-beans.jar, spring-context-support.jar, spring-context.jar, spring-core.jar, spring-jdbc.jar, spring-orm-jdo-only-2.5.6.jar, spring-test.jar, spring-tx.jar, spring-web.jar, spring-webmvc.jar를 복사했네요.
여기서 spring-orm-jdo-only-2.5.6.jar는 저도 어디서 받은거라.....-_-
그러고 디플로이하면 잘 됩니다.
또 한가지 문제점은 eclipse에서 제공하는 dynamic web project에서는 WEB-INF/lib에 library파일을 복사하면 자동으로 클래스를 코드힌트로 쓸 수 있는데, 이놈은 코드힌트를 할 수 없어요-_- 그래서 수동으로 추가를 해줘야해요.
프로젝트 이름에 Properties를 선택하고, Java Build Path에서 Add JARs에서 추가한 spring파일 등을 선택해서 추가해줘야 에러가 안나네요^^(이건 뭐 다른 방법이 있을 지도.....-_-저에게 최선의 방법이였다는 ㅠ)
또 JDO라는 걸 전혀 몰라서 조금 고생했는데, Hibernate같은 orm이더군요. 사실 아직도 잘 모르겠습니다. 좀 더 알아봐야할 것 같네요. orm하면 Hibernate랑 JPA밖에 없는 줄 알았는데, 뭐 디게 많네요ㅠ
또.....-_- localhost에서 Datastore테스트를 하면 war/WEB-INF/appengine-generated라는 폴더가 생겨요. 디비가 저장되는 것 같은데, 저게 있는 상태에서 디플로이하면 안돼요. 지우고 하면 됩니다.
또 이런저런 문제가 있었는데, 기억이 안나네요. 그래도 정말 대단한 것 같습니다. 대세는 클라우드-_-
참고자료
http://peterbacklund.blogspot.com/2009/04/running-spring-on-google-app-engine.html
http://groups.google.com/group/google-appengine-java/browse_thread/thread/f1a541fe52e172dd
-
-
-
-
머드초보
저기assembla는 svn이랑 trac같은 개발환경을 제공하는데요.
public공간으로 만들면 무료이고, private공간을 만들면 돈들어가요.
다 오픈하면 무료에요 ^^
-
[NetBeans6.5] Spring + Hibernate(스프링 + 하이버네이트) 연동하기2 - 사용해보기
Posted in 스프링(Spring) // Posted at 2009/02/26 23:55New -> Other -> Hibernate -> Hibernate Mapping Files and POJOs from Database선택 -> File Name은 디폴트 ->
Avaliable Tables에서 sosi테이블 add -> JDK 5 Language Features체크, package는 sm.sosi.sosiage.map입력 후 Finish. 여기서 이상한게 매핑파일을 만들었는데, 패키지가 보이지 않습니다. 처음부터 생성되지 않은 패키지를 선택해서 그런 것 같은데, 넷빈즈 껐다 키면 보입니다-_-;(버그인 듯-_-)
이제 Dao를 하나 만들어봅시다.
sm.sosi.sosiage.dao패키지에 AgeDao클래스를 만들어봅시다. 이 클래스에 메소드는 나이를 알려주는 메소드 1개-_-; 이 클래스는 HibernateDaoSupport를 상속받습니다.
AgeDao.java
public class AgeDao extends HibernateDaoSupport {
public int searchAge(String name) {
List<Sosi> sosi = getHibernateTemplate().find("from Sosi where name = ?", name);
if (sosi.size() > 0) {
return sosi.get(0).getAge();
} else {
return 0;
}
}
}코드는 간단합니다. 제가 아직 하이버네이트를 공부중이라 저거 하나만 객체로 받아오는 걸 못하겠는데요-_-; List로 받아와서 그냥 첫번째꺼 가져오도록 했습니다-_-;
sm.sosi.sosiage.service패키지에 AgeService를 만들어봅시다.
AgeService.java
public class AgeService {
private AgeDao ageDao;
public void setAgeDao(AgeDao ageDao) {
this.ageDao = ageDao;
}
public String searchAge(String name) {
int age = ageDao.searchAge(name);
String message;
if (age == 0) {
message = name + "은/는 소녀시대의 멤버가 아닙니다.";
} else {
message = name + "의 나이는 " + age + "세입니다.";
}
return message;
}
}간단하게 메세지를 만들어서 리턴해주는 서비스입니다.
심플컨트롤러를 생성해봅시다. New -> Other -> Srpingframework -> Simple Form Controller선택 -> Class Name은 AgeController, package는 sm.sosi.sosiage.controller -> Finish.
AgeController.java
public class AgeController extends SimpleFormController {
private AgeService ageService;
public void setAgeService(AgeService ageService) {
this.ageService = ageService;
}
public AgeController() {
setCommandClass(Sosi.class);
setCommandName("sosiAge");
setSuccessView("successView");
setFormView("formView");
}
/*
@Override
protected void doSubmitAction(Object command) throws Exception {
throw new UnsupportedOperationException("Not yet implemented");
}
*/
//Use onSubmit instead of doSubmitAction
//when you need access to the Request, Response, or BindException objects
@Override
protected ModelAndView onSubmit(
HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors) throws Exception {
Sosi sosi = (Sosi)command;
ModelAndView mv = new ModelAndView(getSuccessView());
mv.addObject("message", ageService.searchAge(sosi.getName()));
return mv;
}
}이제 formView와 successView만 작성하면 끝이네요.
Web Pages -> WEB-INF ->jsp에서 New -> JSP -> JSP File Name은 formView -> Finish.
formView.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>소녀시대 짱-_-;</title>
</head>
<body>
<form:form commandName="sosiAge" method="post" action="age.htm">
소녀시대 멤버이름을 입력하세요:
<form:input path="name" />
<input type="submit" value="검색">
</form:form>
</body>
</html>또다른 View파일 JSP File Name은 successView -> Finish.
successView.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>소녀시대 나이 결과</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>이제 dispatcher-servlet.xml에 bean을 등록해봅시다.
dispatcher-servlet.xml
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index.htm">indexController</prop>
<prop key="age.htm">ageiController</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<!-- dao -->
<bean name="ageDao"
class="sm.sosi.sosiage.dao.AgeDao"
p:sessionFactory-ref="sessionFactory" />
<!-- service -->
<bean name="ageService"
class="sm.sosi.sosiage.service.AgeService"
p:ageDao-ref="ageDao"/>
<!-- controller -->
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
<bean name="ageController"
class="sm.sosi.sosiage.controller.AgeController"
p:ageService-ref="ageService" />실행해보면
정보: Hibernate: select sosi0_.idx as idx0_, sosi0_.name as name0_, sosi0_.age as age0_ from hibernate.sosi sosi0_ where sosi0_.name=?
이런 쿼리가 날아가네요.


PS. 보니까 Hibernate도 애노테이션으로 할 수 있는 듯 한데, 그것도 좀 해봐야겠네요. 다시 하이버네이트 책을 좀 읽어봐야겠어요-_-;
[NetBeans6.5] Spring + Hibernate(스프링 + 하이버네이트) 연동하기1 - 설정
Posted in 스프링(Spring) // Posted at 2009/02/26 23:38환경 : GlassFishV3 + SpringFramework 2.5 + Hibernate 3.2.5 + MySQL5.0 + Netbeans6.5
접근성을 높이기 위해(?) 소녀시대를 예제로 작성해봅시다. 멤버이름을 입력하면 멤버의 나이를 알려주는 웹애플리케이션을 만들어봅시다-_-;
Database
CREATE TABLE `sosi` (
`idx` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`age` int(10) unsigned NOT NULL,
PRIMARY KEY (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT INTO `sosi` (`idx`,`name`,`age`) VALUES
(1,'윤아',20),
(2,'수영',20),
(3,'효연',21),
(4,'유리',21),
(5,'태연',21),
(6,'제시카',21),
(7,'티파니',21),
(8,'써니',21),
(9,'서현',19);
New Project -> Java Web -> Web Application -> Project Name : SosiAge -> Glass Fish V3으로 하구요 -> Spring Web MVC 2.5랑 Hibernate 3.2.5체크합니다.
Hibernate에서 DB를 설정해야하는데, New Database Connection해서 Name을 MySQL로 맞추고, 설정에 맞게 입력한 뒤, 추가한 것으로 선택한 뒤 Finish를 누른 뒤 완료합니다.
한글문제로 인한 web.xml파일에 아래 코드를 추가합니다.
web.xml
<filter>
<filter-name>Request Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Request Encoding</filter-name>
<servlet-name>dispatcher</servlet-name>
</filter-mapping>hibernate를 사용하기 위한 필수작업인 session bean을 생성해야합니다.
applicationContext.xml
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>설정을 여기에 다 적고, datasource를 session에 di를 해도 상관없고, hibernate.cfg.xml파일에 설정해도 다 되더군요. 우선 기본적으로 hibernate.cfg.xml파일을 직접 만들어주니 configLocation설정해서 해봅시다.
하이버네이트 설정파일에서 SQL문을 직접볼 수 있는 옵션을 추가합시다.
Source Packages -> default package -> hibernate.cfg.xml파일을 열어봅니다.
design모드에서 Configuration Properties에서 add한 뒤, hibernate.show_sql값 true로 추가합니다. 쿼리를 직접보도록...-_-;
이제 뭐 셋팅이 끝났네요. 셋팅 끝나면 뭐 그냥 쓰기만 하면 됩니다-_-;
다음 장에서......
[Spring/Flex] Spring BlazeDS Integration 1.0.0.M1 삽질 후기-_-;
Posted in 스프링(Spring) // Posted at 2008/12/27 02:39사실 Spring Bean을 BlazeDS에서 사용하는 것은 이미 다른 사람들이 많이 만들었죠^^ 근데 스프링소스에서 공식적으로 지원을 해주다니 대단합니다^^ 제가 한번 해봤습니다-_-; 스프링과 BlazeDS의 기본만 알고 있어서 하는데에는 무리가 없었습니다-_-;
환경 : JDK 6 U 10 + Tomcat 6.0.18 + BlazeDS 3.2.0.3978 + Spring BlazeDS Integration 1.0.0.M1 + Flex SDK 3.2 + Flex Builder 3.0.2 + SpringFramework 2.5.6
SpringFramework 2.5.6 Download
BlazeDS 3.2.3978 Download
Spring BlazeDS Integration Download
쉬운 개발환경을 위해 플렉스빌더에서.....
New Flex Project -> Project name은 SpringBlazeDS, Web application을 선택하고, Application server type은 J2EE로 합니다 ^^ Next를 하시면 Target runtime은 Tomcat 6.0, Flex WAR파일은 BlazeDS를 다운로드해서 blazeds.war파일을 선택합니다. Finish를 때려줍니다-_-;
프로젝트의 Properties에서 Flex Server에 보면 Context root부분이 /WebContent로 되어있는데, /SpringBlazeDS로 바꿔줍니다.
라이브러리는 Spring에서 spring.jar, spring-webmvc.jar, Spring BlazeDS Integration에서 org.springframework.flex-1.0.0.M1.jar를 WEB-INF/lib폴더에 복사하면 됩니다.
자바쪽 셋팅을 해봅시다.
Webcontent/WEB-INF/web.xml파일을 열어서 수정합니다.
기존에는 MessageBrokerServlet을 사용해서 하는데, Spring BlazeDS Integration에서는 Spring Servlet을 사용합니다. MessageBroker Servlet을 servlet-mapping과 함께 지워주고, Spring Servlet을 선언합니다.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SpringBlazeDS</display-name>
<context-param>
<param-name>flex.class.path</param-name>
<param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>
</context-param>
<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<!-- Spring Dispatcher Servlet -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
설정파일을 작성하기 전에 초간단 스프링 빈을 하나 만들어봅시다.
service패키지를 하나 만들고, HelloService라는 클래스를 만듭시다.
package service;
public class HelloService {
public String sayHello(String name) {
return name + "! 메리추석!";
}
}
이제 /WebContent/WEB-INF/applicationContext.xml파일을 생성합니다.
applicationContext.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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="mySpringManagedMessageBroker"
class="org.springframework.flex.messaging.MessageBrokerFactoryBean" />
<!-- Maps request paths at /messagebroker to the BlazeDS MessageBroker -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
p:mappings="/*=mySpringManagedMessageBroker" />
<!-- Dispatches requests mapped to a MessageBroker -->
<bean class="org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter"/>
<bean id="helloService" class="service.HelloService" />
<bean id="hello"
class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter"
p:messageBroker-ref="mySpringManagedMessageBroker"
p:service-ref="helloService"/>
</beans>
기존 MessageBroker가 Spring에 의해 관리된 MesssageBroker로 들어있는 것 같습니다. 그래서 Remote요청이 들어오면 Spring MessageBroker가 해당 destination을 찾아서 해주는 것 같습니다. 그리고, Spring Bean인 helloService를 불러오는 방법은 FlexRemotingServiceExporter를 이용해서 하는 것 같습니다. 요청하고 싶은 Bean을 FlexRemotingServiceExporter에 DI를 해서 사용하는 것이군요.
이곳에서 FlexRemotingServiceExporter의 id가 destination입니다^^ 저기서 hello로 정의했으니 Flex에서는 destination을 hello로 맞춰주면 되겠죠? ^^
나중에 destination을 추가하는 것은 service-config.xml에서 하는 것이 아니라 이곳에서 해야겠죠.
제가 잘못 이해하고 있는 것이 좀 많은 것 같아서...원문을 참조하세요~ ^^
이제 service-config.xml에 추가해야할 부분이 있습니다.
<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>
아....중요합니다. default-channels를 추가해야합니다!
이제 클라이언트로 가봅시다.
SpringBlazeDS.xml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:RemoteObject id="srv" destination="hello" />
<mx:TextInput id="inputName" />
<mx:Button label="전송" id="btnConfirm" click="srv.sayHello(inputName.text)" />
<mx:Label id="labelResult" text="{srv.sayHello.lastResult}" />
</mx:Application>
RemoteObject로 sayHello함수를 input에 입력해서 결과를 Label에 쓰는 간단한 프로그램입니다.
서버를 실행시키고 실행해봅시다.

2008. 12. 27 오전 2:31:42 org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter handle
정보: Channel endpoint my-amf received request.
젠장......어느카테고리에 넣어야 하지-_-; Spring에 넣자-_-;
-
열이아빠
저는 이제 막 스프링 공부를 다시 시작하고 있습니다.
아무래도 무개념 상태라..ㅠㅠ
내년 정식 릴리즈 전에는 좀 준비를 해야 할텐데요.
카테고리는 'Spring/Flex' 를 따로 만드셔도 좋지 않을까요.^^-
머드초보
저도 스프링 공부를 안한지오래돼서 ㅠ
간만에 스프링프레임워크 홈페이지에 가니 많이 바뀌었더라구요^^
이것저것 제품도 많이 나왔구요. 저도 공부를 다시 해봐야겠습니다 ㅠ
-
-
-
-
아이
대박인데! 이런게 조금만 더 빨리 나왔더라면~!ㅠㅠ
트랜젝션이랑 라우팅소스 적용할려면 별의별 삽질한걸 생각하면...ㅠㅠ -
-
-
머드초보
destination은 지정합니다.
<mx:RemoteObject id="srv" destination="hello" />
이 destination명은 FlexRemotingServiceExporter의 명과 같아야합니다
-
-
-
머드초보
음.....뭔가 잘못된 것도 없어보이는데....
service-config에 이부분도 추가했나요?
<default-channels>
<channel ref="my-amf"/>
</default-channels>
전 이것때문에 몇시간 날린 적이 있습니다만-_-;
정 안되시면 mudchobo@nate.com으로 문의주세요.
-
-

이버리
안녕하세요^^ 어제 메일보냈던 사람입니다..
답장 잘받았습니다.. 감사합니다..
프로젝트 생성시 WEB으로 선택하고 하니 잘되네요
감사합니다. -
-
-
-
-
-
도니도니
안녕하세요~ LCDS로도 해보셨는지 궁금하네요.
BlaseDS를 사용했을 시에는 잘 작동하는데 LCDS로는 안되네요.
버전은 2.5, 2.6 두개 테스트 해보았습니다.
먼가 설정을 잘못 한것인지 원래 LCDS는 안되는것인지 ..값비싼 LCDS를 지원한해줄리가..-_ --
머드초보
LCDS는 제가 안해봤네요.
음 LCDS는 안되는군요-_-
왜 안되는지 모르겠네요 ㅠ 분명 일부기능을 오픈소스한걸로 알고있는데 ㅠ
-
-
jsP
머드초보님 안녕하세요. 해당 글 따라해보다가, 플렉스프로젝트 만드는 부분에서요. runtime서버 지정해주는 부분과 war파일 지정해주는 부분이 어디에 있나 해서요;; 저 플렉스빌더3 쓰는데 그런 부분은 안보이는데요 ㅠㅠ 혹시 이클립스 프로젝트에서 war파일 import해서 만드는 건가요?? 참고로 전 플렉스빌더와 이클립스가 따로따로 설치되어 있습니다.
-
머드초보
안녕하세요~ 따로 사용하신 다면 이클립스에서 war를 import하는 게 맞습니다.
그리고, 이클립스에서 톰캣돌려놓고, 빌더에서는 이걸 요청하는 걸 코딩해야합니다. ^^
-


flex-messaging-core-FIXED_1.jar