0

play-mongojack 예제에서 하나의 스칼라 클래스가 있습니다. 그것은 잘 작동합니다. 그러나 Play ehcache에 저장하려고하면 NotSerializableException이 발생합니다. 어떻게이 클래스를 직렬화 가능하게 할 수 있습니까?Play 2.2 캐시 용 직렬화 가능 스칼라 클래스

class BlogPost(@ObjectId @Id val id: String, 
      @BeanProperty @JsonProperty("date") val date: Date, 
      @BeanProperty @JsonProperty("title") val title: String, 
      @BeanProperty @JsonProperty("author") val author: String, 
      @BeanProperty @JsonProperty("content") val content: String) { 
       @ObjectId @Id @BeanProperty var blogId: String = _ 
       @BeanProperty @JsonProperty("uploadedFile") var uploadedFile: Option[(String, String, Long)] = None 
} 

object BlogPost { 
    def apply(
     date: Date, 
     title: String, 
     author: String, 
     content: String): BlogPost = new BlogPost(date,title,author,content) 

    def unapply(e: Event) = 
     new Some((e.messageId, 
      e.date, 
      e.title, 
      e.author, 
      e.content, 
      e.blogId, 
      e.uploadedFile)) 

    private lazy val db = MongoDB.collection("blogposts", classOf[BlogPost], classOf[String]) 

    def save(blogPost: BlogPost) { db.save(blogPost) } 
    def findByAuthor(author: String) = db.find().is("author", author).asScala 
} 

캐시에 저장 :

var latestBlogs = List[BlogPost]() 
Cache.set("latestBlogs", latestBlogs, 30) 

그것은 예외가 발생합니다 :

[error] n.s.e.s.d.DiskStorageFactory - Disk Write of latestBlogs failed: 
java.io.NotSerializableException: BlogPost 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) ~[na:1.7.0_45] 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) ~[na:1.7.0_45] 
    at java.util.ArrayList.writeObject(ArrayList.java:742) ~[na:1.7.0_45] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_45] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_45] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_45] 

편집 1 : 내가하려 연장 직렬화와 객체가 작동하지 않습니다.

편집 2 : vitalii의 의견은 저에게 효과적입니다.

class BlogPost() extends scala.Serializable {} 
+1

: '클래스의 블로그 게시물 (...)를 시도하십시오는 Serializable {...' – vitalii

+0

BTW, 블로그 게시물이 클래스 블로그 게시물의 인스턴스를 직렬화 직렬화 할 필요는 없습니다 반대 – vitalii

답변

1

봅니다 Serializable에서 클래스 BlogPost을 유도하거나 기본적으로 직렬화 한 경우 클래스로 정의합니다. 여기 내 댓글을 복제

+0

I가 시도를 확장 Serializable로 객체를 확장하면 작동하지 않습니다. 방금 질문을 업데이트했습니다. – angelokh

+0

사례 클래스를 사용할 수 없습니다. 그것은 나에게 오류를 준다. 이미 정의 된 적용 및 적용 취소 기능 때문이라고 생각합니다. – angelokh

+1

개체가 아닙니다. Serializable에서 클래스를 확장해야합니다. – vitalii