1 <?xml version="1.0" encoding="UTF-8"?>
 
   2 <beans xmlns="http://www.springframework.org/schema/beans"
 
   3   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
   4   xmlns:context="http://www.springframework.org/schema/context"
 
   5   xmlns:websocket="http://www.springframework.org/schema/websocket"
 
   7   xsi:schemaLocation="http://www.springframework.org/schema/beans 
 
   8                       http://www.springframework.org/schema/beans/spring-beans.xsd
 
   9                       http://www.springframework.org/schema/context 
 
  10                       http://www.springframework.org/schema/context/spring-context.xsd
 
  11                       http://www.springframework.org/schema/websocket
 
  12                                   http://www.springframework.org/schema/websocket/spring-websocket.xsd">
 
  15         Searches for beans in packages (instead of XML configuration we can use
 
  16         in this way annotations like @Service, @Endpoint, etc, etc)
 
  18     <context:component-scan base-package="de.spring.stomp"/>
 
  21     <bean class="org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean">
 
  22         <property name="maxTextMessageBufferSize" value="8192"/>
 
  23         <property name="maxBinaryMessageBufferSize" value="8192"/>
 
  27         Note that even though the STOMP CONNECT frame has "login" and "passcode" headers that can be used for
 
  28         authentication, Spring’s STOMP WebSocket support ignores them and currently expects users to have been
 
  29         authenticated already via HTTP.
 
  31         In some cases it may be useful to assign an identity to a WebSocket session even when the user has not
 
  32         been formally authenticated. For example, a mobile app might assign some identity to anonymous users,
 
  33         perhaps based on geographical location. The do that currently, an application can sub-class DefaultHandshakeHandler
 
  34         and override the determineUser method. The custom handshake handler can then be plugged in
 
  35         (see examples in Section 25.2.4, “Deployment Considerations”).
 
  37     <bean id="customHandshakeHandler" class="de.spring.stomp.handlers.CustomHandshakeHandler"/>
 
  40     <bean id="customChannelInterceptor" class="de.spring.stomp.interceptors.CustomChannelInterceptor"/>
 
  41     <bean id="customHttpHandshakeInterceptor" class="de.spring.stomp.interceptors.CustomHttpHandshakeInterceptor"/>
 
  44     <bean id="brokerAvailabilityListener" class="de.spring.stomp.listeners.BrokerAvailabilityListener"/>
 
  45     <bean id="sessionConnectedListener" class="de.spring.stomp.listeners.SessionConnectedListener"/>
 
  46     <bean id="sessionConnectListener" class="de.spring.stomp.listeners.SessionConnectListener"/>
 
  47     <bean id="sessionDisconnectListener" class="de.spring.stomp.listeners.SessionDisconnectListener"/>    
 
  48     <bean id="sessionSubscribeListener" class="de.spring.stomp.listeners.SessionSubscribeListener"/>    
 
  49     <bean id="sessionUnsubscribeListener" class="de.spring.stomp.listeners.SessionUnsubscribeListener"/>
 
  52     <!-- Simple broker -->
 
  53     <websocket:message-broker application-destination-prefix="/app">
 
  54         <websocket:transport send-timeout="15000" send-buffer-size="524288" message-size="131072" />
 
  55         <websocket:stomp-endpoint path="/portfolio" allowed-origins="*">
 
  56             <websocket:handshake-handler ref="customHandshakeHandler" />
 
  57                 <websocket:handshake-interceptors>
 
  58                 <ref bean="customHttpHandshakeInterceptor"/>
 
  59                 </websocket:handshake-interceptors>
 
  61         </websocket:stomp-endpoint>
 
  65                 hearbeat: Configure the value for the heartbeat settings. The first number represents how often the server will
 
  66                         write or send a heartbeat. The second is how often the client should write. 0 means no heartbeats.
 
  67                         By default this is set to "0, 0" unless the scheduler attribute is also set in which case the
 
  68                         default becomes "10000,10000" (in milliseconds).
 
  70                         Matching the value used by client.
 
  72         <websocket:simple-broker prefix="/topic, /queue"
 
  73         heartbeat="0,20000" />
 
  75         <websocket:client-inbound-channel>
 
  76                         <websocket:executor core-pool-size="100" max-pool-size="200" keep-alive-seconds="600"/>
 
  77                         <websocket:interceptors>
 
  78                                 <ref bean="customChannelInterceptor"/>
 
  79                         </websocket:interceptors>
 
  80                 </websocket:client-inbound-channel>
 
  81                 <websocket:client-outbound-channel>
 
  82                         <websocket:executor core-pool-size="101" max-pool-size="201" keep-alive-seconds="601"/>
 
  83                         <websocket:interceptors>
 
  84                                 <ref bean="customChannelInterceptor"/>
 
  85                         </websocket:interceptors>
 
  86                 </websocket:client-outbound-channel>
 
  87     </websocket:message-broker>
 
  89     <!-- Full-featured broker -->
 
  90     <websocket:message-broker application-destination-prefix="/app">
 
  91         <websocket:transport send-timeout="15000" send-buffer-size="524288" message-size="131072" />
 
  92         <websocket:stomp-endpoint path="/fullportfolio" allowed-origins="*">
 
  93                 <websocket:handshake-handler ref="customHandshakeHandler" />
 
  94                 <websocket:handshake-interceptors>
 
  95                 <ref bean="customHttpHandshakeInterceptor"/>
 
  96                 </websocket:handshake-interceptors>
 
  98         </websocket:stomp-endpoint>
 
 102         <websocket:stomp-broker-relay prefix="/topic, /queue"
 
 103         relay-host="" relay-port="" client-login="" client-passcode="" system-login="" system-passcode=""
 
 104         heartbeat-send-interval="" heartbeat-receive-interval="" auto-startup="true" virtual-host=""/>
 
 106         <websocket:client-inbound-channel>
 
 107                         <websocket:executor core-pool-size="100" max-pool-size="200" keep-alive-seconds="600"/>
 
 108                         <websocket:interceptors>
 
 109                                 <ref bean="customChannelInterceptor"/>
 
 110                         </websocket:interceptors>
 
 111                 </websocket:client-inbound-channel>
 
 112                 <websocket:client-outbound-channel>
 
 113                         <websocket:executor core-pool-size="101" max-pool-size="201" keep-alive-seconds="601"/>
 
 114                         <websocket:interceptors>
 
 115                                 <ref bean="customChannelInterceptor"/>
 
 116                         </websocket:interceptors>
 
 117                 </websocket:client-outbound-channel>
 
 118     </websocket:message-broker>