|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objecttigase.server.BasicComponent
tigase.server.AbstractMessageReceiver
public abstract class AbstractMessageReceiver
This is an archetype for all classes processing user-level packets. The implementation
is designed for a heavy packets processing with internal queues and number of separate
threads depending on number of CPUs. Extensions of the class can process normall user
packets and administrator packets via ad-hoc commands. Good examples of such
components are MUC
, PubSub
, SessionManager
.
processPacket(Packet packet)
method which
is concurrently called from multiple threads.
Created: Tue Nov 22 07:07:11 2005
Field Summary | |
---|---|
protected static long |
HOUR
Constant used in time calculation procedures. |
static String |
INCOMING_FILTERS_PROP_KEY
Configuration property key for setting incoming packets filters on the component level. |
static String |
INCOMING_FILTERS_PROP_VAL
Configuration property default vakue with a default incoming packet filter loaded by Tigase server. This is a comma-separated list of classes which should be loaded as packet filters. |
static String |
MAX_QUEUE_SIZE_PROP_KEY
Configuration property key allowing to overwrite a default (memory size dependent) size for the component internal queues. |
static Integer |
MAX_QUEUE_SIZE_PROP_VAL
A default value for max queue size property. |
protected int |
maxQueueSize
|
protected static long |
MINUTE
Constant used in time calculation procedures. |
static String |
OUTGOING_FILTERS_PROP_KEY
Configuration property key for setting outgoing packets filters on the component level. |
static String |
OUTGOING_FILTERS_PROP_VAL
Configuration property default vakue with a default outgoing packet filter loaded by Tigase server. This is a comma-separated list of classes which should be loaded as packet filters. |
protected static long |
SECOND
Constant used in time calculation procedures. |
Fields inherited from class tigase.server.BasicComponent |
---|
admins, SCRIPTS_DIR_PROP_DEF, SCRIPTS_DIR_PROP_KEY, vHostManager |
Fields inherited from interface tigase.disco.XMPPService |
---|
CMD_FEATURES, DEF_FEATURES, INFO_XMLNS, ITEMS_XMLNS |
Constructor Summary | |
---|---|
AbstractMessageReceiver()
|
Method Summary | |
---|---|
protected boolean |
addOutPacket(Packet packet)
|
protected boolean |
addOutPacketNB(Packet packet)
Non blocking version of addOutPacket . |
protected boolean |
addOutPackets(Queue<Packet> packets)
|
protected boolean |
addOutPacketWithTimeout(Packet packet,
ReceiverTimeoutHandler handler,
long delay,
TimeUnit unit)
|
boolean |
addPacket(Packet packet)
Method adds a Packet object to the internal input queue. |
boolean |
addPacketNB(Packet packet)
This is a variant of addPacket(Packet) method which adds
Packet to in the internal input queue without blocking.
The method returns a boolean value of true if the packet
has been successfuly added to the queue and false otherwise.
Use of the non-blocking methods is not recommended for most of the components
implementations. |
boolean |
addPackets(Queue<Packet> packets)
This is a convenience method for adding all packets stored in given queue to the component's internal input queue. The method calls addPacket(Packet) in a loop for each packet in the queue. |
void |
addRegexRouting(String address)
Method adds a new routing address for the component. |
protected void |
addTimerTask(TimerTask task,
long delay)
|
protected void |
addTimerTask(TimerTask task,
long delay,
TimeUnit unit)
|
void |
clearRegexRoutings()
Method clears, removes all the component routing addresses. |
void |
everyHour()
Utility method executed precisely every hour. |
void |
everyMinute()
Utility method executed precisely every minute. |
void |
everySecond()
Utility method executed precisely every second. |
Map<String,Object> |
getDefaults(Map<String,Object> params)
Returns defualt configuration settings for the component as a Map with
keys as configuration property IDs and values as the configuration property values. |
protected Integer |
getMaxQueueSize(int def)
|
Set<Pattern> |
getRegexRoutings()
Method returns a Set with all component's routings as a precompiled
regular expression patterns. |
void |
getStatistics(StatisticsList list)
Method returns component statistics. |
int |
hashCodeForPacket(Packet packet)
This method decides how incoming packets are distributed among processing threads. |
boolean |
isInRegexRoutings(String address)
Method description |
String |
newPacketId(String prefix)
Method description |
int |
processingThreads()
Method description |
abstract void |
processPacket(Packet packet)
This is the main Packet processing method. |
void |
processPacket(Packet packet,
Queue<Packet> results)
Method description |
void |
release()
Method description |
boolean |
removeRegexRouting(String address)
Method description |
void |
setMaxQueueSize(int maxQueueSize)
Method description |
void |
setName(String name)
Method description |
void |
setParent(MessageReceiver parent)
Method description |
void |
setProperties(Map<String,Object> props)
Sets all configuration properties for object. |
void |
start()
Method description |
void |
stop()
Method description |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface tigase.server.MessageReceiver |
---|
getDefHostName |
Methods inherited from interface tigase.server.ServerComponent |
---|
getComponentId, getName, initializationCompleted |
Field Detail |
---|
public static final String INCOMING_FILTERS_PROP_KEY
public static final String INCOMING_FILTERS_PROP_VAL
PacketFilterIfc
interface.
public static final String MAX_QUEUE_SIZE_PROP_KEY
public static final Integer MAX_QUEUE_SIZE_PROP_VAL
Runtime.getRuntime().maxMemory() / 400000L
You can change the default queue size by setting a different value for the
MAX_QUEUE_SIZE_PROP_KEY
property in the server configuration.
public static final String OUTGOING_FILTERS_PROP_KEY
PacketFilterIfc
interface.
public static final String OUTGOING_FILTERS_PROP_VAL
PacketFilterIfc
interface.
protected static final long SECOND
protected static final long MINUTE
SECOND
s.
protected static final long HOUR
MINUTE
s.
protected int maxQueueSize
Constructor Detail |
---|
public AbstractMessageReceiver()
Method Detail |
---|
public abstract void processPacket(Packet packet)
Packet
processing method. It is called concurrently
from many threads so implementing it in thread save manner is essential. The method
is called for each packet addressed to the component.
Please note, the Packet
instance may be processed by different parts
of the server, different components or plugins at the same time. Therefore this is
very important to tread the Packet
instance as unmodifiable object.
Processing in this method is asynchronous, therefore there is no result value. If there
are some 'result' packets generated during processing, they should be passed back using
addOutPacket(Packet)
method.
packet
- is an instance of the Packet
class passed for processing.public boolean addPacket(Packet packet)
Packet
object to the internal input queue. Packets from
the input queue are later passed to the processPacket(Packet)
method.
This is a blocking method waiting if necessary for the room if the queue is full.
The method returns a boolean
value of true
if the packet
has been successfuly added to the queue and false
otherwise.
There can be many queues and many threads processing packets for the component,
however the method makes the best effort to quarantee that packets are later processed
in the correct order. For example that packets for a single user always end up in the
same exact queue. You can tweak the packets ditribution amongs threads by overwriting
hashCodeForPacket(Packet)
method.N
threads the packets are distributed among thread using
following logic:
int threadNo = Math.abs(hashCodeForPacket(packet) % N);This is a preferred method to be used by most Tigase components. If the queues are full the component should stop and wait for more room. The blocking methods aim to prevent from the system overloading or wasting resources for generating packets which can't be processed anyway.
addPacket
in interface MessageReceiver
packet
- is a Packet
instance being put to the component
internal input queue.
boolean
value of true
if the packet
has been successfuly added to the queue and false
otherwise.public boolean addPacketNB(Packet packet)
addPacket(Packet)
method which adds
Packet
to in the internal input queue without blocking.
The method returns a boolean
value of true
if the packet
has been successfuly added to the queue and false
otherwise.
Use of the non-blocking methods is not recommended for most of the components
implementations. The only component which is allowed to use them is the server
MessageRouter
implementation which can not hang on any method.
This would cause a dead-lock in the application. All other components must use
blocking methods and wait if the system is under so high load that it's queues
are full.
See addPacket(Packet)
method's documentation for some more details.
addPacketNB
in interface MessageReceiver
packet
- is a Packet
instance being put to the component
internal input queue.
boolean
value of true
if the packet
has been successfuly added to the queue and false
otherwise.AbstractMessageReceiver.addPacket(Packet packet)
public boolean addPackets(Queue<Packet> packets)
addPacket(Packet)
in a loop for each packet in the queue.
If the call returns true
then the packet is removed from the given queue,
otherwise the methods ends the loop and returns false
.
Please note, if the method returns true
it means that all the packets
from the queue passed as a parameter have been successfuly run through the
addPacket(Packet)
method and the queue passed as a parameter should
be empty. If the method returns false then at least one packet from the parameter
queue wasn't successfully run through the addPacket(Packet)
method.
If the method returns false
then the queue passed as a parameter
is not empty and it contains packet which was unseccessfully run through the
addPacket(Packet)
method and all the packets which were not run
at all.
addPackets
in interface MessageReceiver
packets
- is a Queue
of packets for adding to the component
internal input queue. All the packets are later processed by
processPacket(Packet)
method in the same exact order if they are
processed by the same thread. See documentation
hashCodeForPacket(Packet)
method how to control assiging packets to
particular threads.
boolean
value of true
if all packets has been
successfully added to the component's internal input queue and false
otherwise.AbstractMessageReceiver.hashCodeForPacket(Packet packet)
public void addRegexRouting(String address)
MessageRouter
to calculate packet's destination. If the packet's
destination address matches one of the component's routing addresses the packet
is added to the component's internal input queue.
By default all components accept packets addressed to the componentId and to:
component.getName() + '@' + any virtual domain
address
- is a Java regular expression string for the packet's destination address
accepted by this component.public void clearRegexRoutings()
public void everyHour()
public void everyMinute()
public void everySecond()
public Map<String,Object> getDefaults(Map<String,Object> params)
Map
with
keys as configuration property IDs and values as the configuration property values.
All the default parameters returned from this method are later passed to the
setProperties(...)
method. Some of them may have changed value if they
have been overwriten in the server configurtion. The configuration property value can
be of any of the basic types: int
, long
,
boolean
, String
.
getDefaults
in interface Configurable
getDefaults
in class BasicComponent
params
- is a Map
with some initial properties set for the
starting up server. These parameters can be used as a hints to generate component's
default configuration.
Map
with the component default configuration.public Set<Pattern> getRegexRoutings()
Set
with all component's routings as a precompiled
regular expression patterns. The Set
can be empty but it can not
be null.
Set
with all component's routings as a precompiled
regular expression patterns.public void getStatistics(StatisticsList list)
Level.FINEST
assigned and must be put inside the level
guard to prevent generating them by the system monitor. The system monitor does not
collect FINEST
statistics.
Level guard code looks like the example below:
if (list.checkLevel(Level.FINEST)) { // Some CPU intensive calculations or lengthy operations list.add(getName(), "Statistic description", stat_value, Level.FINEST); }This way you make sure your extensive operation is not executed every second by the monitoing system and does not affect the server performance.
getStatistics
in interface StatisticsContainer
list
- is a StatistcsList
where all statistics are stored.public int hashCodeForPacket(Packet packet)
int threadNo = Math.abs(hashCodeForPacket(packet) % N);For a PubSub component, for example, a better packets distribution would be based on the PubSub channel name, for SM a better distribution is based on the destination address, etc....
packet
- is a Packet
which needs to be processed by some thread.
public boolean isInRegexRoutings(String address)
isInRegexRoutings
in interface MessageReceiver
address
-
public String newPacketId(String prefix)
prefix
-
public final void processPacket(Packet packet, Queue<Packet> results)
processPacket
in interface ServerComponent
processPacket
in class BasicComponent
packet
- results
- public int processingThreads()
public void release()
release
in interface ServerComponent
release
in class BasicComponent
public boolean removeRegexRouting(String address)
address
-
public void setMaxQueueSize(int maxQueueSize)
maxQueueSize
- public void setName(String name)
setName
in interface ServerComponent
setName
in class BasicComponent
name
- public void setParent(MessageReceiver parent)
setParent
in interface MessageReceiver
parent
- @TODO(note="Replace fixed filers loading with configurable options for that") public void setProperties(Map<String,Object> props)
setProperties
in interface Configurable
setProperties
in class BasicComponent
props
- public void start()
start
in interface MessageReceiver
public void stop()
protected boolean addOutPacket(Packet packet)
protected boolean addOutPacketNB(Packet packet)
addOutPacket
.
packet
- a Packet
value
boolean
valueprotected boolean addOutPacketWithTimeout(Packet packet, ReceiverTimeoutHandler handler, long delay, TimeUnit unit)
protected boolean addOutPackets(Queue<Packet> packets)
protected void addTimerTask(TimerTask task, long delay, TimeUnit unit)
protected void addTimerTask(TimerTask task, long delay)
protected Integer getMaxQueueSize(int def)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |