From e190c160f168935d4632ff9bec779e1291814b4d Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 19 Nov 2013 14:09:55 +0200 Subject: [PATCH] INTSAMPLES-119 Update Monitor for Twitter OAuth Twitter now requires authentication. Disable the real twitter adapter by default; enable it with spring.profile "twitter" - requires the user to get real oauth tokens. Replicate oauth setup instructions from the twitter sample. Add note to README for enabling the real twitter adapter. Add .gitignore so committers can keep their real credentials in, say, 'oauth.properties.foo'. Add note about `SpringIntegrationTest`. Update dummy tweets to use new icon. INTSAMPLES-119 Polishing - Fix 'twitterTemplate' bean name - Add content to log and JMX Notification JIRA: https://jira.springsource.org/browse/INTSAMPLES-119 --- intermediate/monitoring/.gitignore | 1 + intermediate/monitoring/README.md | 37 ++++++++++++++++ .../service/impl/DummyTwitter.java | 2 +- .../spring-integration-context.xml | 44 ++++++++++++++++--- .../src/main/resources/oauth.properties | 4 ++ .../src/main/webapp/WEB-INF/web.xml | 8 ++++ 6 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 intermediate/monitoring/.gitignore create mode 100644 intermediate/monitoring/src/main/resources/oauth.properties diff --git a/intermediate/monitoring/.gitignore b/intermediate/monitoring/.gitignore new file mode 100644 index 00000000..d84084b8 --- /dev/null +++ b/intermediate/monitoring/.gitignore @@ -0,0 +1 @@ +src/main/resources/oauth.properties.* diff --git a/intermediate/monitoring/README.md b/intermediate/monitoring/README.md index 0d40a230..b4d4018e 100644 --- a/intermediate/monitoring/README.md +++ b/intermediate/monitoring/README.md @@ -22,6 +22,8 @@ and then use [VisualVM][]/JConsole to explore the [MBeans][]. The twitter search results can be examined at `http://localhost:8080/monitoring`. +Alternatively, there is a simple `main` class `SpringIntegrationTest`. + ## 2.2 Updates: The application context now includes an example of <int-jmx:notification-publishing-channel-adapter/>, to which the tweets are published. You can navigate to the MBean - **spring.application:type=TweetPublisher,name=tweeter**, click the _Notifications_ tab and then subscribe. You will then see the notifications. @@ -39,6 +41,41 @@ You should observe log output of the notifications as well as polling the channe These changes show how you can create a sophisticated monitoring application using Spring Integration - it is important to understand that the application being monitored doesn't have to be a Spring or Spring Integration application - any application that exports MBeans can be monitored in this way. +## Note: + +Twitter now requires an authenticated user to perform searches. By default, this project now uses a dummy adapter to avoid having +to configure the credentials. To use a real +adapter, uncomment the __spring.profiles.active__ `context-param` element in the `web.xml`. + +To run the `SpringIntegrationTest` command-line application, use `-Dspring.profiles.active=twitter` command line argument in the launch configuration. + +However, you will need to configure OAuth and set the values in the OAuth properties. + +To use OAuth authentication/authorization with Twitter you must create a new Application on the Twitter Developer's site. +Follow the directions below to create a new application and obtain the consumer keys and the access token: + +* Go to [http://dev.twitter.com/](http://dev.twitter.com/) +* Log in to your account +* Go to *My applications*. +* Click on 'Create a new application' link and fill out all required fields on the form provided; +* Submit the form. +* If everything is successful you'll be presented with the 'Consumer Key' and 'Consumer Secret'. +* Copy both values to a safe place. +* On the same page you should see 'My Access Token' button on bottom of the page. +* Click on it and you'll be presented with two more values: 'Access Token' and 'Access Token Secret'. +* Copy these values to a safe place as well. + +When done, fill out **oauth.properties** file so it looks similar to this. + + twitter.oauth.consumerKey=4XzBPabcJQxyBzzzH3TrRQ + twitter.oauth.consumerSecret=ab2piKdMfPu8bVa3ab6DAIvIWEVZyMDL0RSEN2I8 + twitter.oauth.accessToken=21691649-4XYZY5iJEOfz2A9qCFd9SjBRGb3HLmIm4HNE6AMv4 + twitter.oauth.accessTokenSecret=AbRxUAvyNCtqQtvxFK8w5ZMtMj20KFhB6oEfTA0 + +NOTE: the above values are samples only. + + + -------------------------------------------------------------------------------- For help please see the Spring Integration documentation: diff --git a/intermediate/monitoring/src/main/java/org/springframework/integration/service/impl/DummyTwitter.java b/intermediate/monitoring/src/main/java/org/springframework/integration/service/impl/DummyTwitter.java index 0cf9f5a2..19c56d67 100644 --- a/intermediate/monitoring/src/main/java/org/springframework/integration/service/impl/DummyTwitter.java +++ b/intermediate/monitoring/src/main/java/org/springframework/integration/service/impl/DummyTwitter.java @@ -33,7 +33,7 @@ public class DummyTwitter { "Spring Integration is the coolest Enterprise Integration project", new Date(), "SomeUser", - "http://a0.twimg.com/profile_images/1598911687/ICO_S2_Bug_normal.png", + "https://pbs.twimg.com/profile_images/378800000502646541/992d3596458fca87741b8e93e7df0860_normal.png", 0L, 0L, null, diff --git a/intermediate/monitoring/src/main/resources/META-INF/spring/integration/spring-integration-context.xml b/intermediate/monitoring/src/main/resources/META-INF/spring/integration/spring-integration-context.xml index 65e4b1b1..1800b2f2 100644 --- a/intermediate/monitoring/src/main/resources/META-INF/spring/integration/spring-integration-context.xml +++ b/intermediate/monitoring/src/main/resources/META-INF/spring/integration/spring-integration-context.xml @@ -23,12 +23,19 @@ - - - + - + + + + + + + + @@ -66,7 +73,7 @@ + expression="'Id:' + payload.id + '; Date:' + payload.createdAt + '; FromUser: ' + payload.fromUser + '; Content: ' + payload.text" /> @@ -78,7 +85,7 @@ + expression="'Id:' + payload.id + '; Date:' + payload.createdAt + '; FromUser: ' + payload.fromUser + '; Content: ' + payload.text"/> @@ -91,4 +98,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/intermediate/monitoring/src/main/resources/oauth.properties b/intermediate/monitoring/src/main/resources/oauth.properties new file mode 100644 index 00000000..651e61ff --- /dev/null +++ b/intermediate/monitoring/src/main/resources/oauth.properties @@ -0,0 +1,4 @@ +twitter.oauth.consumerKey= +twitter.oauth.consumerSecret= +twitter.oauth.accessToken= +twitter.oauth.accessTokenSecret= diff --git a/intermediate/monitoring/src/main/webapp/WEB-INF/web.xml b/intermediate/monitoring/src/main/webapp/WEB-INF/web.xml index 46208d6f..5b14b27a 100644 --- a/intermediate/monitoring/src/main/webapp/WEB-INF/web.xml +++ b/intermediate/monitoring/src/main/webapp/WEB-INF/web.xml @@ -9,6 +9,14 @@ classpath:META-INF/spring/integration/spring-integration-context.xml + + + org.springframework.web.context.ContextLoaderListener