001/* 002 * Copyright (c) 2016-2017 Chris K Wensel <chris@wensel.net>. All Rights Reserved. 003 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved. 004 * 005 * Project and contact information: http://www.cascading.org/ 006 * 007 * This file is part of the Cascading project. 008 * 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 */ 021 022package cascading.tuple.hadoop; 023 024import java.lang.annotation.ElementType; 025import java.lang.annotation.Retention; 026import java.lang.annotation.RetentionPolicy; 027import java.lang.annotation.Target; 028 029/** 030 * Annotation SerializationToken enables {@link cascading.tuple.io.TupleInputStream} and {@link cascading.tuple.io.TupleOutputStream} 031 * to substitute Integer values for a class name when writing out nested objects inside a {@link cascading.tuple.Tuple}. 032 * <p> 033 * To use, add this annotation to any custom Hadoop {@link org.apache.hadoop.io.serializer.Serialization} implementation. 034 * <p> 035 * For example:<br> 036 * <pre> 037 * @SerializationToken(tokens={222, 223}, classNames = {"example.PersonObject", "example.SiteObject"}) 038 * public class MySerialization implements org.apache.hadoop.io.serializer.Serialization 039 * { 040 * public MySerialization() 041 * { 042 * ... 043 * } 044 * ... 045 * } 046 * </pre> 047 * <p> 048 * The SerializationToken annotation allows for multiple token to className mappings, since a Serialization implementation may 049 * {@link org.apache.hadoop.io.serializer.Serialization#accept(Class)} more than one class. 050 * <p> 051 * Note that the token integer value must be 128 or greater to save room for internal types. 052 * 053 * @see cascading.tuple.io.TupleInputStream 054 * @see cascading.tuple.io.TupleOutputStream 055 * @see TupleSerialization 056 */ 057@Retention(RetentionPolicy.RUNTIME) 058@Target(ElementType.TYPE) 059public @interface SerializationToken 060 { 061 int[] tokens(); 062 063 String[] classNames(); 064 }