|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.xmpp.component.AbstractComponent
public abstract class AbstractComponent
This class provides a default Component
implementation. Most of the
default functionality can be overridden by overriding specific methods.
These XMPP features are implemented in the abstract component:
This implementation uses the producer/consumer pattern, in which it takes the role of a consumer of stanzas. Every abstract component has a dedicated thread pool to process stanzas. This pool will use up to the configured maximum amount of threads to process stanzas that are sent to this component. If more stanzas are to be processed simultaneously, they will be placed in a queue (of configurable size) until a thread becomes available again. If the queue is full, the stanza will be dropped and an exception will be logged. If the stanza was an IQ request stanza, an IQ error stanza (internal-server-error/wait) will be returned.
By default, instances of this class are guaranteed to return an IQ response
on every consumed IQ of the get or set type, as required by
the XMPP specification. If the abstract component cannot formulate a valid
response and the extending implementation does not provide a response either
(by returning null on invocations of handleIQGet(IQ)
and
handleIQSet(IQ)
) an IQ error response is returned.
The behavior described above can be disabled by setting a corresponding flag in one of the constructors. If an instance is configured in such a way, null responses provided by the extending implementation are not translated in an IQ error. This allows the extending implementation to respond to IQ requests in an asynchrous manner. It will be up to the extending implementation to ensure that every IQ request is responded to.
Note that instances of this class can be used to implement internal (e.g. Openfire plugins) as well as external components.
Field Summary | |
---|---|
protected ComponentManager |
compMan
The component manager to which this Component has been registered. |
protected JID |
jid
The JID of the component, set after registration with a Component manager. |
protected org.slf4j.Logger |
log
The object that's responsible for logging. |
static java.lang.String |
NAMESPACE_DISCO_INFO
The XMPP 'service discovery info' namespace. |
static java.lang.String |
NAMESPACE_DISCO_ITEMS
The XMPP 'service discovery items' namespace. |
static java.lang.String |
NAMESPACE_ENTITY_TIME
The 'Entity Time' namespace |
static java.lang.String |
NAMESPACE_LAST_ACTIVITY
The 'Last Activity' namespace |
static java.lang.String |
NAMESPACE_XMPP_PING
The 'XMPP Ping' namespace |
Constructor Summary | |
---|---|
AbstractComponent()
Instantiates a new AbstractComponent with a maximum thread pool size of 17 and a maximum queue size of 1000. |
|
AbstractComponent(int maxThreadpoolSize,
int maxQueueSize,
boolean enforceIQResult)
Instantiates a new AbstractComponent. |
Method Summary | |
---|---|
protected java.lang.String[] |
discoInfoFeatureNamespaces()
This method returns a String array that should contain all namespaces of features that this component offers. |
protected java.lang.String |
discoInfoIdentityCategory()
Returns the category of the Service Discovery Identity of this component (this implementation will only hold exactly one Identity for the component). |
protected java.lang.String |
discoInfoIdentityCategoryType()
Returns the type of the Service Discovery Identity of this component (this implementation will only hold exactly one Identity for the component). |
abstract java.lang.String |
getDescription()
Returns the description of this component. |
java.lang.String |
getDomain()
Returns the XMPP domain to which this component is registered to. |
JID |
getJID()
Returns the XMPP address / Jabber ID (JID) of this component. |
abstract java.lang.String |
getName()
Returns the name of this component. |
protected IQ |
handleDiscoInfo(IQ iq)
Default handler of Service Discovery Info requests. |
protected IQ |
handleDiscoItems(IQ iq)
Default handler of Service Discovery Info requests. |
protected IQ |
handleEntityTime(IQ iq)
Default handler of Entity Time requests (XEP-0202). |
protected void |
handleIQError(IQ iq)
Override this method to handle the IQ stanzas of type error that are received by the component. |
protected IQ |
handleIQGet(IQ iq)
Override this method to handle the IQ stanzas of type get that could not be processed by the AbstractComponent implementation. |
protected void |
handleIQResult(IQ iq)
Override this method to handle the IQ stanzas of type result that are received by the component. |
protected IQ |
handleIQSet(IQ iq)
Override this method to handle the IQ stanzas of type set that could not be processed by the AbstractComponent implementation. |
protected IQ |
handleLastActivity(IQ iq)
Default handler of Last Activity requests (XEP-0012). |
protected void |
handleMessage(Message message)
Override this method to handle the Message stanzas that are received by the component. |
protected IQ |
handlePing(IQ iq)
Default handler of Ping requests (XEP-0199). |
protected void |
handlePresence(Presence presence)
Override this method to handle the Presence stanzas that are received by the component. |
void |
initialize(JID jid,
ComponentManager componentManager)
Initialize the abstract component. |
void |
postComponentShutdown()
This method gets called as part of the Component shutdown routine. |
void |
postComponentStart()
This method gets called as part of the Component 'start' routine. |
void |
preComponentShutdown()
This method gets called as part of the Component shutdown routine. |
void |
preComponentStart()
This method gets called as part of the Component 'start' routine. |
void |
processPacket(Packet packet)
Processes a packet sent to this Component. |
protected void |
send(Packet packet)
Helper method to send packets. |
boolean |
servesLocalUsersOnly()
Checks if the component can only be used by users of the XMPP domain that the component has registered to. |
void |
shutdown()
Default implementation of the shutdown() method of the Component
interface. |
void |
start()
Default implementation of the start() method of the Component
interface. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final org.slf4j.Logger log
public static final java.lang.String NAMESPACE_DISCO_ITEMS
public static final java.lang.String NAMESPACE_DISCO_INFO
public static final java.lang.String NAMESPACE_XMPP_PING
public static final java.lang.String NAMESPACE_LAST_ACTIVITY
public static final java.lang.String NAMESPACE_ENTITY_TIME
protected ComponentManager compMan
protected JID jid
Constructor Detail |
---|
public AbstractComponent()
public AbstractComponent(int maxThreadpoolSize, int maxQueueSize, boolean enforceIQResult)
maxThreadpoolSize
- the maximum number of threads that will process work for this
component.maxQueueSize
- capacity of the queue that holds tasks that are to be executed
by the thread pool.enforceIQResult
- if true, the component will make sure that every
request that is received is answered, as specified by the XMPP
specification.Method Detail |
---|
public final void initialize(JID jid, ComponentManager componentManager) throws ComponentException
initialize
in interface Component
jid
- the XMPP address that this component is available at.componentManager
- the component manager.
ComponentException
- if an error occured while initializing the component.Component.initialize(org.xmpp.packet.JID,
org.xmpp.component.ComponentManager)
public final void processPacket(Packet packet)
Component
processPacket
in interface Component
packet
- the packet.Component.processPacket(org.xmpp.packet.Packet)
protected void handleIQResult(IQ iq)
iq
- The IQ stanza of type result that was received by
this component.protected void handleIQError(IQ iq)
iq
- The IQ stanza of type error that was received by this
component.protected IQ handleIQGet(IQ iq) throws java.lang.Exception
AbstractComponent
implementation.
Note that, as any IQ stanza of type get must be replied to, returning null from this method equals returning an IQ error stanza of type 'feature-not-implemented' (this behavior can be disabled by setting the enforceIQResult argument in the constructor to false).
Note that if this method throws an Exception, an IQ stanza of type error, condition 'internal-server-error' will be returned to the sender of the original request.
The default implementation of this method returns null. It is expected that most child classes will override this method.
iq
- The IQ request stanza of type get that was received
by this component.
java.lang.Exception
protected IQ handleIQSet(IQ iq) throws java.lang.Exception
AbstractComponent
implementation.
Note that, as any IQ stanza of type set must be replied to, returning null from this method equals returning an IQ error stanza of type 'feature-not-implemented' {this behavior can be disabled by setting the enforceIQResult argument in the constructor to false).
Note that if this method throws an Exception, an IQ stanza of type error, condition 'internal-server-error' will be returned to the sender of the original request.
The default implementation of this method returns null. It is expected that most child classes will override this method.
iq
- The IQ request stanza of type set that was received
by this component.
java.lang.Exception
protected IQ handleDiscoItems(IQ iq)
iq
- The Service Discovery Items
protected IQ handleDiscoInfo(IQ iq)
discoInfoIdentityCategory()
;discoInfoIdentityCategoryType()
;Component
interface (which this class implements).discoInfoFeatureNamespaces()
.
Note that you should include the 'Service Discovery Items' feature if
handleDiscoInfo(IQ)
returns a non-null value.
iq
- The Service Discovery 'info' request stanza.
protected IQ handlePing(IQ iq)
iq
- The Ping request stanza.
protected IQ handleLastActivity(IQ iq)
iq
- The Last Activity request stanza.
protected IQ handleEntityTime(IQ iq)
iq
- Entity Time request stanza.
public abstract java.lang.String getDescription()
Component
getDescription
in interface Component
public abstract java.lang.String getName()
Component
getName
in interface Component
public java.lang.String getDomain()
public JID getJID()
protected java.lang.String discoInfoIdentityCategory()
The default Category of a component, which is used if this method is not overridden, is 'component'.
protected java.lang.String discoInfoIdentityCategoryType()
The default Category type of a component, which is used if this method is not overridden, is 'generic'.
protected java.lang.String[] discoInfoFeatureNamespaces()
Note that the features that are returned by this method should also be
implemented in either #handleIQGet()
and/or
#handleIQSet()
methods. Also note that the default namespaces for
service discovery should not be returned by this method.
The default implementation of this method returns an empty array. Override this method to include new namespaces.
protected void handleMessage(Message message)
message
- The Message stanza that was received by this component.protected void handlePresence(Presence presence)
presence
- The Presence stanza that was received by this component.public boolean servesLocalUsersOnly()
Note that by default, this method returns false. You can override this method to change the behavior.
public final void shutdown()
Component
interface.
shutdown
in interface Component
protected void send(Packet packet)
packet
- The packet to send.public void preComponentShutdown()
public void postComponentShutdown()
public void start()
Component
interface. Unless overridden, this method doesn't do anything. We get
called once for each host that we connect to, so we have to take care to
avoid double initialization.
start
in interface Component
public void preComponentStart()
public void postComponentStart()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |