1 /***
2 * Redistribution and use of this software and associated documentation
3 * ("Software"), with or without modification, are permitted provided
4 * that the following conditions are met:
5 *
6 * 1. Redistributions of source code must retain copyright
7 * statements and notices. Redistributions must also contain a
8 * copy of this document.
9 *
10 * 2. Redistributions in binary form must reproduce the
11 * above copyright notice, this list of conditions and the
12 * following disclaimer in the documentation and/or other
13 * materials provided with the distribution.
14 *
15 * 3. The name "Exolab" must not be used to endorse or promote
16 * products derived from this Software without prior written
17 * permission of Exoffice Technologies. For written permission,
18 * please contact info@exolab.org.
19 *
20 * 4. Products derived from this Software may not be called "Exolab"
21 * nor may "Exolab" appear in their names without prior written
22 * permission of Exoffice Technologies. Exolab is a registered
23 * trademark of Exoffice Technologies.
24 *
25 * 5. Due credit should be given to the Exolab Project
26 * (http://www.exolab.org/).
27 *
28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39 * OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * Copyright 2000-2005 (C) Exoffice Technologies Inc. All Rights Reserved.
42 *
43 * $Id: JmsTemporaryTopic.java,v 1.2 2005/12/20 20:36:43 tanderson Exp $
44 */
45 package org.exolab.jms.client;
46
47 import java.io.Externalizable;
48 import java.io.IOException;
49 import java.io.ObjectInput;
50 import java.io.ObjectOutput;
51
52 import javax.jms.JMSException;
53 import javax.jms.TemporaryTopic;
54 import javax.naming.Reference;
55 import javax.naming.Referenceable;
56
57 import org.exolab.jms.common.uuid.UUID;
58
59
60 /***
61 * A temporary topic is created by a client through a session and has
62 * a lifetime of the session's connection.
63 *
64 * @version $Revision: 1.2 $ $Date: 2005/12/20 20:36:43 $
65 * @author <a href="mailto:jima@exoffice.com">Jim Alateras</a>
66 */
67 public class JmsTemporaryTopic
68 extends JmsTopic
69 implements TemporaryTopic, JmsTemporaryDestination, Externalizable, Referenceable {
70
71 /***
72 * Used for serialization.
73 */
74 static final long serialVersionUID = 2;
75
76 /***
77 * Contains the id to the connection that created this temporary
78 * destination. Note that the actual connection object is not
79 * streamed across, only the identifier.
80 */
81 private long _connectionId;
82
83 /***
84 * Reference to the connection that owns this deztination.
85 */
86 transient private JmsConnection _connection = null;
87
88
89 /***
90 * Constructor provided for serialization.
91 */
92 public JmsTemporaryTopic() {
93 }
94
95 /***
96 * Construct a new <code>JmsTemporaryQueue</code>.
97 *
98 * @param connection the owning connection
99 */
100 private JmsTemporaryTopic(JmsConnection connection) {
101 super(TEMP_TOPIC_PREFIX + UUID.next());
102 _connection = connection;
103 _connectionId = _connection.getConnectionId();
104 }
105
106
107 public void delete()
108 throws JMSException {
109
110 _connection.deleteTemporaryDestination(this);
111 }
112
113
114 public JmsConnection getOwningConnection() {
115 return _connection;
116 }
117
118
119 public long getConnectionId() {
120 return _connectionId;
121 }
122
123
124 public boolean validForConnection(JmsConnection connection) {
125 boolean result = false;
126
127 if (connection != null
128 && connection.getConnectionId() == _connectionId) {
129 result = true;
130 }
131
132 return result;
133 }
134
135
136 public Reference getReference() {
137
138 return null;
139 }
140
141
142 public void writeExternal(ObjectOutput stream)
143 throws IOException {
144 stream.writeLong(serialVersionUID);
145 stream.writeLong(_connectionId);
146 super.writeExternal(stream);
147 }
148
149
150 public void readExternal(ObjectInput stream)
151 throws IOException, ClassNotFoundException {
152 long version = stream.readLong();
153 if (version == serialVersionUID) {
154 _connectionId = stream.readLong();
155 super.readExternal(stream);
156 } else {
157 throw new IOException("JmsTemporaryTopic with version " +
158 version + " is not supported.");
159 }
160 }
161
162 /***
163 * Construct a new temporary topic.
164 *
165 * @param connection the connection owns that the topic
166 * @return a new temporary topic
167 */
168 public static TemporaryTopic create(JmsConnection connection) {
169 return new JmsTemporaryTopic(connection);
170 }
171
172 }