serialization - Hazelcast:可移植序列化是否需要在客户端和服务器之间共享对象?

标签 serialization client-server hazelcast

我遇到以下异常:

Could not find PortableFactory for factory-id: 1 com.hazelcast.nio.serialization.HazelcastSerializationException: Could not find PortableFactory for factory-id: 1

在客户端,我有以下代码:

public class ClientTest {

    public static void main(String[] args) {

        List<String> nodes = new ArrayList<String>();
        nodes.add("localhost:5701");

        ClientConfig clientConfig = new ClientConfig();
        ClientNetworkConfig networkConfig = new ClientNetworkConfig();
        networkConfig.setAddresses(nodes);
        clientConfig.setNetworkConfig(networkConfig);

        SerializationConfig serCong = clientConfig.getSerializationConfig();
        serCong.addPortableFactory(1, new UserFactoryImpl());
        serCong.setPortableVersion(1);

        HazelcastInstance hzClient1 = HazelcastClient.newHazelcastClient(clientConfig);

        IMap<String, User> map = hzClient1.getMap("user");
        System.out.println(map.size() + "hiten");
        User user1 = new User();
        user1.setFirstName("hiten");
        user1.setLastName("singh");
        map.put("1", user1);


        //hz1.getLifecycleService().terminate();
        System.out.println(map.size() + "after");

        User user2 = new User();
        user2.setFirstName("hiten1");
        user2.setLastName("singh1");
        map.put("2", user2);

        UserEntryProcessor entryProc = new UserEntryProcessor();
        User userRes = (User)map.executeOnKey("1", entryProc);
    }

    static class UserEntryProcessor implements EntryProcessor<String, User>, HazelcastInstanceAware {

        private transient HazelcastInstance hazelcastInstance;

        @Override
        public Object process(Entry<String, User> entry) {
            User user = entry.getValue();
            if(user != null) {
                System.out.println(user.getFirstName());
            }

            return user;
        }

        @Override
        public EntryBackupProcessor<String, User> getBackupProcessor() {
            return null;
        }

        @Override
        public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
            this.hazelcastInstance = hazelcastInstance;
        }

    }

    static class UserFactoryImpl implements PortableFactory{

        public final static int USER_PORTABLE_ID = 1;

        public final static int FACTORY_ID = 1;

        public Portable create(int classId) {
            switch (classId) {
                case USER_PORTABLE_ID:
                    return new User();
            }
            return null;
        }
    }

    static class User implements Portable {

        private String firstName;
        private String lastName;

        public String getLastName() {
            return lastName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        }

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        @Override
        public int getFactoryId() {
            return UserFactoryImpl.FACTORY_ID;
        }

        @Override
        public int getClassId() {
            return UserFactoryImpl.USER_PORTABLE_ID;
        }

        @Override
        public void writePortable(PortableWriter writer) throws IOException {
            writer.writeUTF("first_name", firstName);
            writer.writeUTF("last_name", lastName);
        }

        @Override
        public void readPortable(PortableReader reader) throws IOException {
            firstName = reader.readUTF("first_name");
            lastName = reader.readUTF("last_name");
        }
    }
}

最佳答案

是的,就像您确定工厂和类需要可用一样。目前没有内置解决方案可以不为比简单的获取/放置更复杂的用例共享类。我有 JSON 支持和一些其他 cooking 想法,但还没有真正完成。

关于serialization - Hazelcast:可移植序列化是否需要在客户端和服务器之间共享对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909787/

相关文章:

java.io.StreamCorruptedException : invalid type code: 4C - replicationstream tomcat

java - 如何使用 Spark 无法序列化的第 3 方库

android - 如何在游戏中设计一个用户到多个用户的应用消息服务

java - 一个Netty channel 可以添加多少数据

c++ - UDP async_receive 的 boost::asio 错误

java - 如何让 Hazelcast 客户端等待服务器启动?

php - 将html和css序列化,存入mysql

xml - 通过 PowerShell 写入和读取 XML 配置

java - 带 Spring 的 Hazelcast 配置

java - hibernate/JPA 中基于缓存和基于查询的分页的混合