카테고리 보관물: Java Play framework

Play framework 에서 Cookie 사용하기

이번에 Play framework 에서 사용자 인증을 처리하는데 Cookie 를 사용하기 위해 좀 찾아 보았다.
역시 Play framework! 쿠키 사용하는것이 완전 심플 했다.

이렇게 간단하게 사용이 가능하다.

Play 굿 +_+)=b

Play framework 에서 JVM 옵션 조정 하기

전에 포스팅 했던 JSrank 는 Play framework 를 사용하여 만들었는데
오픈 하면서 JVM 옵션을 조정할 일이 생겼다.

간단했다.

Linux 기준으로


shell >> JAVA_OPTS="-Xms512m -Xmx1g -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -Xloggc:gc.log -verbose:gc -XX:+PrintGCDateStamps -server"

하면 끝.

(혹시 모르니 shell 에서 echo $JAVA_OPTS 명령어로 설정값을 확인해 보는것이 좋다)

설정후

play 로 play framework 콘솔 진입후

start 80 (80 포트로 시작)

후에 ctrl + d 로 빠져 나오면 된다. (ctrl + c 하지 말자! 취소다)

ebean 에서 orm 테이블 조인

아놔….

Play framework 를 사용하여 웹어플리케이션을 만들고 있는데
일단 Play framework 는 h2 database engine 이 embedded 되어 있어서 편리하게 사용할수 있고 해당 db 는
ebean 을 사용하여 orm 을 사용할수 있다.

난 사실 orm 보다 sqlmap 을 더 선호하지만 한번 사용해 봤다.

생각보다 ebean 은 사용하기 편했고 별다른 문제가 없었지만 서로 다른 테이블 join 시에 문제가 발생했다.
ebean 의 메뉴얼을 보고 해도 안되는 것이었다… ㅜㅜ 즉


SELECT a.data1, b.data2 FROM A as a INNER JOIN B as b a.id = b.id WHERE ...

이런 쿼리를 짜고 싶다고 가정하면

Entity 2 개를 정의하고 (Ebean 에서 Entity 즉 우리가 일반적으로 Java 프로그래밍에서 말하는 Model)

A Entity


@Entity
@Table(name = "a")
public class A extends Model {
...

@OneToMany(mappedBy = "bTest", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public ArrayList b = new ArrayList<>();
}

B Entity


@Entity
@Table(name = "b")
public class B extends Model {
...

@ManyToOne(fetch = FetchType.EAGER)
public A a;
}

이렇게 정의 해주고


Ebean.find(A.class)
.select("a.data1, b.data2")
.where()
...

해도 조인이 안걸린다.. 그냥 A 테이블만 select 될뿐…
이걸로 몇일동안 메뉴얼도 보고 이래저래 다 해봤는데 실패..

결국

RawSql rawSql = RawSqlBuilder.parse(sql).create();

를 사용하여 직접 SQL 문 작성하여 만들었음…

아 정말 왜 안되는걸까?…

언젠가 해결 되면 해당 포스트에 댓글로 달겠음… ㅜㅜ

[Play framework] Error getting sequence nextval 발생시…


play.api.Application$$anon$1: Execution exception[[PersistenceException: Error getting sequence nextval]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.0]
at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:132) [play_2.10.jar:2.1.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:128) [play_2.10.jar:2.1.0]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0]
javax.persistence.PersistenceException: Error getting sequence nextval

시퀀스 오류인데 정말 아무리 살펴봐도 잘못된 부분이 없었다….
테이블과 시퀀스를 지우고 다시 만들길 수차례…

점점 졸릴쯔음 기존것을 그냥 지운뒤에 시퀀스를 새로운 이름으로 다시 만들어 봤다…

script_result_queue_seq -> script_result_queue_new_seq

문제가 해결 되었다…. 이유가 뭘까? ㅜㅜ

Mac 에서 Play framwork 구동시 오류 “class file ‘/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jar(java/lang/reflect/AnnotatedElement.class)’ is broken”

Play Framework 를 우연한 기회에 접하게 되고 소개 영상을 보니 흥미로웠다.
이렇게 경량에 설치도 간편하고 마치 Python 의 Django 를 보는 느낌? 이라고 할까?

소개 영상을 보자

어떤가? 난 이 동영상을 보고 오호~ 좋아 보이는데?

체험 해볼겸 일단 기존 PHP 로 되어있는 개인 프로젝트를 Play framework 로 다시 개발 해보기로 했다. (계획중)

우선 Play framework 를 다운받고는 나의 맥북에 설치를 한뒤 play ~ 헉…. 오류나 나는군

주요 메시지는 class file ‘/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jar(java/lang/reflect/AnnotatedElement.class)’ is broken

Screen Shot 2014-07-08 at 11.23.38 AM

결론 부터 말하면 Java 1.8 때문이었다. 때문에 java 1.7 로 내린뒤 실행 하면 문제가 해결 된다.

하지만 Java 버전도 내려간다는거.. 그래서 Mac 에서 손쉽게 자바 버전을 오가는 스크립트를 하나 소개할까 한다.

자신의 .bashrc 나 .bash_profile 에 아래와 같이 삽입 한다.

그뒤 source 로 적용 시켜준뒤 프롬프트 창에서 간단히 함수만 호출해주면 된다.

Kyoungil-Lees-MacBook:~ kyoungil_lee$ change_jdk 1.8 <- java 1.8 로 변경하기

Kyoungil-Lees-MacBook:~ kyoungil_lee$ change_jdk 1.7 <- java 1.7 로 변경하기

java 1.7 로 변경후

Screen Shot 2014-07-08 at 11.44.07 AM

잘된다