Non sérialisable objet d'erreur tout en travaillant sur Memcache
Salut tout le monde je travaillais avec memcache, et lorsque j'ai compilé ce code je l'ai eu suite à des erreurs.
2010-07-09 10:35:53.499 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2010-07-09 10:35:53.520 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@7fdcde
Exception in thread "main" java.lang.IllegalArgumentException: Non-serializable object
at net.spy.memcached.transcoders.BaseSerializingTranscoder.serialize(BaseSerializingTranscoder.java:86)
at net.spy.memcached.transcoders.SerializingTranscoder.encode(SerializingTranscoder.java:135)
at net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:301)
at net.spy.memcached.MemcachedClient.set(MemcachedClient.java:691)
at def.Tweet.main(Tweet.java:23)
Caused by: java.io.NotSerializableException: def.User
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1173)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)
at net.spy.memcached.transcoders.BaseSerializingTranscoder.serialize(BaseSerializingTranscoder.java:81)
... 4 more
J'ai réussi à la fixer avec de la conversion de l'Utilisateur de la classe toString mais je ne veux pas utiliser la méthode toString.Je veux juste utiliser ma classe pour ajouter et obtenir mwethods. Comment puis-je résoudre ce problème?
Voici le code que j'utilise.
package def;
import java.io.IOException;
import java.io.Serializable;
import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;
public class Tweet {
private static User user;
private static Message message;
private static Followers follower;
public static void main(String[] args) throws Exception {
try{
user = new User(1,"Mehmet Özer","asd","127.0.0.1","True","Onine");
//String deneme = user.toString();
MemcachedClient c=new MemcachedClient(new InetSocketAddress("localhost", 11211));
//Store a value (async) for one hour
c.set(user.userKey, 3600, user);
System.out.println(c.get(user.userKey));
}
catch(IOException ex) {
ex.printStackTrace();
}
}
}
Désolé , j'ai oublié l'Utilisateur de la classe, je suis aussi en vous donnant l'Utilisateur de la classe pour m'aider à mieux.
public class User {
public static String userKey = "UserDB";
public static int userID ;
public static String userName;
public static String password;
public static String ipAddress;
public static String isOnline;
public static String lastActive;
public User(int userID, String userName, String password, String ipAddress,String isOnline,String lastActive)
{
this.userID = userID;
this.userName = userName;
this.password = password;
this.ipAddress = ipAddress;
this.isOnline = isOnline;
this.lastActive = lastActive;
}
@Override
public String toString() {
System.out.println(this.userID);
System.out.println(this.userName);
System.out.println(this.password);
System.out.println(this.ipAddress);
System.out.println(this.isOnline);
System.out.println(this.lastActive);
return super.toString();
}
}
OriginalL'auteur mehmetozer | 2010-07-09
Vous devez vous connecter pour publier un commentaire.
Memcache ne sais pas comment sérialiser vos objets. Vous aurez besoin de mettre en œuvre
Serializable
Java gérer la sérialisation, ouExternalizable
si vous avez besoin de plus de contrôle sur la (dé)sérialisation processus.Vous avez besoin de mettre en œuvre la
Serializable
interface:public class User implements Serializable { }
. L'interface est tout simplement un marqueur qui indique le mécanisme de sérialisation que leUser
classe peut être sérialisé. Le réel, la sérialisation est fait automatiquement, donc vous n'avez pas à mettre en œuvre toutes les méthodes.En outre, la raison en appliquant les méthodes toString() a travaillé en premier lieu, parce que la Chaîne est Sérialisable, c'est à dire il peut être transformé en bytecode et de retour à nouveau.
vous devez modifier votre réponse (à partir de votre commentaire).
OriginalL'auteur Niels van der Rest
Mis à jour suite à la question de la modification.
Ainsi, l'Utilisateur de votre classe doit implémenter l' Serializable. Espérons-le, c'est aussi simple que l'écriture
comme Sérialisable ne contient pas de n'importe quelle méthode.
OriginalL'auteur Riduidel
Ce problème est venue parce que, JVM n'est pas en mesure d'objet sérialisé corrctly à cause d'un conflit dans le schéma. Dans mon cas, la version de Série ID de certaines classes sont définies 1L en tant que par défaut. Ces classes sont collectivement les uns les autres. Je assigner une unique valeur personnalisée. Mon Problème résolu.
OriginalL'auteur Rajeev Rathor