XPUSH Detailed Settings

xpush_config.xml

When X-PUSH is run, it refers to $XPUSH_HOME/conf/xpush_config.xml. The services and attributes of the setting file are described below.

XML file tag consists of server, service, attribute, depends, etc. and the setting is controlled through attribute tag.

Tag

Description

server

root tag with multiple services

service

Tag with the service to be used in xpush defined

attribute

Tag with attributes of the service defined

depends

Service dependent tag

- Service operation order can be controlled with depends tag.

- The corresponding service is started after the service set in depends is started.

Randomly changing fixed values or removing attributes may affect the system.

Services

WebPublisher

WebPublisher service connects WebClient and processes data.

Attribute

Description

ServerBindAddress

Address to which WebPublisher service will be bound

default: 0.0.0.0

Port

Port to which WebPublisher service will be bound

default: 10080

ProtocolServiceName

Name of the protocol service to be used in WebPublisher

CertificateServiceName

The service name for which SSL certificate is set

IsHttps

Whether to use HTTPS.

Set it to true to use it.

To use HTTPS, CertificateService must be set.

<service name="WebPublisher" ...>
	<attribute name="ServerBindAddress">0.0.0.0</attribute>
	<attribute name="Port">10080</attribute>
	<attribute name="ProtocolServiceName">
		#MiPlatformReliabilityNettyWithProjectIDProtocol
    </attribute>
	<attribute name="CertificateServiceName">#CertificateService</attribute>
	<attribute name="IsHttps">false</attribute>
	<depends>MiPlatformReliabilityNettyWithProjectIDProtocol</depends>
	<depends>CertificateService</depends>
	<depends>Publisher</depends>
	<depends>Log</depends>
</service>

RuntimePublisher

RuntimePublisher service connects RuntimeClient and processes data.

Attribute

Description

ServerBindAddress

Address to which RuntimePublisher service will be bound

default: 0.0.0.0

Port

Port to which RuntimePublisher service will be bound

default: 10081

ProtocolServiceName

Name of the protocol service to be used in RuntimePublisher

CertificateServiceName

The service name for which SSL certificate is set

IsSSL

Whether to use an SSL connection.

Set it to true to use it.

To use an SSL connection, CertificateService must be set.

<service name="RuntimePublisher" ..>
	<attribute name="ServerBindAddress">0.0.0.0</attribute>
	<attribute name="Port">10081</attribute>
	<attribute name="ProtocolServiceName">
		#MiPlatformReliabilityNettyWithProjectIDProtocol
    </attribute>
	<attribute name="CertificateServiceName">#CertificateService</attribute>
	<attribute name="IsSSL">false</attribute>
	<depends>MiPlatformReliabilityNettyWithProjectIDProtocol</depends>
	<depends>CertificateService</depends>
	<depends>Publisher</depends>
	<depends>Log</depends>
</service>

CertificateService

CertificateService is a service that performs SSL certificate related processing.

Attribute

Description

Path

SSL certificate location

Password

SSL server key

IsEncrypted

Whether to use encryption

CertificatesPasswordEncryptorClassName

Class name to encrypt/decrypt the password

<service name="CertificateService">

	<attribute name="Path">C:/xpush-3.0.0/conf/cacao.tobesoft.co.kr.jks</attribute>
	<attribute name="Password">1234567890</attribute>
	<attribute name="IsEncrypted">false</attribute>			 

 <attribute name="CertificatesPasswordEncryptorClassName">com.nexacro.xpush.crypto.XPushPBEStringEncryptor</attribute>

</service>

Publisher

Publisher manages connected clients and JMX settings.

Servant: Object that manages one client

Container: Object that manages servants

Attribute

Description

ProtocolServiceName

Name of the protocol used in Publisher service

PublishContainerFactoryServiceName

ContainerFactory service name

ContainerNum

Number of containers

ServantGarbageInterval

Servant's Keep message check period

ThreadPoolCoreSize

Deleted

ThreadPoolMaxSize

Deleted

ThreadPoolKeepAliveTime

Deleted

QueueServiceNames

Main queue service name

WebPort

Not used

SessionInterval

Not used

logFixLineCount

Not used

InsertMsgQueueServiceName

Message supply queue service name

NotificationQueueServiceName

Notification queue service name

DbcpServiceName

DB connection service name

ServerBindAddress

JMX monitoring binding address

isJMX

Whether to use JMX

IsJMXpassword

Whether to use JMX password

JMXrmiRegistryPort

JMX rmi registration port

JMXrmiServerPort

JMX rmi server port

IsSystemMonitor

Whether to monitor system data (CPU, etc.)

ConnectionManagerServiceName

Client connection management service name

<service name="Publisher" >
	<attribute name="ProtocolServiceName">
		#MiPlatformReliabilityNettyWithProjectIDProtocol
	</attribute>		
	<attribute name="PublishContainerFactoryServiceName">
		#PublishContainerFactory
	</attribute>
	<attribute name="ContainerNum">10</attribute>
	<attribute name="ServantGarbageInterval">30000</attribute>
	<attribute name="ThreadPoolCoreSize">4</attribute>
	<attribute name="ThreadPoolMaxSize">8</attribute>
	<attribute name="ThreadPoolKeepAliveTime">86400000</attribute>
	<attribute name="QueueServiceNames">
		#MonitorablePushMessageQueueService
	</attribute>
	<attribute name="WebPort">-1</attribute>
	<attribute name="SessionInterval">600</attribute>
	<attribute name="LogFixLineCount">100</attribute>
	<attribute name="InsertMsgQueueServiceName">#InsertMsgQueue</attribute>
	<attribute name="NotificationQueueServiceName">
		#NotificationQueueService
	</attribute>
	<attribute name="DbcpServiceName">#DbcpService</attribute>
	<attribute name="ServerBindAddress">0.0.0.0</attribute>
	<attribute name="isJMX">false</attribute>
	<attribute name="IsJMXpassword">false</attribute>
	<attribute name="JMXrmiRegistryPort">10085</attribute>
	<attribute name="JMXrmiServerPort">10086</attribute>
	<attribute name="IsSystemMonitor">false</attribute>
	<depends>InsertMsgQueue</depends>
	<depends>NotificationQueueService</depends>
	<depends>MonitorablePushMessageQueueService</depends>
	<depends>MiPlatformReliabilityNettyWithProjectIDProtocol</depends>
	<depends>PublishContainerFactory</depends>
	<depends>DbcpService</depends>						
	<depends>Log</depends>
	<attribute name="ConnectionManagerServiceName">
		#connectionManagerService
	</attribute>
	<depends>connectionManagerService</depends>
</service>

When trying to activate the IsSystemMonitor attribute, it may not operate depending on the OS.

Number of Servant Containers and Servant per Container

The default value set at the time of deployment is the value set assuming the service for 5,000 simultaneous clients. This value was obtained through many performance tests. Therefore, it is recommended to use the value set during the deployment.

In order to process more than 5,000 client connections, the number of Servant Containers and Containers must be modified.

A Servant is an object that manages one client and a Servant Container is an object that manages a specific number of Servants. Each Servant Container is operated as a separate thread and it sends messages to all Servants it manages when each Servant Container receives a message to send it to the client. As it is operated by an individual thread, it is possible to process subsequent messages without having to complete the transmission of the entire Servant, and as a result, the processing time is shortened.

The default value set at the time of deployment is 10 Containers and 500 Servants. Since one Servant Container manages 500 Servants, a total of 5,000 (= Number of Containers * Number of Servants = 10 * 500) clients can be processed. If a new connection is requested when 5,000 users are connected, the connection is rejected rather than accepted.

MonitorablePushMessageQueueService

MonitorablePushMessageQueueService is a queue that waits for real-time and reliable message transmission.

Attribute

Description

MaxCapacity

Maximum capacity of the queue

No capacity limit when -1.

<service name="MonitorablePushMessageQueueService">
	<attribute name="MaxCapacity">-1</attribute>
</service>

MiPlatformReliabilityNettyWithProjectIDProtocol

MiPlatformReliabilityNettyWithProjectIDProtocol is a service that defines the protocol between server and client.

Attribute

Description

AuthenticatorServiceName

Authentication service name used in the protocol

usedACKN

Whether to use ACKN

- ACKN is whether to update DB when it receives a response from nexacro engine

usedURCV

Under development

KeepAlive

keepAlive message maintainable time

TimeOut

WebPush writing timeout (seconds)

bufferingMaxDelay

Deleted

bufferingMaxCount

Deleted

SelectMsgQueueServiceName

Name of client unreceived message request queue

UpdateMsgQueueServiceName

Name of client receipt response message queue

AutoInsertTopic

Whether to automatically register topic to DB when subscribed

UserRegister

Whether to register user when automatic topic registration is activated

insertTopicMsgQueueServiceName

Name of user registration and unreceived message number inquiry queue

DbcpServiceName

DB connection service name

RepositoryServiceName

DB storage service name

<service name="CertificateService">

	<attribute name="Path">C:/xpush-3.0.0/conf/cacao.tobesoft.co.kr.jks</attribute>
	<attribute name="Password">1234567890</attribute>
	<attribute name="IsEncrypted">false</attribute>			 

 <attribute name="CertificatesPasswordEncryptorClassName">com.nexacro.xpush.crypto.XPushPBEStringEncryptor</attribute>

</service>

MiPlatformProtocolReliabilityAuthenticator

MiPlatformProtocolReliabilityAuthenticator performs client-related authentication service processing.

Attribute

Description

AuthenticatorClassName

Client authentication class path

<service name="MonitorablePushMessageQueueService">
	<attribute name="MaxCapacity">-1</attribute>
</service>

PublisherContainerFactory

PublisherContainerFactory is a container generation service.

Attribute

Description

RegisterContainer

Whether to register container

MaxServantNum

Maximum number of servants per container

ThreadPoolCoreSize

Thread pool minimum size

ThreadPoolMaxSize

Thread pool maximum size

ThreadPoolKeepAliveTime

Thread pool holding time

- Time remaining in the thread pool when there are more idle threads in the thread pool than the minimum size

QueueServiceName

Container queue service name

<service name="PublishContainer">
	<attribute name="RegisterContainer">true</attribute>
	<attribute name="MaxServantNum">500</attribute>
	<attribute name="ThreadPoolCoreSize">8</attribute>
	<attribute name="ThreadPoolMaxSize">16</attribute>
	<attribute name="ThreadPoolKeepAliveTime">86400000</attribute>
	<attribute name="QueueServiceName">#ContainerQueue</attribute>
	<depends>
			<service name="ContainerQueue" ...>
				<attribute name="MaxCapacity">20000</attribute>
			</service>
	</depends>
	<depends>Log</depends>
	<depends>MonitorablePushMessageQueueService</depends>
</service>

ContainerQueue

Queue waiting to deliver messages from container

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="ContainerQueue">
	<attribute name="MaxCapacity">20000</attribute>
</service>

Provider

Message supply service

Attribute

Description

ServerBindAddress

Address to which Provider service will be bound

default: 0.0.0.0

Port

Port to which Provider service will be bound

default: 10082

SocketProviderProtocolName

Name of the protocol service to be used in Provider service

CertificateServiceName

Name of certificate service to be used in Provider

service

IsSSL

Whether to use SSL communication (under development)

<service name="Provider">
		<attribute name="ServerBindAddress">0.0.0.0</attribute>
		<attribute name="Port">10082</attribute>
		<attribute name="SocketProviderProtocolName">
			#SocketProviderJsonProtocol
		</attribute>
		<attribute name="CertificateServiceName">#CertificateService</attribute>
		<attribute name="IsSSL">false</attribute>
		<depends>SocketProviderJsonProtocol</depends>
		<depends>CertificateService</depends>
		<depends>SocketPushMessageProvider</depends>
		<depends>Log</depends>
</service>

SocketPushMessageProvider

Provider sub-service

Attribute

Description

SocketProviderProtocolName

Name of the protocol service to be used in Provider service

QueueServiceNames

Real-time and reliable message transmission-related main queue service name

<service name="SocketPushMessageProvider">
	<attribute name="SocketProviderProtocolName">
		#SocketProviderJsonProtocol
	</attribute>
	<attribute name="QueueServiceNames">
		#MonitorablePushMessageQueueService
	</attribute>
	<depends>MonitorablePushMessageQueueService</depends>
	<depends>SocketProviderJsonProtocol</depends>
	<depends>Log</depends>
</service>

SocketProviderJsonProtocol

Provider protocol service

Attribute

Description

ProviderVersion

provider protocol version

- Fixed value

AuthenticatorServiceName

Provider authentication service name

KeepAlive

Provider connect holding time (not used)

TimeOut

Write data timeout

MessageSize

Reliable message size limit

NodeManagerServiceName

Clustering service name

NotificationQueueServiceName

Mobile notification queue service name

<service name="SocketProviderJsonProtocol">
	<attribute name="ProviderVersion">2</attribute>
	<attribute name="AuthenticatorServiceName">
		#SocketProviderProtocolAuthenticator
	</attribute>
	<attribute name="KeepAlive">60000</attribute>
	<attribute name="TimeOut">30000</attribute>
	<attribute name="MessageSize">4000</attribute>
	<attribute name="InsertMsgQueueServiceName">#InsertMsgQueue</attribute>
	<attribute name="NodeManagerServiceName">#nodeManagerService</attribute>
	<attribute name="NotificationQueueServiceName">
		#NotificationQueueService
	</attribute>
	<depends>NotificationQueueService</depends>			
	<depends>InsertMsgQueue</depends>
	<depends>nodeManagerService</depends>			 
	<depends>Log</depends>
</service>

SocketProviderProtocolAuthenticator

Provider authentication service name

Attribute

Description

AuthenticatorClassName

Class name to be used for authentication

<service name="SocketProviderProtocolAuthenticator">
	<attribute name="AuthenticatorClassName">
		com.nexacro.xpush.fw.service.auth.UserProfileDummyAuthenticator
	</attribute>
</service>

PushMonitor

PushMonitor is a service that can perform monitoring related processing.

Attribute

Description

MonitorProtocolServiceName

Name of the protocol service to be used in monitoring service

MonitorableStreamProviderServiceName

Monitoring service output service name

ServerBindAddress

Address to bind in monitoring service

Port

Port to bind in monitoring service

default: 10083

QueueServiceNames

Real-time and reliable message transmission-related main queue service name

<service name="PushMonitor">
	<attribute name="MonitorProtocolServiceName">#MonitorProtocol</attribute>
	<attribute name="MonitorableStreamProviderServiceName">
		#ConsoleLogWriter
	</attribute>
	<attribute name="ServerBindAddress">0.0.0.0</attribute>
	<attribute name="Port">10083</attribute>
	<attribute name="QueueServiceNames">
		#MonitorablePushMessageQueueService</attribute>
	<depends>MonitorProtocol</depends>
	<depends>MonitorablePushMessageQueueService</depends>
	<depends>Log</depends>
</service>

MonitorProtocol

MonitorProtocol is a service that defines the protocol to be used in the PushMonitor service.

Attribute

Description

AuthenticatorServiceName

Monitoring authentication service name

DbcpServiceName

DB connection service name

<service name="MonitorProtocol">
	<attribute name="AuthenticatorServiceName">
		#MonitorProtocolAuthenticator
	</attribute>
	<attribute name="DbcpServiceName">#DbcpService</attribute>
		<depends>
			<service name="MonitorProtocolAuthenticator">
					<attribute name="AuthenticatorClassName">
			com.nexacro.xpush.fw.service.auth.UserPropertiesEncryptAuthenticator
					</attribute>
			</service>
		</depends>
		<depends>DbcpService</depends>
		<depends>Log</depends>
</service>

InsertMsgQueue

The queue to store messages supplied from Provider

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="InsertMsgQueue">
	<attribute name="MaxCapacity">20000</attribute>
</service>

SelectMsgQueue

Client unreceived message request queue

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="SelectMsgQueue">
	<attribute name="MaxCapacity">-1</attribute>
</service>

UpdateMsgQueue

Client receipt response message queue

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="InsertMsgQueue">
	<attribute name="MaxCapacity">-1</attribute>
</service>

InsertTopicMsgQueue

Client user registration and unreceived message number inquiry queue

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="InsertTopicMsgQueue">
	<attribute name="MaxCapacity">-1</attribute>
</service>

EtcQueue

Notification failure processor queue

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="EtcQueue">
	<attribute name="MaxCapacity">-1</attribute>
</service>

EtcService

Notification failure processor service

Attribute

Description

EtcHandlerThreadPoolCount

Notification failure processor handler thread pool number

EtcHandlerProcessingAtOnceCount

Number of data to be fetched at once from notification failure processor queue

ConnectionManagerServiceName

Client connection management service name

EtcQueueServiceName

Notification failure processor queue name

DbcpServiceName

DB connection service name

EtcProcessorName

Notification failure processor class name

<service name="EtcService">
	<attribute name="EtcHandlerThreadPoolCount">1</attribute>
	<attribute name="EtcHandlerProcessingAtOnceCount">1</attribute>
	<attribute name="ConnectionManagerServiceName">
		#connectionManagerService
	</attribute>
	<attribute name="EtcQueueServiceName">#EtcQueue</attribute>
	<attribute name="DbcpServiceName">#DbcpService</attribute>
	<attribute name="EtcProcessorName">
		com.nexacro.xpush.service.EtcService.EtcProcessorImpl
	</attribute>
</service>

RepositoryService

Service that receives reliable messages and stores them in the database

Attribute

Description

ProviderHandlerThreadPoolCount

Number of threads in the reliable message thread pool

The number of threads to operate the handler, which processes messages received from Message Provider, in the thread pool is set.

RequestHandlerThreadPoolCount

Number of threads in the unreceived message thread pool

The number of threads to operate the handler, which processes unreceived messages requested from Nexcaro Client, in the thread pool is set.

ResponseHandlerThreadPoolCount

Number of threads in the receipt confirmed message thread pool

The number of threads to operate the handler, which processes receipt confirmed messages from nexacro Client, in the thread pool is set.

ResponseHandlerBatchAtOnceCount

It is the number of batches running at once to DB for receipt confirmed and completed response received from Client.

ResponseHandlerProcessingAtOnceCount

It is the number of messages fetched at once from Repository Queue in which messages received from nexacro Client are accumulated.

ProviderHandlerProcessingAtOnceCount

It is the number of messages fetched at once from Repository Queue in which messages are received from Message Provider.

TopicHandlerThreadPoolCount

Number of threads in the topic processing thread pool

The number of threads to operate the handler, which processes protocols related to TOPIC from nexacro Client, in the thread pool is set.

useOfTrigger

Whether to use trigger (used only in Oracle)

IsRequestOnlyStateZero

Unreceived message request range

When a client requests an unreceived message, it refers to the MESSAGE_STATE column of the T_USER_MESSAGE table.

Basically, if the message status is 0, the message has not been received, if it is 1, the message is received, and if it is 2, the client has confirmed the receipt of the message.

limitFailCount

Limit number of consecutive failures

If the number of failures continuously exceeds, it is identified as a DB problem, and when DB processing fails, InsertMessageQueue is blocked so that no more messages are received.

retryDBPeriodMillis

DB recovery interval (Milliseconds)

The time interval to access the DB to determine whether it is normal or not when InsertMessageQueue is blocked

availablePeriod

The default available period for reliable messages is set (day)

maximumAvailablePeriod

The maximum available period for reliable messages is set (day)

<service name=" RepositoryService ">	
	<attribute name="ProviderHandlerThreadPoolCount">10</attribute>
	<attribute name="RequestHandlerThreadPoolCount">10</attribute>
	<attribute name="ResponseHandlerThreadPoolCount">10</attribute>
	<attribute name="ResponseHandlerProcessingAtOnceCount">1000</attribute>
	<attribute name="ProviderHandlerProcessingAtOnceCount">10</attribute>
	<attribute name="TopicHandlerThreadPoolCount">10</attribute>
    <attribute name="useOfTrigger">true</attribute>
    <attribute name="IsRequestOnlyStateZero">true</attribute>
	<attribute name="limitFailCount">100</attribute>
	<attribute name="retryDBPeriodMillis">60000</attribute>
	<attribute name="availablePeriod">-1</attribute>				
	<attribute name="maximumAvailablePeriod">-1</attribute>	
	<attribute name="PublisherServiceName">#Publisher</attribute>
	<attribute name="DbcpServiceName">#DbcpService</attribute>
	<attribute name="InsertMsgQueueServiceName">#InsertMsgQueue</attribute>
	<attribute name="SelectMsgQueueServiceName">#SelectMsgQueue</attribute>
	<attribute name="UpdateMsgQueueServiceName">#UpdateMsgQueue</attribute>
	<attribute name="InsertTopicMsgQueueServiceName">
			#InsertTopicMsgQueue
	</attribute>
	<attribute name="NodeManagerServiceName">
			#nodeManagerService
	</attribute>
	<attribute name="NotificationQueueServiceName">
			#NotificationQueueService
	</attribute>
	<depends>NotificationQueueService</depends>
	<depends>Publisher</depends>
	<depends>UpdateMsgQueue</depends>
	<depends>SelectMsgQueue</depends>
	<depends>InsertMsgQueue</depends>
	<depends>InsertTopicMsgQueue</depends>
	<depends>DbcpService</depends>
	<depends>Log</depends>
</service>

DbcpService

Service to manage database connection Pool

Attribute

Description

username

User ID to access the Database

password

User password to access the Database

connectUri

URI of the Database to be connected

jdbcClassName

Class Name of JDBC to be connected

maxActive

Maximum number of connections that can be used simultaneously for service

maxIdle

Maximum number of idle connections that can be maintained in the connection pool

minIdle

Minimum number of idle connections that can be maintained in the connection pool

maxWait

If the number of connections being used in the connection pool is the number of maxActive, it waits as much as maxWait. If there is no extra connection available even after maxWait, an error occurs.

validationQuery

The SQL query that will be used to validate connections from this pool before returning them to the caller. If specified, this query MUST be an SQL SELECT statement that returns at least one row.

testOnBorrow

Running test when getting a connection from Pool

testOnReturn

Running test when returning a connection to Pool

testWhileIdle

Whether to run a test on the idle connection in Pool

timeBetweenEvictionRunsMillis

The interval at which Evictor thread runs

Evictor thread running is disabled when -1

numTestsPerEvictionRun

Testing number of a connection in the pool

minEvictableIdleTimeMillis

Connection removing time by checking the idle time of connection

UserInfoEncryptorClassName

Class name that encrypts/decrypts DB access account information DB

isEncrypted

True if DB access account is encrypted and false otherwise

Please refer to the Apache Commons DBCP site for more information.

http://commons.apache.org/proper/commons-dbcp/configuration.html

<service name="DbcpService">    
    <attribute name="username">sa</attribute>
    <attribute name="password"></attribute>
    <attribute name="connectUri">jdbc:h2:tcp://localhost/~/test</attribute>
    <attribute name="jdbcClassName">org.h2.Driver</attribute>
    <attribute name="maxActive">10</attribute>
    <attribute name="maxIdle">0</attribute>
    <attribute name="minIdle">5</attribute>
    <attribute name="maxWait">-1</attribute>
    <attribute name="validationQuery">select 1 from dual</attribute>
    <attribute name="testOnBorrow">true</attribute>
    <attribute name="testOnReturn">false</attribute>
    <attribute name="testWhileIdle">false</attribute>
    <attribute name="timeBetweenEvictionRunsMillis">-1</attribute>
    <attribute name="numTestsPerEvictionRun">3</attribute>
    <attribute name="minEvictableIdleTimeMillis">1800000</attribute>
    <attribute name="UserInfoEncryptorClassName">com.nexacro.xpush.crypto.XPushPBEStringEncryptor</attribute>
    <attribute name="isEncrypted">false</attribute>
    <depends>Log</depends>
</service>

CronTabScheduleService

Service to set up scheduling

Attribute

Description

type="java.lang.String"

Minute (0-59) Hour (0-23) Date (1-31) Month (1-12) Day of the week (0-6)

* * * * * represents the minute, hour, date, month, and day of the week.

<service name=" CronTabScheduleService ">
	...
	<argument type="java.lang.String">
		0 0 1 * *
	</argument> <!-- Delete messages at 00:00 on the 1st of every month  -->
	...
</service>

Delete received messages

<invoke name="add">
   <!-- Delete messages at 00:00 on the 1st of every month  -->
   <argument type="java.lang.String">0 0 1 * *</argument> 
   <argument type="it.sauronsoftware.cron4j.Task">
      <object code="com.nexacro.xpush.service.schedule.DeleteMessageTask">
         <attribute name="dbcpService">
            <service-ref>#DbcpService</service-ref>
         </attribute>
      </object>             	 			
   </argument>
</invoke>

Delete expired messages

<invoke name="add">
   <!-- Delete messages that expire at 00:00 every day of every month  -->
   <argument type="java.lang.String">0 0 * * *</argument> 
   <argument type="it.sauronsoftware.cron4j.Task">
      <object code="com.nexacro.xpush.service.schedule.DeleteExpiredMessageTask">
         <attribute name="dbcpService">
            <service-ref>#DbcpService</service-ref>
         </attribute>
      </object>             	 			
   </argument>
</invoke>

Delete expired notifications

<invoke name="add">
 <!-- Delete notifications that expire at 00:00 on Sundays  -->
<argument type="java.lang.String">0 0 * * *</argument>
	<argument type="it.sauronsoftware.cron4j.Task">
<object code="com.nexacro.xpush.service.schedule.DeleteExpiredNotificationTask">
			<attribute name="dbcpService">
                   <service-ref>#DbcpService</service-ref>
            </attribute>
     </object>            
</argument>
</invoke>

HazelcastService

scale-out service

Attribute

Description

portAutoIncrement

Whether to activate the auto-increment function of the port number assigned to each HazelcastService.

default: false

port

The default port number to be used in HazelcastService.

default: 10087

joinTcpipEnable

Whether to connect to other X-PUSH Nodes through TCP/IP is set.

default: false

joinTcpipMember

X-PUSH Node information to be connected

ex) 127.0.0.1:10087

<service name="HazelcastService">
	<attribute name="portAutoIncrement">false</attribute>
	<attribute name="port">10087</attribute>
	<attribute name="publicAddress">172.10.12.120</attribute>
	<attribute name="joinTcpipEnable">false</attribute>
	<attribute name="joinTcpipMember" type ="java.lang.String[]">
		127.0.0.1:10087           
    </attribute>       
     <depends>Log</depends>      
 </service>

ConnectionManagerService

Client connection management service

Attribute

Description

lockTimeSec

Lock time to organize information shared between Nodes when one X-PUSH Node is down (Unit: Seconds)

HazelcastServiceName

scale-out service name

<service name="connectionManagerService" ... >
	<attribute name="lockTimeSec">120</attribute>
	<attribute name="HazelcastServiceName">#HazelcastService</attribute>
</service>

NodeManagerService

X-PUSH node management service

Attribute

Description

HazelcastServiceName

scale-out service name

<service name="nodeManagerService">
	<attribute name="HazelcastServiceName">#HazelcastService</attribute>
	<depends>HazelcastService</depends>
</service>

NotificationAttributeCommonService

Mobile notification attribute setting service

Attribute

Description

MultiAppWithProjectID

Whether to use multiple mobile apps configured as a project

badge

Whether to display the badge

isBadgeOnlyStateZero

Whether to display only values with a status value of 0 for unreceived messages on the badge

retries

Not used

<service name="NotificationAttributeCommonService">
	<attribute name="IsMultiAppWithProjectID">true</attribute>
	<attribute name="badge">true</attribute>
	<attribute name="IsBadgeOnlyStateZero">true</attribute>
	<attribute name="retries">3</attribute>
</service>

NotificationBuilderService

Mobile notification generation service

Attribute

Description

InsertBatchAtOnceCount

Number of inserts at once in the T_Notification table

UpdateHandlerBatchAtOnceCount

Number of mobile notification results to be updated at once in the T_Notification table

UpdateHandlerProcessingAtOnceCount

Number of fetches at once from the update queue

NotificationQueueServiceName

Notification queue service name

ConnectionManagerServiceName

Client connection management service name

DbcpServiceName

DB connection service name

RepositoryServiceName

Storage service name

ApnsNotifiableQueueServiceName

APNs notification queue service name

GcmNotifiableQueueServiceName

FCM notification queue service name

UpdateNotificationQueueServiceName

Mobile notification result update queue service name

NotificationFormatterName

Mobile notification message conversion name

NotificationAttributeCommonServiceName

Mobile notification attribute setting service name

<service name="NotificationBuilderService">
	<attribute name="insertBatchAtOnceCount">1000</attribute>
	<attribute name="UpdateHandlerBatchAtOnceCount">1000</attribute>
	<attribute name="UpdateHandlerProcessingAtOnceCount">1000</attribute>
	<attribute name="NotificationQueueServiceName">
		#NotificationQueueService
	</attribute>
	<attribute name="ConnectionManagerServiceName">
		#connectionManagerService
	</attribute>
	<attribute name="DbcpServiceName">#DbcpService</attribute>
	<attribute name="RepositoryServiceName">#RepositoryService</attribute>
	<attribute name="ApnsNotifiableQueueServiceName">
		#ApnsNotifiableQueueService
	</attribute>
	<attribute name="GcmNotifiableQueueServiceName">
		#GcmNotifiableQueueService
	</attribute>
	<attribute name="UpdateNotificationQueueServiceName">
		#UpdateNotificationQueueService
	</attribute>	
	<attribute name="NotificationFormatterName">
	com.nexacro.xpush.service.notification.NotificationFormatterPropertiesImpl
	</attribute>
	<depends>NotificationQueueService</depends>
	<depends>connectionManagerService</depends>
	<depends>DbcpService</depends>
	<depends>RepositoryService</depends>
	<depends>ApnsNotifiableQueueService</depends>
	<depends>GcmNotifiableQueueService</depends>
	<depends>UpdateNotificationQueueService</depends>
	<attribute name="NotificationAttributeCommonServiceName">
		#NotificationAttributeCommonService</attribute>
	<depends>NotificationAttributeCommonService</depends>
</service>

ApnsInfoService

APNs certificate information service

Attribute

Description

ProjectID

Project name

AppInfo

Apns certificate information

BundleID = path, password, keyStoreType, production

<service name="IOS_PRO#2">
	<attribute name="ProjectID">PRO#2</attribute>
	<attribute name="AppInfo" type ="java.util.HashMap">
		com.nexacro.apns=C:\tmp\apns.p12,password,PKCS12,false,
     </attribute>
</service>

ApnsNotiferService

APNs notification service

Attribute

Description

ApnsInfo

Certificate service name

NotificationAttributeCommonServiceName

Mobile notification attribute service name

ApnsConnectorName

ApnsConnector class

feedbackService

Whether to activate Apns feedback service

sound

Notification sound

ApnsMessageQueueServiceName

Apns queue service name

DbcpServiceName

DB connection service name

ApnsProviderThreadPoolCount

Apns Message Provider thread pool number

failOver

Mobile notification failure processor

nextQueueServiceName

Mobile notification failure processor queue service name

UpdateNotificationQueueServiceName

Mobile notification result update queue service name

<service name="ApnsNotifierService">
	<attribute name="ApnsInfo">
			#IOS_PRO#2
    </attribute>
    <attribute name="NotificationAttributeCommonServiceName">
		#NotificationAttributeCommonService
	</attribute>
	<attribute name="ApnsConnectorName">
		com.nexacro.xpush.service.notification.connector.XPushApnsConnector
	</attribute>
	<attribute name="feedbackService">true</attribute>
	<attribute name="sound">default</attribute>
	<attribute name="ApnsMessageQueueServiceName">
		#ApnsNotifiableQueueService
	</attribute>
	<attribute name="DbcpServiceName">#DbcpService</attribute>
	<attribute name="ApnsProviderThreadPoolCount">1</attribute>
	<attribute name="failOver">true</attribute>
	<attribute name="nextQueueServiceName">#EtcQueue</attribute>
	<attribute name="UpdateNotificationQueueServiceName">
		#UpdateNotificationQueueService
	</attribute>	
	<depends>UpdateNotificationQueueService</depends>
	<depends>ApnsNotifiableQueueService</depends>
	<depends>DbcpService</depends>
	<depends>NotificationAttributeCommonService</depends>
</service>

FcmInfoService

APNs certificate information service

Attribute

Description

ProjectID

Project name

ApiKey

FCM project ApiKey

SenderID

FCM sender ID

<service name="ANDROID_PRO#1">
	<attribute name="ProjectID">PRO#1</attribute>
	<attribute name="Apikey">AIzaSyAbsdAxWAIZAXnTR12mbAhe6GUH3yyIx7A</attribute>	
	<attribute name="SendID">678520125789</attribute>						
</service>

GcmNotifierService

FCM notification service

Attribute

Description

FcmInfo

FCM project service name

NotificationAttributeCommonServiceName

Mobile notification attribute service name

GcmConnectorName

FcmConnector class

GcmMessageQueueServiceName

FCM queue service name

DbcpServiceName

DB connection service name

GcmProviderThreadPoolCount

FCM Message Provider thread pool number

failOver

Mobile notification failure processor

nextQueueServiceName

Mobile notification failure processor queue service name

UpdateNotificationQueueServiceName

Mobile notification result update queue service name

<service name="GcmNotifierService">
	<attribute name="FcmInfo">
		#ANDROID_PRO#1
	</attribute>
    <attribute name="NotificationAttributeCommonServiceName">
		#NotificationAttributeCommonService
	</attribute>
	<attribute name="GcmConnectorName">
		com.nexacro.xpush.service.notification.connector.GcmHttpConnector
	</attribute>	
	<attribute name="GcmMessageQueueServiceName">
		#GcmNotifiableQueueService
	</attribute>
	<attribute name="DbcpServiceName">#DbcpService</attribute>
	<attribute name="GcmProviderThreadPoolCount">1</attribute>
	<attribute name="failOver">true</attribute>
	<attribute name="nextQueueServiceName">#EtcQueue</attribute>
	<attribute name="UpdateNotificationQueueServiceName">
		#UpdateNotificationQueueService
	</attribute>	
	<depends>UpdateNotificationQueueService</depends>
	<depends>GcmNotifiableQueueService</depends>
	<depends>DbcpService</depends>
	<depends>NotificationAttributeCommonService</depends>
</service>

NotificationQueueService

Mobile notification queue service

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="NotificationQueueService">
	<attribute name="MaxCapacity">-1</attribute>
</service>

GcmNotifiableQueueService

FCM mobile notification queue service

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="GcmNotifiableQueueService">
	<attribute name="MaxCapacity">-1</attribute>
</service>

ApnsNotifiableQueueService

Apns notification queue service

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="ApnsNotifiableQueueService">
	<attribute name="MaxCapacity">-1</attribute>
</service>

UpdateNotificationQueueService

Mobile notification queue service

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="UpdateNotificationQueueService">
	<attribute name="MaxCapacity">-1</attribute>
</service>

UpdateNotificationQueueService

Mobile notification queue service

Attribute

Description

MaxCapacity

Maximum capacity of the queue (number)

<service name="UpdateNotificationQueueService">
	<attribute name="MaxCapacity">-1</attribute>
</service>

Log

Log service

In XPUSH, logs are implemented with the jp.osssc.service.log.Logger interface.

Attribute

Description

MessageRecordFactoryServiceName

Message record factory service name

DebugEnabled

Logger.debug() Whether to output the log

SystemDebugEnabled

Whether to perform category logging of LogServiceMBean.SYSTEM_DEBUG_CATEGORY

SystemInfoEnabled

Whether to perform category logging of LogServiceMBean.SYSTEM_INFO_CATEGORY

SystemWarnEnabled

Whether to perform category logging of LogServiceMBean.SYSTEM_WARN_CATEGORY

SystemErrorEnabled

Whether to perform category logging of LogServiceMBean.SYSTEM_ERROR_CATEGORY

SystemFatalEnabled

Whether to perform category logging of LogServiceMBean.SYSTEM_FATAL_CATEGORY

CategoryServiceNames

Category service name

<service name="Log">
	<attribute name="MessageRecordFactoryServiceName">
			#MessageRecordFactory
	</attribute>
	<attribute name="DebugEnabled">true</attribute>
	<attribute name="SystemDebugEnabled">false</attribute>
	<attribute name="SystemInfoEnabled">false</attribute>
	<attribute name="SystemWarnEnabled">true</attribute>
	<attribute name="SystemErrorEnabled">true</attribute>
	<attribute name="SystemFatalEnabled">true</attribute>
	<attribute name="CategoryServiceNames">
			#ConsoleLogger
			#FileLogger
			#LogDispatcher
	</attribute>
	...
</service>

MessageRecordFactory

Message record factory service

Attribute

Description

MessageRecordClassName

Message record class name

AllowOverrideMessage

Whether to allow Overridden messages

MessageDefines

Message log definition

- Log level = range, category

SecretMode

Whether to mask characters in messages containing secret characters

<service name="MessageRecordFactory">
	<attribute name="MessageRecordClassName">
		jp.ossc.nimbus.service.log.LogMessageRecordImpl
	</attribute>
	<attribute name="AllowOverrideMessage">true</attribute>
	<attribute name="MessageDefines">
		DEBUG=@0,40,File:Console:UserLogProcessor
		TRACE=@0,30,File:Console:UserLogProcessor
		INFO=@0,20,File:Console:UserLogProcessor
		WARN=@0,10,File:Console:UserLogProcessor
		ERROR=@0,0,File:Console:UserLogProcessor
	</attribute>
	<attribute name="SecretMode">true</attribute>
</service>

ConsoleLogger

Log message setting service displayed on the console

Attribute

Description

CategoryName

Category name

PriorityRange

Log range

MessageWriterServiceName

Message writer service name

WritableRecordFactoryServiceName

WritableRecordFactoryService name

ConsoleWritableRecordFactory

Attribute

Description

Format

Log format

DateFormat

Log date format

<service name="ConsoleLogger">
	<attribute name="CategoryName">Console</attribute>
	<attribute name="PriorityRange">0:40</attribute>
	<attribute name="MessageWriterServiceName">#ConsoleLogWriter</attribute>
	<attribute name="WritableRecordFactoryServiceName">
		#ConsoleWritableRecordFactory
	</attribute>
	<depends>#ConsoleLogWriter</depends>
	<depends>
		<service name="ConsoleWritableRecordFactory">
				<attribute name="Format">[%DATE%][%CODE%] %MESSAGE%</attribute>
				<attribute name="DateFormat">yyyy/MM/dd HH:mm:ss.SSS</attribute>
		</service>
	</depends>
</service>

FileLogger

Log message setting service stored in the file

Attribute

Description

CategoryName

Category name

PriorityRange

Log range

MessageWriterServiceName

Message writer service name

WritableRecordFactoryServiceName

WritableRecordFactoryService name

FileWritableRecordFactory

Attribute

Description

Format

Log format

DateFormat

Log date format

<service name="FileLogger">
	<attribute name="CategoryName">File</attribute>
	<attribute name="PriorityRange">0:40</attribute>
	<attribute name="MessageWriterServiceName">#FileLogWriter</attribute>
	<attribute name="WritableRecordFactoryServiceName">
		#FileWritableRecordFactory
	</attribute>
	<depends>#FileLogWriter</depends>
	<depends>
		<service name="FileWritableRecordFactory">
				<attribute name="Format">[%DATE%][%CODE%] %MESSAGE%</attribute>
				<attribute name="DateFormat">yyyy/MM/dd HH:mm:ss.SSS</attribute>
		</service>
	</depends>
</service>

LogDispatcher

User-defined log service

Attribute

Description

CategoryName

Category name

PriorityRange

Log range

MessageWriterServiceName

Message writer service name

WritableRecordFactoryServiceName

WritableRecordFactoryService name

LogFactory

Attribute

Description

Format

Log format

DateFormat

Log date format

<service name="LogDispatcher">
	<attribute name="CategoryName">UserLogProcessor</attribute>
	<attribute name="PriorityRange">0:20</attribute>
	<attribute name="MessageWriterServiceName">#ConsoleLogWriter</attribute>
	<attribute name="WritableRecordFactoryServiceName">
		#LogFactory
	</attribute>
	<depends>
		<service name="LogFactory">
				<attribute name="Format">[%DATE%][%CODE%] %MESSAGE%</attribute>
				<attribute name="DateFormat">yyyy/MM/dd HH:mm:ss.SSS</attribute>
		</service>
	</depends>
</service>

FileLogWriter

Log file setting service

Attribute

Description

LogPath

Log location

LogFile

Log file name

DatePattern

Log file name date pattern

ex) xpush.log.20190725

Encoding

Log file content encoding

Append

Whether to append log file content

BufferedIO

Buffered Stream IO

<service name="FileLogWriter">
	<attribute name="LogPath">log</attribute>
	<attribute name="LogFile">xpush.log</attribute>
	<attribute name="DatePattern">'.'yyyy-MM-dd</attribute>
	<attribute name="Encoding">utf-8</attribute>
	<attribute name="Append">true</attribute>
	<attribute name="BufferedIO">false</attribute>
</service>

ConsoleLogWriter

Log console setting service

MonitorLogWriter

XPUSH monitoring status log output service

Attribute

Description

IsRecord

Whether to record file

LogPath

Log location

LogFile

Log file name

DatePattern

Log file name date pattern

ex) xpush.log.20190725

Encoding

Log file content encoding

Append

Whether to append log file content

BufferedIO

Buffered Stream IO

RecordingPeriod

Recording cycle

PushMonitorServiceName

PushMonitor service name

<service name="MonitorLogWriter">
	<attribute name="IsRecord">true</attribute>
	<attribute name="LogPath">log/status</attribute>
	<attribute name="LogFile">xpush.status</attribute>
	<attribute name="DatePattern">'.'yyyy-MM-dd</attribute>
	<attribute name="Encoding">utf-8</attribute>
	<attribute name="Append">true</attribute>
	<attribute name="BufferedIO">false</attribute>	
	<attribute name="RecordingPeriod">5000</attribute>
	<attribute name="PushMonitorServiceName">#PushMonitor</attribute>
</service>