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 {}
: '클래스의 블로그 게시물 (...)를 시도하십시오는 Serializable {...' – vitalii
BTW, 블로그 게시물이 클래스 블로그 게시물의 인스턴스를 직렬화 직렬화 할 필요는 없습니다 반대 – vitalii