본문 바로가기

Development

[Play Framework2] JPA & Json model Java는 POJO 객체로 JPA와 Json이 아주 자유로웠지만 Scala에서는 정말 헤매는 부분이 많았다. 그리고 본인이 가장 간편하다고 생각하는 방법을 설명하겠다. 특별히 Play Framework2 이외에 다른 라이브러리를 사용하지 않고 내부적인 라이브러리를 통해 쉬운 방법을 찾았다. (one to many 와 many to many 는 아직 방법을 찾지 못함..) import play.db.jpa._import javax.persistence._import play.api.libs.json._import play.api.libs.functional.syntax._import scala.annotation.meta.field @Entity@Table (name = "class")case class .. 더보기
[Play Framework2] Json Java에서는 Pojo 객체를 그대로 Json으로 출력하기 쉬웠지만... Scala에서는 그게 힘든것 같다 아무래도.. Java의 Reflection과 같은 기능이 없어서 그런 것 같다. 그래서 가장 간단하게 Json으로 출력하는 방법을 찾아봤다. @Entity@Table (name = "child")class Child { @Id @GeneratedValue var id : Long =_ @Column(name = "name") var name : String = _} object Child { implicit val childWriters = new Writes[Child] { def writes (child : Child) = Json.obj( "no" -> child.id, "name" -> ch.. 더보기
[Play Framework2] JPA Play Framework2 Scala 에서도 JPA를 지원한다. 설치부터 사용방법 까지 간단하게 설명하자면..(참고 URL =https://www.playframework.com/documentation/2.4.0/JavaJPA) 우선은 라이브러리를 설치한다.libraryDependencies ++= Seq( javaJpa, "org.hibernate" % "hibernate-entitymanager" % "4.3.9.Final" // replace by your jpa implementation ) 그리고 persistence.xml 파일은 생성하고 conf/MATA-INF 폴더에 넣자 없다면 생성해서 넣어두자그리고 파일내용은 아래와 같이 작성한다. org.hibernate.jpa.HibernateP.. 더보기
[Play Framework2] WebSockets Play에서는 Actor 이용한 방법과 iteratees를 이용하는 방법이 있다. Actor은 Akka에서 제공해주는 방식이고 iteratees는 Play에서 제공해주는 것 같다. 참고 사이트 : https://www.playframework.com/documentation/2.3.x/ScalaWebSockets import akka.actor._ object MyWebSocketActor { def props(out: ActorRef) = Props(new MyWebSocketActor(out)) } class MyWebSocketActor(out: ActorRef) extends Actor { def receive = { case msg: String => out ! ("I received your .. 더보기
[Play Framework2] Comet sockets Comet response 란 text/html 로 이루어지고 태그에 감싸여진 응답을 말한다고 한다.... 본인은 처음 알았음..그래서 이걸 쉽게 쓸 수 있는 방법을 소개한다. 참고 사이트 : https://www.playframework.com/documentation/2.3.x/ScalaComet def comet = Action { val events = Enumerator( """""", """""", """""" ) Ok.chunked(events).as(HTML) }위의 코드를 웹 브라우저에서 실행결과로 받아보면 콘솔창에 kiki, foo, bar가 출력되어지는 걸 확인 할 수 있다.이걸 이제 간편화 하는 단계를 살펴보자 import play.twirl.api.Html // Transform .. 더보기
[Play Framework2] Streaming HTTP responses Streaming 기능에 대해서 실제로 구현해서 만들어 본 적이 없는데 이번에 PlayFramework에서 아주 간단하게 제공하는 방법이 있다. 참고 사이트 : https://www.playframework.com/documentation/2.3.x/ScalaStream def index = Action { val file = new java.io.File("/tmp/fileToServe.pdf") val fileContent: Enumerator[Array[Byte]] = Enumerator.fromFile(file) Result( header = ResponseHeader(200), body = fileContent ) }위의 코드로 간단한 스트리밍 기능? 이 구현이 완료가 되었고 혹시나 Enumer.. 더보기
[Play Framework2] Action composition PlayFramework에서는 Action이 뭔가 Restful 통신을 할때 반응하는 객체로 쓰여진다... 이번에는 이 Action을 활용하는 방법을 알아보자 자세한 사항은 : https://www.playframework.com/documentation/2.3.x/ScalaActionsComposition object LoggingAction extends ActionBuilder[Request] { def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = { Logger.info("Calling action") block(request) } }위와 같이LoggingAction을 만들고def index = Loggi.. 더보기
[Play Framework2] Session and Flash scopes PlayFramework에서 Session은 내부적으로 Cookie 로 사용되어지고 그래서4kb라는 제약있다.자세한 사항은 https://www.playframework.com/documentation/2.3.x/ScalaSessionFlash Ok("Welcome!").withSession( "connected" -> "user@gmail.com")위와 같이 key값으로 저장을 하고Ok("Hello World!").withSession( request.session + ("saidHello" -> "yes"))+ 통해서 session에 값을 저장하는 것이 가능하다.Ok("Theme reset!").withSession( request.session - "theme")- 도 가능하다. def index .. 더보기
[Play Framework2] Setting and discarding cookies Cookie를 사용하는 방법이다. (https://www.playframework.com/documentation/2.3.x/ScalaResults) val result = Ok("Hello world").withCookies( Cookie("theme", "blue"))Setval result2 = result.discardingCookies(DiscardingCookie("theme"))Discardingval result3 = result.withCookies(Cookie("theme", "blue")).discardingCookies(DiscardingCookie("skin"))Set & Discarding def home(name:String) = Action {request=> val prev.. 더보기
[Play Framework2] Http Routing 프로젝트 파일에서 Conf 폴더에 routes 라는 파일이 있다. 이 파일에서 모든 url을 관리하는 듯하다. (#은 주석이다.)GET /clients/all controllers.Clients.list()GET /clients/:id controllers.Clients.show(id: Long)GET /files/*name controllers.Application.download(name)(*id 표현은 GET /files/images/logo.png 와 같이 파일형식의 파라미터를 받을수있다.) GET /items/$id controllers.Items.show(id: Long)($id 로 정규화 표현을 받을 수 있다.) # Extract the page parameter from the path, .. 더보기