SpringFramework가 되는지 삽질하던 중 데모에 있는 샘플을 하나잡아서 convert를 시켰습니다-_-
놀랍게도 잘 되네요. 하는 도중 약간의 혈압이 상승했지만요-_-

우선 샘플주소입니다.
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/NamingException
App 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

 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 이학도 2009.05.22 10:24  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사.^^

  2. BlogIcon 이학도 2009.05.22 12:07  댓글주소  수정/삭제  댓글쓰기

    svn repo는 www.assembla.com에서 돈주고 호스팅 받았어요?

    • 머드초보 2009.05.23 23:52  댓글주소  수정/삭제

      저기assembla는 svn이랑 trac같은 개발환경을 제공하는데요.
      public공간으로 만들면 무료이고, private공간을 만들면 돈들어가요.
      다 오픈하면 무료에요 ^^

  3. realmove 2010.12.27 16:07  댓글주소  수정/삭제  댓글쓰기

    jdk 설정하라는 말이 무슨 말인지 몰랐는데, 덕분에 해결했네요.
    감사합니다.

  4. 설거지의달인 2011.01.14 10:14  댓글주소  수정/삭제  댓글쓰기

    앱엔진 호스팅을 받아서 스프링을 돌려보려는 사람입니다;
    디플로이 중에 다음과 같은 에러가;;
    403 Forbidden
    You do not have permission to modify this app
    이건 어떻게 해결하면 좋을까요;;

  5. 자바개발자 2011.07.29 15:36  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다.

 
구글 앱 엔진이 자바를 지원하기 시작했습니다.
전 세계적으로 가장 인기있는(?) 언어인 자바를 지원하다니 대단합니다-_-(사실...파이썬 보다 자바나 PHP를 먼저 지원했어야 했을 것 같은데-_- 그때 얘기를 들어보니 앱엔진 담당하는 사람이 파이썬 전문가라는 얘기를 들은 것 같군요-_-)

거기에 더 대단한 것은 파이썬 같은 경우에는 툴 같은 것이 없었는데, 이번엔 이클립스를 이용한 툴까지 제공해줍니다. 구글플러그인인데요. App Engine JAVA SDK랑 덤으로 Web Toolkit SDK까지 깔아주는군요. 게다가 구글 앱엔진에 쉽게 배포까지 할 수 있습니다.

이클립스 설치주소 : http://dl.google.com/eclipse/plugin/3.4 (3.3버전은 뒤에 3.3-_-)
참조문서 : http://code.google.com/intl/ko-KR/appengine/docs/java/tools/eclipse.html

설치를 하게 되면 File -> New -> Other에 보시면 Google이라는 폴더에 Web Application Project라는 프로젝트가 있습니다. 이걸 선택하게 되면 아래와 같은 화면이 나옵니다.
사용자 삽입 이미지
Web Toolkit은 체크를 안해도 됩니다.

프로젝트가 완성이 되면 익숙한(?) 폴더구조를 볼 수 있습니다. src는 java소스부분이 들어가는 곳이고, war부분은 WebContent부분이군요. 안에 더욱 익숙한 WEB-INF도 있어요-_- 라이브러리 마구 처박아도 되나-_- web.xml도 있군요.

자 그럼, 손쉬운 배포를 해봅시다. 갓난애기도 할 수 있는 앱엔진 배포!(과연..-_-)
war -> WEB-INF폴더에 appengine-web.xml파일을 엽니다.
[code]<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>mudchobo</application>
    <version>1</version>
   
    <!-- Configure java.util.logging -->
    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
   
</appengine-web-app>[/code]
<application>부분에 자신이 애플리케이션 생성 시 입력한 Application Identifier를 입력합니다.

그리고, 프로젝트에 대고, 마우스오른쪽 버튼을 누르면 Google이라는 메뉴가 있습니다.
Deploy to App Enigne이라는 메뉴를 선택합니다.
사용자 삽입 이미지
자신의 App Engine계정을 입력하면 바로 배포할 수 있습니다.

http://mudchobo.appspot.com/ 여기에 배포가 되었습니다.

Spring 등의 라이브러리도 다 되는거겠죠?-_- 이번 연휴에 삽질을 해봐야겠습니다.

PS. 혹시나 파일의 용량제한이 있나테스트해봤더니 10메가 이상파일은 안올라가네요.
Unable to upload app: Found a file too large to upload: "C:\Users\mudchobo\AppData\Local\Temp\appcfg3803788145857696233.tmp\Aptana Studio.zip".  Must be under 10000000 bytes.
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 지돌스타 2009.04.28 15:53  댓글주소  수정/삭제  댓글쓰기

    이런게 있는지 처음 알았군요.
    구글의 리소스를 내가 직접 사용하는 것 같은 애플리케이션을 만들 수 있다는것에 꽤 흥미를 느끼게 되는군요. 내용 잘 봤습니다.

    • 머드초보 2009.04.30 09:55  댓글주소  수정/삭제

      전에 구글코리아에서 설명을 들었을 때
      구글에서 사용하는 서비스와 동일한 것이라고 하더군요.
      구글은 언제나 개발자를 놀래키죠-_-

  2. BlogIcon 김석영 2009.05.07 23:28  댓글주소  수정/삭제  댓글쓰기

    그냥 고마울 따름이네요...

    • 머드초보 2009.05.11 00:46  댓글주소  수정/삭제

      "구글 앱 엔진 한국 개발자 토론 그룹"에서 본 것 같은데 반갑습니다^^

 
오픈아이디에서 제공하는 추가정보(이메일, 닉네임, 생일 등)를 얻어오려면 Simple Registration Extension를 이용해서 가져와야합니다. (OpenID4java에 들어있는 Servlet예제를 보면 Attribute Exchange로 하는데, 이걸로 하면 안되더군요-_-; 그래서 Outsider님의 블로그의 글을 참조를 했습니다.
http://blog.outsider.ne.kr/170

만약 myid.net에 한글 닉네임이 있는 경우에는 가져올 때 URL을 통해서 가져오는데요.
URL이 UTF-8로 되어있고, encodeURI해서 오는데, 이것을 제대로 decode를 못해줘서 인증에 실패를 하더군요.

가져올 때
[code]ParameterList response = new ParameterList(httpReq.getParameterMap());[/code]
이렇게 해서 가져오면 한글인 경우 문제가 발생합니다.
Verification failed for: null reason: null 이런 에러를 발생하는데, 디버깅할 때 parameterList에 있는 한글로 받아야하는 닉네임이 있다면 깨져서 나올겁니다.
그래서 제가 임의로 url을 URIDecoder로 decode를 해서 nickname을 한글로 바꿨더니 인증이 되더군요.
다른 방법을 찾다가 MyID담당자님께 물어봤더니 아래와 같은 방법을 가르쳐주셨습니다 ^^

아래와 같이 파라메터를 얻어오면 됩니다.
[code]ParameterList paramList = ParameterList.createFromQueryString(request.getQueryString());[/code]
이렇게 하니까 되더군요.

알려주신 MyID의 수호이님 감사합니다 ^^

 
Posted by 머드초보

댓글을 달아 주세요

 
열이 아빠님의 글을 보고 http://koko8829.tistory.com/575 삽질을 시작했습니다.
사실 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
[code]<?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>
[/code]
설정파일을 작성하기 전에 초간단 스프링 빈을 하나 만들어봅시다.
service패키지를 하나 만들고, HelloService라는 클래스를 만듭시다.
[code]package service;

public class HelloService {
    public String sayHello(String name) {
        return name + "! 메리추석!";
    }
}
[/code]
이제 /WebContent/WEB-INF/applicationContext.xml파일을 생성합니다.
applicationContext.xml
[code]<?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>
[/code]
기존 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에 추가해야할 부분이 있습니다.
[code]<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>
[/code]
아....중요합니다. default-channels를 추가해야합니다!

이제 클라이언트로 가봅시다.
SpringBlazeDS.xml
[code]<?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>
[/code]
RemoteObject로 sayHello함수를 input에 입력해서 결과를 Label에 쓰는 간단한 프로그램입니다.
서버를 실행시키고 실행해봅시다.
사용자 삽입 이미지
로그도 자세히 남는군요.
2008. 12. 27 오전 2:31:42 org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter handle
정보: Channel endpoint my-amf received request.

젠장......어느카테고리에 넣어야 하지-_-; Spring에 넣자-_-;
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 열이아빠 2008.12.27 10:20  댓글주소  수정/삭제  댓글쓰기

    저는 이제 막 스프링 공부를 다시 시작하고 있습니다.
    아무래도 무개념 상태라..ㅠㅠ
    내년 정식 릴리즈 전에는 좀 준비를 해야 할텐데요.
    카테고리는 'Spring/Flex' 를 따로 만드셔도 좋지 않을까요.^^

    • 머드초보 2008.12.28 11:15  댓글주소  수정/삭제

      저도 스프링 공부를 안한지오래돼서 ㅠ
      간만에 스프링프레임워크 홈페이지에 가니 많이 바뀌었더라구요^^
      이것저것 제품도 많이 나왔구요. 저도 공부를 다시 해봐야겠습니다 ㅠ

  2. 용용 2009.01.09 10:18  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다. ^^

    • 머드초보 2009.01.09 23:24  댓글주소  수정/삭제

      아넵! 방문해주셔서 감사합니다 ^^
      즐거운 프로그래밍 되세요~ ^^

  3. 아이 2009.01.09 23:30  댓글주소  수정/삭제  댓글쓰기

    대박인데! 이런게 조금만 더 빨리 나왔더라면~!ㅠㅠ
    트랜젝션이랑 라우팅소스 적용할려면 별의별 삽질한걸 생각하면...ㅠㅠ

    • 머드초보 2009.01.14 17:23  댓글주소  수정/삭제

      오..그런건가...-_-;
      이거 아직 정식버전 나오려면 아직 멀은 듯-_-;

  4. 2009.01.19 19:02  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 머드초보 2009.01.20 00:40  댓글주소  수정/삭제

      destination은 지정합니다.
      <mx:RemoteObject id="srv" destination="hello" />
      이 destination명은 FlexRemotingServiceExporter의 명과 같아야합니다

  5. 2009.01.20 10:43  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 머드초보 2009.01.22 00:29  댓글주소  수정/삭제

      음.....뭔가 잘못된 것도 없어보이는데....
      service-config에 이부분도 추가했나요?
      <default-channels>
      <channel ref="my-amf"/>
      </default-channels>
      전 이것때문에 몇시간 날린 적이 있습니다만-_-;
      정 안되시면 mudchobo@nate.com으로 문의주세요.

  6. BlogIcon 이버리 2009.01.29 09:58  댓글주소  수정/삭제  댓글쓰기

    안녕하세요^^ 어제 메일보냈던 사람입니다..
    답장 잘받았습니다.. 감사합니다..

    프로젝트 생성시 WEB으로 선택하고 하니 잘되네요
    감사합니다.

  7. 2009.01.30 09:11  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 머드초보 2009.01.30 15:59  댓글주소  수정/삭제

      아....혹시...언제보내신건가요?ㅠ
      윗분 메일은 온 것 같은데...죄송합니다.
      여기서 써주세요 ^^

  8. 23456 2009.03.19 15:59  댓글주소  수정/삭제  댓글쓰기

    12345

  9. 도니도니 2009.04.20 14:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ LCDS로도 해보셨는지 궁금하네요.
    BlaseDS를 사용했을 시에는 잘 작동하는데 LCDS로는 안되네요.
    버전은 2.5, 2.6 두개 테스트 해보았습니다.
    먼가 설정을 잘못 한것인지 원래 LCDS는 안되는것인지 ..값비싼 LCDS를 지원한해줄리가..-_ -

    • 머드초보 2009.04.23 23:49  댓글주소  수정/삭제

      LCDS는 제가 안해봤네요.
      음 LCDS는 안되는군요-_-
      왜 안되는지 모르겠네요 ㅠ 분명 일부기능을 오픈소스한걸로 알고있는데 ㅠ

  10. jsP 2010.06.21 11:20  댓글주소  수정/삭제  댓글쓰기

    머드초보님 안녕하세요. 해당 글 따라해보다가, 플렉스프로젝트 만드는 부분에서요. runtime서버 지정해주는 부분과 war파일 지정해주는 부분이 어디에 있나 해서요;; 저 플렉스빌더3 쓰는데 그런 부분은 안보이는데요 ㅠㅠ 혹시 이클립스 프로젝트에서 war파일 import해서 만드는 건가요?? 참고로 전 플렉스빌더와 이클립스가 따로따로 설치되어 있습니다.

    • 머드초보 2010.06.26 15:25  댓글주소  수정/삭제

      안녕하세요~ 따로 사용하신 다면 이클립스에서 war를 import하는 게 맞습니다.
      그리고, 이클립스에서 톰캣돌려놓고, 빌더에서는 이걸 요청하는 걸 코딩해야합니다. ^^

 

[NetBeans] 넷빈즈를 이용한 Hibernate 초간단 예제1 - Hibernate 셋팅

에 이어서-_-;

이제 셋팅은 다 된 것 같으니, 이 데이터를 가져와봅시다.
Hibernate에서 쉽게 데이터를 가져올 수 있도록 Helper클래스를 만들어봅시다.

Ctrl + N -> Java -> Java Class -> Class Name은 ScoreHelper, Package는 wondergirlshibernate로 합니다.

ScoreHelper.java
[code]package wondergirlshibernate;

import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import wondergirlshibernate.entity.Score;
import wondergirlshibernate.util.HibernateUtil;

public class ScoreHelper {
Session session = null;

    public ScoreHelper() {
        this.session = HibernateUtil.getSessionFactory().openSession();
    }

    public List<Score> getWondergirlsScore() {
        List<Score> wondergirlsScoreList = null;

        try {
            Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Score");
            wondergirlsScoreList = (List<Score>) q.list();
        } catch (HibernateException e) {
            e.printStackTrace();
        }
        return wondergirlsScoreList;
    }
}
[/code]
getWondergirlsScore를 보면 from Score를 실행하는 것이 다 입니다. 그리고, 그 리스트를 받아오는 거죠.

Main클래스를 봅시다.
Main.java
[code]package wondergirlshibernate;

import java.util.List;
import wondergirlshibernate.entity.Score;

public class Main {

    public static void main(String[] args) {
        ScoreHelper helper = new ScoreHelper();

        List list = helper.getWondergirlsScore();

        System.out.println(
                String.format("%10s %10s %10s %10s", "이름", "나이", "국어", "수학"));
        for (int i = 0; i < list.size(); i++) {
            Score score = (Score) list.get(i);

            System.out.println(
                String.format("%10s %10s %10d %10d",
                    score.getWondergirls().getName(),
                    score.getWondergirls().getAge(),
                    score.getKorean(),
                    score.getMath())
            );
        }
    }
}
[/code]
그냥 출력합니다-_-; 결과는 이렇게 나올 겁니다.
[code]Hibernate: select score0_.idx as idx1_, score0_.widx as widx1_, score0_.korean as korean1_, score0_.math as math1_ from wondergirls.score score0_
        이름         나이         국어         수학
Hibernate: select wondergirl0_.idx as idx0_0_, wondergirl0_.name as name0_0_, wondergirl0_.age as age0_0_ from wondergirls.wondergirls wondergirl0_ where wondergirl0_.idx=?
        선예         20        100        100
Hibernate: select wondergirl0_.idx as idx0_0_, wondergirl0_.name as name0_0_, wondergirl0_.age as age0_0_ from wondergirls.wondergirls wondergirl0_ where wondergirl0_.idx=?
        선미         20         90         90
Hibernate: select wondergirl0_.idx as idx0_0_, wondergirl0_.name as name0_0_, wondergirl0_.age as age0_0_ from wondergirls.wondergirls wondergirl0_ where wondergirl0_.idx=?
        소희         17         80         80
Hibernate: select wondergirl0_.idx as idx0_0_, wondergirl0_.name as name0_0_, wondergirl0_.age as age0_0_ from wondergirls.wondergirls wondergirl0_ where wondergirl0_.idx=?
        예은         17         70         70
Hibernate: select wondergirl0_.idx as idx0_0_, wondergirl0_.name as name0_0_, wondergirl0_.age as age0_0_ from wondergirls.wondergirls wondergirl0_ where wondergirl0_.idx=?
        유빈         21         60         60
BUILD SUCCESSFUL (total time: 3 seconds)
[/code]
음... 저기서 wondergirls참조하는 것을 가져오려고 하면 다시 쿼리를 날리는 군요-_-; 뭔가 다른 방법이 있는 건가...
Hibernate를 더 공부해봐야겠습니다. 넷빈즈에서 쉽게 Hibernate를 할 수 있네요. 예전에 Hibernate Hello World예제를 따라해보고 셋팅에 겁을 먹은 기억이 있었는데, 쉽게 할 수 있네요.
이제 공부를 해봅시다 ㅠㅠ

 
Posted by 머드초보

댓글을 달아 주세요