001: package org.jacorb.notification.servant;
002:
003: /*
004: * JacORB - a free Java ORB
005: *
006: * Copyright (C) 1999-2004 Gerald Brose
007: *
008: * This library is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU Library General Public
010: * License as published by the Free Software Foundation; either
011: * version 2 of the License, or (at your option) any later version.
012: *
013: * This library is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
016: * Library General Public License for more details.
017: *
018: * You should have received a copy of the GNU Library General Public
019: * License along with this library; if not, write to the Free
020: * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
021: *
022: */
023:
024: import org.apache.avalon.framework.configuration.Configuration;
025: import org.apache.avalon.framework.configuration.ConfigurationException;
026: import org.jacorb.notification.OfferManager;
027: import org.jacorb.notification.SubscriptionManager;
028: import org.jacorb.notification.engine.TaskProcessor;
029: import org.jacorb.notification.interfaces.Message;
030: import org.omg.CORBA.BooleanHolder;
031: import org.omg.CORBA.ORB;
032: import org.omg.CosEventChannelAdmin.AlreadyConnected;
033: import org.omg.CosEventComm.Disconnected;
034: import org.omg.CosNotification.EventHeader;
035: import org.omg.CosNotification.EventType;
036: import org.omg.CosNotification.FixedEventHeader;
037: import org.omg.CosNotification.Property;
038: import org.omg.CosNotification.StructuredEvent;
039: import org.omg.CosNotifyChannelAdmin.ConsumerAdmin;
040: import org.omg.CosNotifyChannelAdmin.ProxyType;
041: import org.omg.CosNotifyChannelAdmin.StructuredProxyPullSupplierOperations;
042: import org.omg.CosNotifyChannelAdmin.StructuredProxyPullSupplierPOATie;
043: import org.omg.CosNotifyComm.StructuredPullConsumer;
044: import org.omg.PortableServer.POA;
045: import org.omg.PortableServer.Servant;
046:
047: /**
048: * @jmx.mbean extends ="AbstractProxyMBean"
049: * @jboss.xmbean
050: *
051: * @author Alphonse Bendt
052: * @version $Id: StructuredProxyPullSupplierImpl.java,v 1.17 2006/01/12 22:34:54 alphonse.bendt Exp $
053: */
054:
055: public class StructuredProxyPullSupplierImpl extends
056: AbstractProxySupplier implements
057: StructuredProxyPullSupplierOperations,
058: StructuredProxyPullSupplierImplMBean {
059: /**
060: * undefined StructuredEvent that is returned on unsuccessful pull operations.
061: */
062: protected static final StructuredEvent UNDEFINED_STRUCTURED_EVENT;
063:
064: // initialize undefinedStructuredEvent_
065: static {
066: ORB _orb = ORB.init();
067:
068: UNDEFINED_STRUCTURED_EVENT = new StructuredEvent();
069: EventType _type = new EventType();
070: FixedEventHeader _fixed = new FixedEventHeader(_type, "");
071: Property[] _variable = new Property[0];
072: UNDEFINED_STRUCTURED_EVENT.header = new EventHeader(_fixed,
073: _variable);
074: UNDEFINED_STRUCTURED_EVENT.filterable_data = new Property[0];
075: UNDEFINED_STRUCTURED_EVENT.remainder_of_body = _orb
076: .create_any();
077: }
078:
079: /**
080: * the associated Consumer.
081: */
082: private StructuredPullConsumer structuredPullConsumer_;
083:
084: // //////////////////////////////////////
085:
086: public StructuredProxyPullSupplierImpl(IAdmin admin, ORB orb,
087: POA poa, Configuration conf, TaskProcessor taskProcessor,
088: OfferManager offerManager,
089: SubscriptionManager subscriptionManager,
090: ConsumerAdmin consumerAdmin) throws ConfigurationException {
091: super (admin, orb, poa, conf, taskProcessor, offerManager,
092: subscriptionManager, consumerAdmin);
093: }
094:
095: public ProxyType MyType() {
096: return ProxyType.PULL_STRUCTURED;
097: }
098:
099: public void connect_structured_pull_consumer(
100: StructuredPullConsumer consumer) throws AlreadyConnected {
101: checkIsNotConnected();
102:
103: connectClient(consumer);
104:
105: structuredPullConsumer_ = consumer;
106:
107: logger_.info("connect structured_pull_consumer");
108: }
109:
110: public StructuredEvent pull_structured_event() throws Disconnected {
111: checkStillConnected();
112:
113: try {
114: Message _message = getMessageBlocking();
115:
116: try {
117: return _message.toStructuredEvent();
118: } finally {
119: _message.dispose();
120: }
121: } catch (InterruptedException e) {
122: return UNDEFINED_STRUCTURED_EVENT;
123: }
124: }
125:
126: public StructuredEvent try_pull_structured_event(
127: BooleanHolder hasEvent) throws Disconnected {
128: checkStillConnected();
129:
130: Message _message = getMessageNoBlock();
131:
132: if (_message != null) {
133: try {
134: hasEvent.value = true;
135:
136: return _message.toStructuredEvent();
137: } finally {
138: _message.dispose();
139: }
140: }
141:
142: hasEvent.value = false;
143:
144: return UNDEFINED_STRUCTURED_EVENT;
145: }
146:
147: public void disconnect_structured_pull_supplier() {
148: destroy();
149: }
150:
151: protected void disconnectClient() {
152: logger_.info("disconnect structured_pull_consumer");
153:
154: structuredPullConsumer_.disconnect_structured_pull_consumer();
155:
156: structuredPullConsumer_ = null;
157: }
158:
159: public void disableDelivery() {
160: // as no active deliveries are made this can be ignored
161: }
162:
163: public void enableDelivery() {
164: // as no active deliveries are made this can be ignored
165: }
166:
167: public void deliverPendingData() {
168: // as no active deliveries are made this can be ignored
169: }
170:
171: public Servant newServant() {
172: return new StructuredProxyPullSupplierPOATie(this );
173: }
174:
175: protected long getCost() {
176: return 0;
177: }
178: }
|