Mark Fisher has a cool twitter handle @m_f_
Pardon the lack of formatting, there was just too much information to learn plus watch live demos and type lists on an ipad. I will clean it up over the weekend. [cleaned up] Too much content is a good “problem” for a presentation to have.
libraries:
- Spring Integration
- Spring AMQP in release candidate mode. Similar to Spring JMS but doesn’t hide it behind JMS. AMQP is an open wireless protocol. Also use you set up a routing exchange and set up a routing key for clients to bind to. For example news.star.us so can subscribe to different levels on broker. works with non Java clients
Events
- Has been in Spring since the very beginning
- interface ApplicationEventPublisherAware allows you to make a callback
- Interface ApplicationListener is called when event occurs, can use generics to say what type of events you care about
- Can do without forcing to extend spring interface as well
Messaging
- JmsTemplate – prefer CachingConnectionFactory to ensure sessions are reused
- Jms:listener-container defined in xml on a pojo
- Or use AmqpTemplate instead of JmsTemplate to use amqp, works the same as jmstemplate, for example you can call receive/send methods
- Amqp namespace released this week to support listeners
- Showed demo with rabbitmq including using web ui to see how many messages on queue
- RestTemplate for http messaging, can use HttpMessageConverters if need to be more specific
- SimpleMailMessage to create a message and inject MailSender to send it, good for simple messages, there is a mime one for more complex messsages
- Core Spring cannot receive e-mail. Spring Integration can
Polling
- Better to use events/messaging and only poll when you have to
- Lifecycle interface – start(), stop() and isRunning()
- SmartLifecycle does those three plus autostartup, phases and adds a callback on stop
Scheduling
- taskScheduler interface lets you schedule one time tasks, tasks at a fixed rate and tasks at a fixed delay
- Trigger interface lets you control the next execution time along with the Trigger Context that gives information about the last scheduled/actual time
- This means you don’t need quartz for simple operations
- The @Scheduled annotation lets you specify cron or fixed time/delay expressions instead of interfaces
- Can also create your own annotations to externalize the cron expression so using your custom annotation without duplicating the configuration of the cron expression
Pipes and filters
- Message can be any object as the payload with headers in a map, the message is immutable unless your payload itself is mutable
- MessageChannel can do point to point or publish subscribe, set channel, types in xml using and can also set whether async
- A gateway can be one way or bidirectional
- Can use @publisher to put the result of a method or argument to go on a channel as a side effect of calling the method
- Filters return booleans
- Router directs to proper channel name
- Can route on payload type, header type etc
- Can split/aggregate channels
- Spring Integration 2.0 lets you use el to specify bindings, etc
- Can chain when don’t need explicit channel names