2010-04-22 3 views
3

Google 웹 툴킷을 java 및 google 데이터 스토어와 함께 데이터베이스로 사용하고 있습니다. 엔티티 클래스는 ArrayList를하고 난 예외를 받고 있어요 데이터베이스에서 데이터를 검색하려는에 있습니다Google 데이터 스토어에서 검색시 ArrayList 예외 발생 (gwt, java 사용)

유형을 'org.datanucleus.sco.backed.ArrayList'유형 세트에 포함되지 않았습니다 이 SerializationPolicy 또는 그 Class 객체에 의해 직렬화 가능한 것은, 가로드되지 않을 가능성이 있습니다. 보안을 위해이 유형은 직렬화되지 않습니다.

저는 JPA를 사용하고 있습니다.

엔티티 코드 : DB 클래스의

package com.ver2.DY.client; 

import java.io.Serializable; 
import java.util.ArrayList; 

import javax.jdo.annotations.IdGeneratorStrategy; 
import javax.jdo.annotations.PersistenceCapable; 
import javax.jdo.annotations.Persistent; 
import javax.jdo.annotations.PrimaryKey; 

import com.google.gwt.user.client.rpc.IsSerializable; 

@PersistenceCapable 
public class ChatInfo implements Serializable, IsSerializable{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long topicId; 

    @Persistent 
    private String chatTopic; 

    @Persistent 
    private ArrayList<String> messages = new ArrayList<String>(); 

    @Persistent 
    private boolean isFirstPost; 

    public ChatInfo() 
    { 

    } 


    public Long getTopicId() {  
    return topicId; 
    } 
    public void setTopicId(Long topicId) { 
    this.topicId = topicId; 
    } 
    public String getChatTopic() { 
    return chatTopic; 
    } 
    public void setChatTopic(String chatTopic) { 
    this.chatTopic = chatTopic; 
    } 
    public ArrayList<String> getMessages() { 
    return messages; 
    } 
    public void addMessage(String newMsg) { 
    messages.add(newMsg); 
    } 

    public boolean isFirstPost() { 
    return isFirstPost; 
    } 
    public void setFirstPost(boolean isFirstPost) { 
    this.isFirstPost = isFirstPost; 
    } 

} 

방법 : 이전에 내가 삽입하고 데이터를 검색 할 수 있었지만 지금 예외를 발생하기 때문에

@Transactional 
    public ChatInfo[] getAllChat() { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    List<ChatInfo> chats = null; 
    ChatInfo[] infos = null; 
    String query = "select from " + ChatInfo.class.getName(); 
    try{ 
    chats = (List<ChatInfo>) pm.newQuery(query).execute(); 


    infos = new ChatInfo[chats.size()]; 
    for(int i=0;i<chats.size();i++) 
    { 
    infos[i] = new ChatInfo(); 
    infos[i] = (ChatInfo) chats.get(i); 
    } 
    } 
    finally{ 
    pm.close(); 
    } 
    return infos; 

    } 

그것은 조금 이상하다. 웹 검색에서 Arraylist를 일부 DataNucleus 유형에서 java util로 변환해야하지만 알 수는 없습니다.

+1

누군가이 질문을 편집하여 코드를 코드 구성에 넣으시겠습니까? – Syntax

답변

2

예외는 클래스가 GWT RPC 허용 목록 (직렬화 가능한 클래스 목록)에 없기 때문에 발생합니다.

주어진 예제 코드에서 org.datanucleas.sco.backed.ArrayList를 가져올 수 없습니다.

GWT 및 JPA에 대한 자세한 내용은 this question을 확인하십시오.

1

이 문제는 here이고 그 중 일부는 ofbugs입니다. 본질적으로 java.util.ArrayList를 다시 얻지 못하는 데이터 저장소에서 가져올 때 대신 org.datanucleus.sco.backed.ArrayList가 생성됩니다. 놀랍지 않게도이 유형을 직렬화 할 수 없을 때 RPC를 호출 할 때까지 모든 것이 잘된 것처럼 보입니다.

해키 수정은 개체를 검색 한 후 해당 개체를 사용하는 RPC를 호출하기 전에 ArrayList를 올바른 형식으로 변환하는 것처럼 보입니다. 적어도 버그가 수정 될 때까지.

관련 문제