001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.catalina.tribes;
018:
019: import java.io.Serializable;
020: import java.io.Externalizable;
021: import java.io.ObjectInput;
022: import java.io.IOException;
023: import java.io.ObjectOutput;
024:
025: /**
026: * A byte message is not serialized and deserialized by the channel
027: * instead it is sent as a byte array<br>
028: * By default Tribes uses java serialization when it receives an object
029: * to be sent over the wire. Java serialization is not the most
030: * efficient of serializing data, and Tribes might not even
031: * have access to the correct class loaders to deserialize the object properly.
032: * <br>
033: * The ByteMessage class is a class where the channel when it receives it will
034: * not attempt to perform serialization, instead it will simply stream the <code>getMessage()</code>
035: * bytes.<br>
036: * If you are using multiple applications on top of Tribes you should add some sort of header
037: * so that you can decide with the <code>ChannelListener.accept()</code> whether this message was intended
038: * for you.
039: * @author Filip Hanik
040: * @version $Revision: 467222 $, $Date: 2006-10-24 05:17:11 +0200 (mar., 24 oct. 2006) $
041: */
042:
043: public class ByteMessage implements Serializable, Externalizable {
044: /**
045: * Storage for the message to be sent
046: */
047: private byte[] message;
048:
049: /**
050: * Creates an empty byte message
051: * Constructor also for deserialization
052: */
053: public ByteMessage() {
054: }
055:
056: /**
057: * Creates a byte message wit h
058: * @param data byte[] - the message contents
059: */
060: public ByteMessage(byte[] data) {
061: message = data;
062: }
063:
064: /**
065: * Returns the message contents of this byte message
066: * @return byte[] - message contents, can be null
067: */
068: public byte[] getMessage() {
069: return message;
070: }
071:
072: /**
073: * Sets the message contents of this byte message
074: * @param message byte[]
075: */
076: public void setMessage(byte[] message) {
077: this .message = message;
078: }
079:
080: /**
081: * @see java.io.Externalizable#readExternal
082: * @param in ObjectInput
083: * @throws IOException
084: */
085: public void readExternal(ObjectInput in) throws IOException {
086: int length = in.readInt();
087: message = new byte[length];
088: in.read(message, 0, length);
089: }
090:
091: /**
092: * @see java.io.Externalizable#writeExternal
093: * @param out ObjectOutput
094: * @throws IOException
095: */
096: public void writeExternal(ObjectOutput out) throws IOException {
097: out.writeInt(message != null ? message.length : 0);
098: if (message != null)
099: out.write(message, 0, message.length);
100: }
101:
102: }
|