📄 publishqosserver.java
字号:
/*------------------------------------------------------------------------------Name: PublishQosServer.javaProject: xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE file------------------------------------------------------------------------------*/package org.xmlBlaster.engine.qos;import org.xmlBlaster.engine.ServerScope;import org.xmlBlaster.util.Timestamp;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.util.def.ErrorCode;import org.xmlBlaster.util.def.PriorityEnum;import org.xmlBlaster.util.qos.QosData;import org.xmlBlaster.util.qos.MsgQosData;import org.xmlBlaster.util.qos.TopicProperty;import org.xmlBlaster.util.SessionName;import org.xmlBlaster.util.qos.address.Destination;import org.xmlBlaster.util.cluster.NodeId;import org.xmlBlaster.util.cluster.RouteInfo;import org.xmlBlaster.engine.queuemsg.TopicEntry;import java.util.ArrayList;/** * Handling of publish() quality of services in the server core. * <p /> * This decorator hides the real qos data object and gives us a server specific view on it. * @author xmlBlaster@marcelruff.info * @see org.xmlBlaster.util.qos.MsgQosData * @see org.xmlBlaster.util.qos.MsgQosSaxFactory */public final class PublishQosServer{ private final ServerScope glob; private final MsgQosData msgQosData; private boolean isClusterUpdate = false; private TopicEntry topicEntry; /** * Constructor which accepts parsed object. * @throws XmlBlasterException */ public PublishQosServer(ServerScope glob, QosData msgQosData) throws XmlBlasterException { this(glob, (MsgQosData)msgQosData, false); } /** * Constructor which accepts parsed object. * @param fromPersistenceStore true if recovered from persistency * @throws XmlBlasterException */ public PublishQosServer(ServerScope glob, MsgQosData msgQosData, boolean fromPersistenceStore) throws XmlBlasterException { this.glob = glob; this.msgQosData = msgQosData; this.msgQosData.setFromPersistenceStore(fromPersistenceStore); if (!this.msgQosData.isFromPersistenceStore()) { this.msgQosData.touchRcvTimestamp(); } completeDestinations(); } /** * Constructs the specialized quality of service object for a publish() call, * and parses the given XML string. * @param the XML based ASCII string */ public PublishQosServer(ServerScope glob, String xmlQos) throws XmlBlasterException { this(glob, xmlQos, false); } /** * Constructs the specialized quality of service object for a publish() call. * For internal use only, this message is sent from the persistence layer * @param xmlQos The XML based ASCII string * @param fromPersistenceStore true if recovered from persistency */ public PublishQosServer(ServerScope glob, String xmlQos, boolean fromPersistenceStore) throws XmlBlasterException { this(glob, glob.getMsgQosFactory().readObject(xmlQos), fromPersistenceStore); } /** * Checks for relative destination names and completes them with * our cluster node id * @throws XmlBlasterException */ private void completeDestinations() throws XmlBlasterException { if (getNumDestinations() > 0) { Destination[] arr = getDestinationArr(); for(int i=0; i<arr.length; i++) { SessionName sessionName = arr[i].getDestination(); if (sessionName == null) { throw new XmlBlasterException(this.glob, ErrorCode.USER_PUBLISH, "PublishQosServer", "Invalid destination address, please check your PtP PublishQos"); } if (sessionName.getNodeId() == null) { sessionName = new SessionName(glob, glob.getNodeId(), sessionName.getRelativeName()); arr[i].setDestination(sessionName); } } } } /** * Access the internal data struct */ public MsgQosData getData() { return this.msgQosData; } public boolean isClusterUpdate() { return this.isClusterUpdate; } /** * The PublishQosServer supports to transport information about cluster callbacks */ public void setClusterUpdate(boolean isClusterUpdate) { this.isClusterUpdate = isClusterUpdate; } /** * @return Not null if administratice message which is recovered from persistency */ public TopicEntry getTopicEntry() { return this.topicEntry; } /** * The PublishQosServer supports to transport a topicEntry instance */ public void setTopicEntry(TopicEntry topicEntry) { this.topicEntry = topicEntry; } /** * @param isSubscribable true if Publish/Subscribe style is used<br /> * false Only possible for PtP messages to keep PtP secret (you can't subscribe them) */ public void setSubscribable(boolean isSubscribable) { this.msgQosData.setSubscribable(isSubscribable); } public boolean isSubscribable() { return this.msgQosData.isSubscribable(); } public boolean isPtp() { return this.msgQosData.isPtp(); } public boolean isVolatile() { return this.msgQosData.isVolatile(); } public boolean isPersistent() { return this.msgQosData.isPersistent(); } public boolean isForceUpdate() { return this.msgQosData.isForceUpdate(); } public boolean isReadonly() { return this.msgQosData.isReadonly(); } public SessionName getSender() { return this.msgQosData.getSender(); } public void setSender(SessionName sender) { this.msgQosData.setSender(sender); } public String getState() { return this.msgQosData.getState(); } /** * @see org.xmlBlaster.util.qos.MsgQosData#addRouteInfo(RouteInfo) */ public void addRouteInfo(RouteInfo routeInfo) { this.msgQosData.addRouteInfo(routeInfo); } /** * @return never null, but may have length==0 */ public RouteInfo[] getRouteNodes() { return this.msgQosData.getRouteNodes(); } public void clearRoutes() { this.msgQosData.clearRoutes(); } public int count(NodeId nodeId) { return this.msgQosData.count(nodeId); } public boolean dirtyRead(NodeId nodeId) { return this.msgQosData.dirtyRead(nodeId); } public PriorityEnum getPriority() { return this.msgQosData.getPriority(); } public void setPriority(PriorityEnum priority) { this.msgQosData.setPriority(priority); } /** * Internal use only, is this message sent from the persistence layer? * @return true/false */ public boolean isFromPersistenceStore() { return this.msgQosData.isFromPersistenceStore(); } /** * Internal use only, set if this message sent from the persistence layer * @param true/false */ public void setFromPersistenceStore(boolean fromPersistenceStore) { this.msgQosData.setFromPersistenceStore(fromPersistenceStore); } public void setLifeTime(long lifeTime) { this.msgQosData.setLifeTime(lifeTime); } public long getLifeTime() { return this.msgQosData.getLifeTime(); } public boolean isExpired() { return this.msgQosData.isExpired(); } public Timestamp getRcvTimestamp() { return this.msgQosData.getRcvTimestamp(); } public String getXmlRcvTimestamp() { return this.msgQosData.getXmlRcvTimestamp(); } public void touchRcvTimestamp() { this.msgQosData.touchRcvTimestamp(); } public long getRemainingLife() { return this.msgQosData.getRemainingLife(); } public ArrayList getDestinations() { return this.msgQosData.getDestinations(); } public Destination[] getDestinationArr() { return this.msgQosData.getDestinationArr(); } public void removeDestination(Destination destination) { this.msgQosData.removeDestination(destination); } public int getNumDestinations() { return this.msgQosData.getNumDestinations(); } public boolean hasTopicProperty() { return this.msgQosData.hasTopicProperty(); } public TopicProperty getTopicProperty() { return this.msgQosData.getTopicProperty(); } public String toXml() { return toXml((String)null); } public String toXml(String extraOffset) { return this.msgQosData.toXml(extraOffset); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -