Diffusion
5.9
User Guide
Welcome
Introduction
What's new in Diffusion 5.9?
What was new in Diffusion 5.8?
What was new in Diffusion 5.7?
What was new in Diffusion 5.6?
What was new in Diffusion 5.1?
What was new in Diffusion 5.0?
Quick Start Guide
Get Diffusion
Install Diffusion
Start the Diffusion server
Default configuration
The Diffusion monitoring console
Develop a publishing client
Develop a subscribing client
Resources
Design Guide
Support
System requirements
Platform support
Feature support
Protocol support
Browser support
Browser limitations
WebSocket limitations
Cross-origin resource sharing limitations
Browser connection limitations
Designing your data model
Topic tree
Topic naming
Topic selectors in the Unified API
Regular expressions
Topic selectors in the Classic API (deprecated)
Topics
JSON topics
Binary topics
Single value topics
Record topics
Metadata
Stateless topics
Advanced topics
Routing topics
Slave topics
DEPRECATED: Custom topics
DEPRECATED: Topic notify topics
DEPRECATED: Child list topics
DEPRECATED: Paged string topics
DEPRECATED: Paged record topics
DEPRECATED: Service topics
Service topic data
DEPRECATED: Protocol buffer topics
Publication
Publishing data
Subscribing to topics
Messaging
Advanced usage
Conflation
Types of message conflation
How conflation works
DEPRECATED: Distributing and viewing data as pages
Designing your solution
Servers
Fan-out
Using missing topic notifications with fan-out
High availability
Session replication
Topic replication
Failover of active update sources
Clients
Client types
Using clients
Using clients for control
User-written components
Publishers
Other user-written components
Third party components
Load balancers
Web servers
Push notification networks
JMS
Example solutions
Simple solution
A solution using clients
Scalable and resilient solution
Securing your solution
Role-based authorization
Permissions
Pre-defined roles
Authentication
User-written authentication handlers
System authentication handler
Pre-defined users
DEPRECATED: Authorization handlers
Securing the console
Developer Guide
Developing a client
Best practice
Feature support
Getting started
JavaScript
Start subscribing
Start publishing
Apple
Start subscribing
Start publishing
Android
Start subscribing
Start publishing
Java
Start subscribing
Start publishing
.NET
Start subscribing
Start publishing
C
Start subscribing
Start publishing
Connecting to the Diffusion server
Connecting basics
Connecting securely
Connect with a principal and credentials
Connecting through an HTTP proxy
Connecting through a load balancer
Reconnect
Detecting connection problems
Specifying a reconnection strategy
Session failover
Ping the Diffusion server
Change your principal and credentials
Session properties
Session filtering
Receiving data from topics
Example: Subscribe to a topic
Example: Subscribe to a JSON topic
Example: Fetch topic state
Managing topics
Example: Create a topic
Creating a metadata definition for a record topic
Handling subscriptions to missing topics
Example: Receive missing topic notifications
Listening for topic events
Removing topics with sessions
Updating topics
Example: Make exclusive updates to a topic
Example: Make non-exclusive updates to a topic
Managing subscriptions
Example: Subscribe other clients to topics
Example: Receive notifications when a client subscribes to a routing topic
Messaging to topic paths
Example: Send a message to a topic path
Example: Send a request message to the Push Notification Bridge
Messaging to clients
Example: Handle messages and send messages to sessions
Example: Use session property filters with messaging
Authenticating clients
Example: Register an authentication handler
Developing a control authentication handler
Developing a composite control authentication handler
Updating the system authentication store
DSL syntax: system authentication store
Example: Update the system authentication store
Updating the security store
DSL syntax: security store
Example: Update the security store
Managing clients
Handling client queues
DEPRECATED: Classic API
DEPRECATED: Java Client Classic API
DEPRECATED: .NET Classic API
.NET Client Classic API
Connection events
DEPRECATED: JavaScript Classic API
Using the JavaScript Classic API
Reconnecting with the JavaScript Classic API
Service topic data
Paged topic data
DEPRECATED: ActionScript Classic API
Using the ActionScript Classic API
Reconnecting with the ActionScript Classic API
Logging
DEPRECATED: Silverlight Classic API
Using the Silverlight Classic API
DEPRECATED: iOS Classic API
Getting started
API
Using
Examples
DEPRECATED: Android Classic API
Getting started
Using
Examples
DEPRECATED: C Classic API
Using the C Classic API
diffusion-wrapper.js
How to use Diffusion wrapper
Developing a publisher
Publisher basics
Defining publishers
Loading publisher code
Load publishers by using the API
Starting and stopping publishers
Publisher topics
Receiving and maintaining data
Publishing and sending messages
Publisher notifications
Client handling
Publisher properties
Using concurrent threads
Publisher logging
DEPRECATED: Server connections
General utilities
Writing a publisher
Creating a Publisher class
Publisher startup
Data state
Data inputs
Handling client subscriptions
Publishing messages
Stateful topics
Stateless topics
Paged topics
DEPRECATED: Topic locking
Handling clients
Publisher closedown
Testing a publisher
Client queues
Queue enquiries
Maximum queue depth
Queue notification thresholds
Tidy on unsubscribe
Filtering queued messages
Client Geo and WhoIs information
The Diffusion WhoIs service
Client groups
Client notifications
Adding a ClientListener
Using DefaultClientListener
Developing other components
Local authentication handlers
Developing a local authentication handler
Developing a composite authentication handler
Push Notification Bridge persistence plugin
Building with Maven
Build client applications
Build publishers
Building with mvndar
Build server application code
Testing
DEPRECATED: Flex/Flash client
DEPRECATED: Java client test tool
DEPRECATED: JavaScript client test tool
Silverlight client test tool
Stress test tuning
Stress test
Benchmarking suite
Test tools
Administrator Guide
Installing
System requirements
Using the graphical installer
Using the headless installer
Using Red Hat Package Manager
Using Docker
Next steps with Docker
The Diffusion license
License restrictions
Updating your license file
Installed files
Verifying your installation
Configuring
XML configuration
Programmatic configuration
Using the configuration API
The configuration tree
Configuring the Diffusion server
Configuring fan-out
Configuring conflation
Configuring authentication handlers
Configuring performance
Server.xml
Configuring connectors
Connectors.xml
Configuring user security
Security.store
SystemAuthentication.store
Configuring logging
Configuring default logging
Logs.xml
Configuring log4j2
Log4j2.xml
Logging using another SLF4J implementation
Configuring JMX
Configuring the Diffusion JMX connector server
Configuring a remote JMX server connector
Configuring a local JMX connector server
Management.xml
Configuring the JMX adapter
Publishers.xml
Configuring replication
Configuring the Diffusion server to use replication
Configuring your datagrid provider
Replication.xml
Configuring the Diffusion web server
Configuring security
WebServer.xml
Aliases.xml
ConnectionValidationPolicy.xml
Env.xml
Mime.xml
Publishers.xml
Statistics.xml
SubscriptionValidationPolicy.xml
Additional XML files
Starting the server
Running from within a Java application
Deploying publishers
Classic deployment
Hot deployment
Deployment methods
Load balancers
Routing strategies
Monitoring available Diffusion servers
Compositing URL spaces
SSL offloading
Resilience
Common issues
Web servers
Diffusion web server
Server-side processing
Status page
Hosting Diffusion web clients
Running the Diffusion server inside an application server
Example: Tomcat
Other considerations
Cross domain policies
Flash security model
Silverlight security model
JavaScript security model
Push Notification Bridge
Configuring your Push Notification Bridge
PushNotifications.xml
Getting an Apple certificate
Getting a Google API key
Running the Push Notification Bridge
JSON formats
Request and response
Push notification
JMS adapter
Transforming messages
Publishing
Sending messages
Using JMS request-response services
Configuring the JMS adapter
Example: Configuring the Diffusion connection
Example: Configuring JMS providers
Example: Configuring topics
Example: Configuring pub-sub
Example: Configuring messaging
Example: Configuring JMS services
JMSAdapter.xml
Running the JMS adapter
DEPRECATED: Legacy JMS adapter
DEPRECATED: Configuring the legacy JMS adapter version 5.1
Configuring the JMS Adapter v5.1
JMSAdapter51.xml
DEPRECATED: JMS adapter data flow examples
DEPRECATED: Receiving data from JMS
DEPRECATED: Sending messages to JMS
DEPRECATED: Processing a request-reply message with a Diffusion client
DEPRECATED: Sending a request-reply message from a Diffusion client
Network security
Going to production
Pre-production testing
Setting up your test environment
Understanding production usage conditions
Creating production usage conditions
Types of testing
Testing your security
Tools
Planning for production
Deploying to your production environment
Managing and monitoring
JMX
Using Java VisualVM
Using JConsole
Detecting deadlocks with JConsole
MBeans
AggregateStatistics
AuthorisationManager
ClientStatistics
Connector
JMXAdapter
Log
Multiplexer
MultiplexerManager
Publisher
Server
StatisticsService
ThreadPool
VirtualHost
The JMX adapter
Statistics
Configuring statistics
Diffusion monitoring console
DEPRECATED: Introspector
Supported platforms.
Installing from update site
Installing subsequent plugin updates.
Uninstalling
Opening the Diffusion perspective
Adding servers
Opening servers
Exploring the topics
Getting topic values
Configuring columns
Ping servers
Count topics
Using the clients view
Ping
Statistics
Topics
Logging
Server logs
Property obfuscator
Logging at the Diffusion server
Logging back-end
Logging reference
Log messages
PUSH-000001
PUSH-000002
PUSH-000003
PUSH-000004
PUSH-000005
PUSH-000006
PUSH-000007
PUSH-000008
PUSH-000009
PUSH-000010
PUSH-000011
PUSH-000012
PUSH-000013
PUSH-000014
PUSH-000015
PUSH-000016
PUSH-000017
PUSH-000018
PUSH-000019
PUSH-000020
PUSH-000021
PUSH-000022
PUSH-000023
PUSH-000024
PUSH-000025
PUSH-000026
PUSH-000027
PUSH-000028
PUSH-000035
PUSH-000036
PUSH-000037
PUSH-000038
PUSH-000039
PUSH-000040
PUSH-000041
PUSH-000042
PUSH-000043
PUSH-000044
PUSH-000045
PUSH-000046
PUSH-000047
PUSH-000049
PUSH-000050
PUSH-000051
PUSH-000052
PUSH-000054
PUSH-000055
PUSH-000056
PUSH-000057
PUSH-000058
PUSH-000061
PUSH-000062
PUSH-000064
PUSH-000065
PUSH-000070
PUSH-000072
PUSH-000074
PUSH-000075
PUSH-000076
PUSH-000077
PUSH-000078
PUSH-000079
PUSH-000080
PUSH-000081
PUSH-000082
PUSH-000083
PUSH-000085
PUSH-000086
PUSH-000087
PUSH-000089
PUSH-000090
PUSH-000091
PUSH-000092
PUSH-000093
PUSH-000094
PUSH-000095
PUSH-000097
PUSH-000098
PUSH-000099
PUSH-000100
PUSH-000142
PUSH-000144
PUSH-000145
PUSH-000146
PUSH-000147
PUSH-000150
PUSH-000151
PUSH-000152
PUSH-000153
PUSH-000154
PUSH-000155
PUSH-000156
PUSH-000157
PUSH-000158
PUSH-000159
PUSH-000160
PUSH-000161
PUSH-000162
PUSH-000163
PUSH-000164
PUSH-000165
PUSH-000166
PUSH-000167
PUSH-000168
PUSH-000169
PUSH-000173
PUSH-000174
PUSH-000175
PUSH-000177
PUSH-000178
PUSH-000180
PUSH-000181
PUSH-000182
PUSH-000183
PUSH-000185
PUSH-000187
PUSH-000188
PUSH-000190
PUSH-000191
PUSH-000193
PUSH-000194
PUSH-000195
PUSH-000196
PUSH-000197
PUSH-000198
PUSH-000199
PUSH-000200
PUSH-000201
PUSH-000202
PUSH-000203
PUSH-000204
PUSH-000205
PUSH-000206
PUSH-000207
PUSH-000208
PUSH-000209
PUSH-000210
PUSH-000211
PUSH-000212
PUSH-000214
PUSH-000215
PUSH-000216
PUSH-000226
PUSH-000227
PUSH-000228
PUSH-000229
PUSH-000230
PUSH-000231
PUSH-000232
PUSH-000233
PUSH-000234
PUSH-000235
PUSH-000236
PUSH-000239
PUSH-000241
PUSH-000242
PUSH-000244
PUSH-000245
PUSH-000246
PUSH-000247
PUSH-000249
PUSH-000250
PUSH-000251
PUSH-000252
PUSH-000253
PUSH-000254
PUSH-000255
PUSH-000256
PUSH-000257
PUSH-000258
PUSH-000260
PUSH-000261
PUSH-000262
PUSH-000263
PUSH-000264
PUSH-000265
PUSH-000266
PUSH-000267
PUSH-000268
PUSH-000269
PUSH-000270
PUSH-000272
PUSH-000273
PUSH-000274
PUSH-000275
PUSH-000282
PUSH-000283
PUSH-000284
PUSH-000285
PUSH-000286
PUSH-000287
PUSH-000288
PUSH-000289
PUSH-000290
PUSH-000292
PUSH-000293
PUSH-000294
PUSH-000295
PUSH-000296
PUSH-000298
PUSH-000299
PUSH-000300
PUSH-000301
PUSH-000302
PUSH-000303
PUSH-000306
PUSH-000309
PUSH-000310
PUSH-000311
PUSH-000312
PUSH-000313
PUSH-000316
PUSH-000317
PUSH-000318
PUSH-000319
PUSH-000320
PUSH-000321
PUSH-000322
PUSH-000323
PUSH-000324
PUSH-000326
PUSH-000327
PUSH-000328
PUSH-000331
PUSH-000332
PUSH-000333
PUSH-000334
PUSH-000335
PUSH-000336
PUSH-000337
PUSH-000338
PUSH-000339
PUSH-000340
PUSH-000341
PUSH-000342
PUSH-000343
PUSH-000344
PUSH-000345
PUSH-000346
PUSH-000347
PUSH-000348
PUSH-000349
PUSH-000350
PUSH-000351
PUSH-000352
PUSH-000353
PUSH-000354
PUSH-000355
PUSH-000356
PUSH-000357
PUSH-000358
PUSH-000359
PUSH-000360
PUSH-000361
PUSH-000362
PUSH-000363
PUSH-000364
PUSH-000365
PUSH-000366
PUSH-000367
PUSH-000368
PUSH-000369
PUSH-000370
PUSH-000372
PUSH-000373
PUSH-000374
PUSH-000375
PUSH-000376
PUSH-000377
PUSH-000378
PUSH-000379
PUSH-000380
PUSH-000381
PUSH-000382
PUSH-000383
PUSH-000384
PUSH-000385
PUSH-000386
PUSH-000387
PUSH-000388
PUSH-000389
PUSH-000390
PUSH-000391
PUSH-000392
PUSH-000393
PUSH-000394
PUSH-000395
PUSH-000396
PUSH-000397
PUSH-000399
PUSH-000400
PUSH-000401
PUSH-000402
PUSH-000404
PUSH-000406
PUSH-000408
PUSH-000409
PUSH-000410
PUSH-000411
PUSH-000412
PUSH-000413
PUSH-000414
PUSH-000415
PUSH-000416
PUSH-000417
PUSH-000420
PUSH-000421
PUSH-000422
PUSH-000423
PUSH-000424
PUSH-000426
PUSH-000428
PUSH-000429
PUSH-000430
PUSH-000431
PUSH-000432
PUSH-000433
PUSH-000434
PUSH-000435
PUSH-000436
PUSH-000437
PUSH-000439
PUSH-000440
PUSH-000441
PUSH-000443
PUSH-000444
PUSH-000445
PUSH-000446
PUSH-000447
PUSH-000448
PUSH-000450
PUSH-000452
PUSH-000453
PUSH-000456
PUSH-000457
PUSH-000458
PUSH-000459
PUSH-000460
PUSH-000461
PUSH-000462
PUSH-000464
PUSH-000465
PUSH-000466
PUSH-000467
PUSH-000468
PUSH-000469
PUSH-000470
PUSH-000472
PUSH-000473
PUSH-000474
PUSH-000475
PUSH-000476
PUSH-000477
PUSH-000478
PUSH-000479
PUSH-000480
PUSH-000481
PUSH-000482
PUSH-000483
PUSH-000484
PUSH-000485
PUSH-000486
PUSH-000487
PUSH-000488
PUSH-000489
PUSH-000490
PUSH-000491
PUSH-000492
PUSH-000493
PUSH-000494
PUSH-000495
PUSH-000496
PUSH-000497
PUSH-000498
PUSH-000500
PUSH-000501
PUSH-000503
PUSH-000504
PUSH-000506
PUSH-000507
PUSH-000508
PUSH-000510
PUSH-000511
PUSH-000512
PUSH-000513
PUSH-000514
PUSH-000515
PUSH-000516
PUSH-000518
PUSH-000519
PUSH-000520
PUSH-000521
PUSH-000523
PUSH-000524
PUSH-000525
PUSH-000527
PUSH-000528
PUSH-000529
PUSH-000530
PUSH-000531
PUSH-000532
PUSH-000533
PUSH-000534
PUSH-000535
PUSH-000536
PUSH-000537
PUSH-000538
PUSH-000539
PUSH-000541
PUSH-000542
PUSH-000543
PUSH-000544
PUSH-000545
PUSH-000546
PUSH-000547
PUSH-000548
PUSH-000549
PUSH-000550
PUSH-000551
PUSH-000552
PUSH-000553
PUSH-000554
PUSH-000555
PUSH-000557
PUSH-000558
PUSH-000559
PUSH-000560
PUSH-000561
PUSH-000562
PUSH-000563
PUSH-000564
PUSH-000565
PUSH-000566
PUSH-000567
PUSH-000569
PUSH-000570
PUSH-000571
PUSH-000572
PUSH-000573
PUSH-000574
PUSH-000575
PUSH-000576
PUSH-000577
PUSH-000578
PUSH-000579
PUSH-000581
PUSH-000582
PUSH-000583
PUSH-000584
PUSH-000585
PUSH-000586
PUSH-000587
PUSH-000588
PUSH-000589
PUSH-000590
PUSH-000591
PUSH-000592
PUSH-000593
PUSH-000594
PUSH-000595
PUSH-000596
PUSH-000597
PUSH-000598
PUSH-000599
PUSH-000600
PUSH-000601
PUSH-000602
PUSH-000603
PUSH-000604
PUSH-000605
PUSH-000607
PUSH-000608
PUSH-000609
PUSH-000610
PUSH-000611
PUSH-000612
PUSH-000613
PUSH-000614
PUSH-000615
PUSH-000616
PUSH-000617
PUSH-000618
PUSH-000619
PUSH-000620
PUSH-000621
PUSH-000622
PUSH-000623
PUSH-000624
PUSH-000625
PUSH-000626
PUSH-000627
PUSH-000628
PUSH-000629
PUSH-000630
PUSH-000631
PUSH-000632
PUSH-000633
PUSH-000634
PUSH-000635
PUSH-000636
PUSH-000637
PUSH-000638
PUSH-000640
PUSH-000642
PUSH-000644
PUSH-000645
PUSH-000646
Connection counts
Integration with Splunk
Tuning
Concurrency
Buffer sizing
Message sizing
Client queues
Client multiplexers
Connectors
Thread pools
Client reconnection
Client failover
Client throttling
Java memory usage
Platform-specific issues
Socket issues
Windows
Linux
UNIX
Publisher design
Demos
Demos
Building the demos using mvndar
Tools
Tools for Amazon Elastic Compute Cloud (EC2)
Tools for Joyent
Upgrading Guide
Interoperability
Upgrading from 4.x to 5.1
Upgrading from 5.1 to 5.5
Upgrading from 5.5 to 5.6
Upgrading from 5.6 to 5.7
Upgrading from 5.7 to 5.8
Upgrading from 5.8 to 5.9
Upgrading to a new patch release
Known issues in Diffusion 5.9
Appendices
Document conventions
Glossary
A
acknowledgment
API
APNS
APR
ASCII
C
callback
CBOR
certify
client
client library
conflation
connector
consume
CORS
CPU
credentials
CSR
CSS
D
DAR file
delimiter
delta
Diffusion
dirty
DLL
DOM
DMZ
DPT
E
EULA
F
feature
fetch
flow control
field
functional topic
G
GBE
GCM
global-scoped permission
GUI
H
handler
HDD
HTML
HTTP
I
IDE
ISAPI
initial topic load
J
JAR
JDK
JMS
JMX
JRE
JSON
JVM
L
LDAP
line
listener
M
message
message queue
metadata
multicast
N
NAT
NIC
NIO
notification
P
paged topic
PNG
permission
PID
ping
PDF
primary server
principal
protocol
publisher
publishing topic
push notification destination
Q
message queue
R
RAID
RAM
record
regular expression
replica server
RMI
role
role hierarchy
RPM
S
SAS
SDK
server
session
session will
SLF4J
SSH
SSL
state
stateful topic
stateless topic
structural conflation
stream
subscribe
support
T
TCP
throttling
TLS
topic
topic path
topic path prefix
topic selector
topic-scoped permission
topic tree
transport
U
update
URL
UTF-8
V
VCPU
W
WAR
X
XHR
XML
XSD
Trademarks
Copyright Notices
ANTLR
apns
Apache Commons Codec
Apache Portable Runtime
Bootstrap
CocoaAsyncSocket
concurrent-trees
CQEngine
cron4j
d3
disruptor
FastColoredTextBox
Fluent validation
Fluidbox
gcm-server
GeoIP API
GeoLite City Database
geronimo-jms_1.1_spec
Google code prettify
hashmap
Hazelcast
HPPC
htmlcompressor
inherits
jackson-core
jackson-dataformat-cbor
JCIP Annotations
JCTools
jQuery
json-simple
JZlib
Knockout
libwebsockets
log4j2
loglevel
long
Metrics
Minimal JSON
Modernizr
NLog
opencsv
OpenSSL
PCRE
Picocontainer
Protocol Buffers
Rickshaw
Servlet API
SLF4J
slf4j-android-logger
SocketRocket
Tabber
Tapestry (Plastic)
TrueLicense
when
ws
Licenses
Apache License 2.0
BSD 3-clause License
Common Development and Distribution License
Eclipse Public License – v 1.0
ISC License –
The GNU Lesser General Public License, version 2.1 (LGPL-2.1)
The GNU Lesser General Public License, version 3.0 (LGPL-3.0)
The MIT License (MIT)
OpenSSL and SSLeay Licenses