GAE / JDO 에서 Object Manager has been closed 에러 발생시 우회법. 

GAE  / JDO 사용중 객체에 List 를 포함할때 아래 에러 발생시 우회법

발생에러

The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
Object Manager has been closed
org.datanucleus.exceptions.NucleusUserException: Object Manager has been closed
	at org.datanucleus.ObjectManagerImpl.assertIsOpen(ObjectManagerImpl.java:3876)
	at org.datanucleus.ObjectManagerImpl.getFetchPlan(ObjectManagerImpl.java:376)

에러 우회 방법
PersistenceManager(pm)이 닫지 않은 상태에서 아래 코드를 실행하여 다른 객체에 데이터를 이동시킴.

EgunUserAsset asset = pm.detachCopy((EgunUserAsset) foundAsset);

실행후 pm.close()를 실행한다.

jquerymobile에서 URL 변경시 전체페이지를 다시 로드하는 속성 

이해하기 어려운 제목이다.

JqueryMobile로 개발시… 이런 문제가 있었다.

테이블 목록을 스크립트로 그리고.. 목록내에 A 링크를 이용하여 타 화면으로 이동할 때.. URL에 AJax 해쉬 마크가 추가 된 채로 화면이 로딩 되어. $(document).ready 가 실행되지 않을때….

이 문제를 해결하려면 전체페이지를 다시 로드하는 방법으로 해결할 수 있다. 스크립트로 생성하는 A 링크에data-ajax=”false” 속성을 추가하여 사용하면 된다. 예제는 아래와 같다.

<a href=”otherSite.html” data-ajax=”false”>다른화면으로</a>

A 태그에서 href와 자바스크립트 사용하기 

지향
<a href=”http://targeturl.html” onclick=”gopage(); return false;”>가자</a>
<a href=”javascript:;” onclick=”gopage()”>가자</a>
지양
<a href=”javascript:gopage()”>가자</a> : 자바스크립트 종속적이지 않음. href를 사용한 의미에 알맞지 않음.
<a href=”#” onclick=”gopage()”>가자</a> : 클릭시 화면의 처음으로 이동함.
<a href=”javascript:void(0)” onclick=”gopage()”>가자</a> : 파폭에선 에러.. 날껄?

크롬에서 user agent 바꾸기 

크롬에서 user agent를 바꾸려면 바로가기에서 대상에 -user-agent=”애이전트명” 을 추가한다.

사용 예)

“C:\Documents and Settings\Standard\Local Settings\Application Data\Google\Chrome\Application\chrome.exe” -user-agent=”iPad”

참고 링크 :

이클립스에 maven-gae-plugin 셋팅하기 

maven-gae-plugin 을 이용한 개발 환경 셋팅을 해보자.

환경은 다음과 같다.
eclipse 3.6(http://eclipse.org)
me2eclipse(http://m2eclipse.sonatype.org/)

목차
1. maven settings.xml 수정
2. maven-gae 프로젝트 생성
3. 배포/확인

시작
1. settings.xml(메이븐 셋팅 파일)을 다음과 같이 설정한다.

<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/xsd/settings-1.0.0.xsd">


  <localRepository>E:\egun-money\dev\repo</localRepository>

  <servers>
                <!-- 구글 App Engine 서버 id 및 계정 설정 -->
    <server>
      <id>appengine.google.com</id>
      <username></username><!-- 구글 App Engine 계정 id ex ) egunmoney@gmail.com -->
      <password></password><!-- -계정 비밀번호 -->
    </server>
  </servers>

  <profiles>
    <profile>
      <id>dev</id>
      <repositories>
                                <repository>
          <id>maven-gae-plugin-repo</id>
          <name>maven-gae-plugin repository</name>
          <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>maven-gae-plugin-repo</id>
          <name>maven-gae-plugin repository</name>
          <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>dev</activeProfile>
  </activeProfiles>
</settings>

2. 프로젝트 생성

2.1 새로운 Maven 프로젝트를 생성한다.


2.2 Add Architype 버튼을 눌러 새로운 Architype을 추가한다. (한번만 하면 됨)

2.3 maven-gae-plugin 에서 제공하는 Architype을 추가한다. (maven-gae-plugin은 3가지 형태의 아키타입을 지원한다. 일반적인 jsp형태, gwt형태, Wicket형태가 그것인데 아래 화면은 일반적인 jsp 형태를 추가하는 모습이다.)

  • repository URL : http://maven-gae-plugin.googlecode.com/svn/repository

2.4 앞절(2.3)에서 등록한 architype을 선택한다 .(화면은 jsp형태를 선택)

2.5 생성할 프로젝트의 속성을 입력한다. 일반 maven 프로젝트와 달리 화면에 보이는 속성 모두를 입력한다. 속성 설명을 다음과 같다.

  • gaePluginVersion은 maven-gae-plugin의 버전을 칭한다.
  • gaeApplicationName은 구글 app engine에 생성한 애플리케이션 명을 칭한다.
  • gaeApplicationVertion은 구글 app engine에 생성한 애플리케이션 버전을 칭한다.
  • name은 프로젝트 명으로 pom.xml에 추가한다.(add 버튼으로 추가해야 함)
  • description은 프로젝트 설명을 pom.xml에 추가한다.(add 버튼으로 추가해야 함)

위의 속성중 name, description이 없으면 올바른 프로젝트가 생성되지 않는다.

2.6 프로젝트가 생성되면 자동으로 만들어주는 JDO 관련 소스를 모두 지우고 index.html 을 수정하여 HelloWorld를 출력하도록 한다.

2.7 마지막으로, pom.xml에서 maven-gae-plugin 부분을 다음과 같이 수정한다.

<plugin>
  <groupId>net.kindleit</groupId>
  <artifactId>maven-gae-plugin</artifactId>
  <version>0.6.0</version>
  <configuration>
    <serverId>appengine.google.com</serverId>
  </configuration>
</plugin>

2.8 컴파일 에러등의 빌드 오류 요소들이 모두 제거 되었으면 gae:deploy 명령어를 이용해 배포한다.
브라우저를 이용해 원하는 화면(여기서는 Hello World!)가 출력되면 ok.

참고

<%@page isELIgnored=”false” %> 사용하지 않고 EL 사용하기 

JSP 페이지를 작성할때, EL(Expression Language)을 많이 사용한다. 간간히 처음 JSP를 만들고 EL를 적용했을때 화면에 원하는 EL의 정보가 출력되지 않은 경우가 있었는데, 그때마다 JSP 페이지 제일 위에 요걸(<%@page isELIgnored=”false” %>) 넣어 주었다. 하지만, 모든 페이지에 적용하다보니 석연치 않은 부분이 있었는데, 검색해보니 해답이 있긴 하더라.

web.xml파일에서 <web-app 부분을 아래와 같이 수정한다. (2.5버전으로)

<web-app
 xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 id="WebApp_ID" version="2.5">
 <!-- something to do -->
</web-app>

아래의 문서를 보니 j2ee5, j2ee6에서 사용하는 web descriptions version이 다른것을 확인수 있는데, 이것이 문제였던 것 아닐까 한다.

참고 : Java EE : XML Schemas for Java EE Deployment Descriptors (http://java.sun.com/xml/ns/javaee/)

좋아했던 음악들 

가끔 연예인 소식이나 그들의 음악을 듣고 싶을때 들르는 파플즈(http://poplez.net)에 들른다. 오늘은 대학교 1학년때 친구가 들려줬던 스키드 로우 노래를 다시 듣게 되었는데.. 즐거웟던 옛 생각이 떠오르더라..

잠시 추억속에 들어가 보자…

Skid row – I Remember You

다음은, 군대 복학후 줄기차게 들었던 타투 노래.

타투 – Ya Soshia S”Uma(All the Things She Said…)

이건 요즘도 가끔 듣고 싶은 음악.

알렉스 – 화분

마지막으로 타루-여기서끝내자.

타루 – 여기서 끝내자

올리다 보니 슬픈 노래만 올렸네… 뭐 가끔은 감성적일 필요도 있으니까..