blob: 99b773a8cf7a560efe28f4541d7c5c084979306a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.marshaller;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.ignite.IgniteBinary;
import org.apache.ignite.IgniteCheckedException;
import org.jetbrains.annotations.Nullable;
/**
* {@code Marshaller} allows to marshal or unmarshal objects in grid. It provides
* serialization/deserialization mechanism for all instances that are sent across networks
* or are otherwise serialized.
* <p>
* Ignite provides the following {@code Marshaller} implementations:
* <ul>
* <li>Default binary marshaller. Will be used when no other marshaller is explicitly set to the
* configuration. For more information, see {@link IgniteBinary}.</li>
* <li>{@link org.apache.ignite.marshaller.jdk.JdkMarshaller}</li>
* </ul>
* <p>
* Below are examples of marshaller configuration, usage, and injection into tasks, jobs,
* and SPI's.
* <h2 class="header">Java Example</h2>
* {@code Marshaller} can be explicitly configured in code.
* <pre name="code" class="java">
* JdkMarshaller marshaller = new JdkMarshaller();
*
* IgniteConfiguration cfg = new IgniteConfiguration();
*
* // Override marshaller.
* cfg.setMarshaller(marshaller);
*
* // Starts grid.
* G.start(cfg);
* </pre>
* <h2 class="header">Spring Example</h2>
* Marshaller can be configured from Spring XML configuration file:
* <pre name="code" class="xml">
* &lt;bean id="grid.custom.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true"&gt;
* ...
* &lt;property name="marshaller"&gt;
* &lt;bean class="org.apache.ignite.marshaller.jdk.JdkMarshaller"/&gt;
* &lt;/property&gt;
* ...
* &lt;/bean&gt;
* </pre>
* <p>
* <img src="http://ignite.apache.org/images/spring-small.png">
* <br>
* For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a>
*/
public interface Marshaller {
/**
* Sets marshaller context.
*
* @param ctx Marshaller context.
*/
public void setContext(MarshallerContext ctx);
/**
* Marshals object to the output stream. This method should not close
* given output stream.
*
* @param obj Object to marshal. {@code null} object will be marshaled to binary {@code null} representation.
* @param out Output stream to marshal into.
* @throws IgniteCheckedException If marshalling failed.
*/
public void marshal(@Nullable Object obj, OutputStream out) throws IgniteCheckedException;
/**
* Marshals object to byte array.
*
* @param obj Object to marshal. {@code null} object will be marshaled to binary {@code null} representation.
* @return Byte array.
* @throws IgniteCheckedException If marshalling failed.
*/
public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException;
/**
* Unmarshals object from the input stream using given class loader.
* This method should not close given input stream.
*
* @param <T> Type of unmarshalled object.
* @param in Input stream.
* @param clsLdr If not {@code null} then given class loader will be used for unmarshal object.
* @return Unmarshalled object.
* @throws IgniteCheckedException If unmarshalling failed.
*/
public <T> T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException;
/**
* Unmarshals object from byte array using given class loader.
*
* @param <T> Type of unmarshalled object.
* @param arr Byte array.
* @param clsLdr If not {@code null} then given class loader will be used for unmarshal object.
* @return Unmarshalled object.
* @throws IgniteCheckedException If unmarshalling failed.
*/
public <T> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException;
}