views:

96

answers:

2

Hi everyone i was working with memcache, and when i compiled this code i got following errors.

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

I managed to fix it with converting User class toString but ı dont want to use toString method.I just want to use my class to add and get mwethods. How can i fix this problem? Here is the code i am using.

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();
    }
}
}

Sorry , i forgot the User class, I am also giving you the User class to help me better.

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();
    }


    }
A: 

Updated due to question modification.

So, your User class must implements the Serializable. Hopefully, this is as simple as writing

 public class User implements Serializable {
 ...
 }

as Serializable does not contains any method.

Riduidel
Sorry for missin class.I added the User class as you said.
mehmetozer
A: 

Memcache doesn't know how to serialize your objects. You'll need to implement Serializable to have Java handle the serialization, or Externalizable if you need more control over the (de)serialization process.

Niels van der Rest
What do i have to implement in serializable method exactly ?
mehmetozer
You need to implement the `Serializable` interface: `public class User implements Serializable { }`. The interface is just a marker that tells the serialization mechanism that the `User` class can be serialized. The actual serialization is done automatically, so you don't have to implement any methods.
Niels van der Rest