Select Your Language

Infrastructure and Management

Cloud Computing

Storage

Runtimes

Integration and Automation

  • Comments
  • How to Register Marshaller and Schema for pojo containing LinkedHashMap<String,Object>

    Posted on

    Hello Team,

    I am using infinispan server 8.2.4.
    I need to store the data into RemoteCache where Employee class contains one instance variable i.e LinkedHashMap pair = new LinkedHashMap();
    I have created .proto file for the same and registered using ctx.registerProtoFiles().
    But I am facing difficulty while registering marshallers for linkedHashMap I can not use writer.writeCollection().
    How to register this marshaller containing LinkedHashMap ?

    1] createRemoteCacheManager :
    
        public RemoteCacheManager createRemoteCacheManager(String remoteAddress) throws TransportException{  
                RemoteCacheManager remoteCacheManager = null;  
                try {  
                    ConfigurationBuilder clientBuilder = new ConfigurationBuilder();  
                    Properties properties = getConfigurationProperties();  
                    properties.put("infinispan.client.hotrod.server_list", remoteAddress + ":11222");  
                    clientBuilder.connectionPool().withProperties(properties);  
                    clientBuilder.marshaller(new ProtoStreamMarshaller());  
                    remoteCacheManager = new RemoteCacheManager(clientBuilder.build());  
                    registerSchemasAndMarshallers(remoteCacheManager);  
                }catch (TransportException exception) {  
                    LOG.error("TransportException in createRemoteCacheManager : " + exception.getMessage());  
                    throw new TransportException("TransportException",new InetSocketAddress(11222));  
                }catch (Exception exception) {  
                    LOG.error("Exception in createRemoteCacheManager : " + exception.getMessage());  
                }  
                return remoteCacheManager;  
            }  
    
    2] 2] registerSchemasAndMarshallers :
    
        private void registerSchemasAndMarshallers(RemoteCacheManager remoteCacheManager) throws IOException {  
                SerializationContext ctx = ProtoStreamMarshaller.getSerializationContext(remoteCacheManager);  
                ctx.registerProtoFiles(FileDescriptorSource.fromResources(InfinispanConstant.EMPLOYEE_RESOURCE));  
    
                ctx.registerMarshaller(new EmployeeMarshaller());  
                ctx.registerMarshaller(new InnerEmployeeMarshaller());  
    
                // Register the schemas with the server too  
                RemoteCache metadataCache = remoteCacheManager.getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME);  
                metadataCache.put(InfinispanConstant.EMPLOYEE_RESOURCE, readResource(InfinispanConstant.EMPLOYEE_RESOURCE));  
                String errors = metadataCache.get(ProtobufMetadataManagerConstants.ERRORS_KEY_SUFFIX);  
                if (errors != null) {  
                    throw new IllegalStateException("Some Protobuf schema files contain errors:\n" + errors);  
                }  
            }  
    
    3] Employee.java
    
        import java.util.LinkedHashMap;  
    
        public class Employee {  
            private LinkedHashMap pair;  
    
            public Employee() {  
                this.pair = new LinkedHashMap();  
            }  
    
            public LinkedHashMap getPair() {  
                return pair;  
            }  
    
            public void setPair(LinkedHashMap pair) {  
                this.pair = pair;  
            }  
    
            public class InnerEmployee {  
                private String empNo;  
                private String name;  
                private String dateOfBirth;  
    
                public String getEmpNo() {  
                    return empNo;  
                }  
    
                public void setEmpNo(String empNo) {  
                    this.empNo = empNo;  
                }  
    
                public String getName() {  
                    return name;  
                }  
    
                public void setName(String name) {  
                    this.name = name;  
                }  
    
                public String getDateOfBirth() {  
                    return dateOfBirth;  
                }  
    
                public void setDateOfBirth(String dateOfBirth) {  
                    this.dateOfBirth = dateOfBirth;  
                }  
    
                @Override  
                public String toString() {  
                    return "Employee [empNo=" + empNo + ", name=" + name  
                            + ", dateOfBirth=" + dateOfBirth + "]";  
                }  
            }  
        }  
    
    4] EMPLOYEE_RESOURCE.proto
    
        option java_package = "com.auruspay.infinispan.pojo";  
        option java_outer_classname = "Employee";  
        /* 
        @Indexed(true) 
        */  
        message Employee {  
            repeated MapFieldEntry pairs = 1;  
        }  
        message MapFieldEntry {  
          optional string key = 1;  
          optional InnerEmployee value = 2;  
        }  
        message InnerEmployee {  
               optional string empNo = 1;  
            optional string name = 2;  
            optional string dateOfBirth = 3;  
        }  
    
    5] InnerEmployeeMarshaller.java
    
         package com.auruspay.infinispan.marshaller;  
    
        import java.io.IOException;  
        import org.infinispan.protostream.MessageMarshaller;  
        import com.auruspay.infinispan.pojo.Employee;  
    
        public class InnerEmployeeMarshaller implements MessageMarshaller {  
    
            @Override  
            public Class getJavaClass() {  
                return Employee.InnerEmployee.class;  
            }  
    
            @Override  
            public String getTypeName() {  
                return "com.auruspay.infinispan.proto.InnerEmployee";  
            }  
    
            @Override  
            public Employee.InnerEmployee readFrom(ProtoStreamReader reader) throws IOException {  
                Employee employee = new Employee();  
                Employee.InnerEmployee emp = employee. new InnerEmployee();  
                emp.setEmpNo(reader.readString("empNo"));  
                emp.setName(reader.readString("name"));  
                emp.setDateOfBirth(reader.readString("dateOfBirth"));  
                return emp;  
            }  
    
            @Override  
            public void writeTo(ProtoStreamWriter writer,Employee.InnerEmployee emp) throws IOException {  
                writer.writeString("empNo", emp.getEmpNo());  
                writer.writeString("name", emp.getName());  
                writer.writeString("dateOfBirth", emp.getDateOfBirth());  
            }  
        }  
    
    6] How EmployeeMarshaller should be designed ?
    
    Thanks In Advance !!!
    

    by

    points

    Responses

    Red Hat LinkedIn YouTube Facebook X, formerly Twitter

    Quick Links

    Help

    Site Info

    Related Sites

    © 2026 Red Hat