![Page 1: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/1.jpg)
How to implement your own OpenSocial Container on the Java Platform
Chris Schalk, Google Developer AdvocatePaul Lindner, hi5 Architect
ID# TS-6574
![Page 2: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/2.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 2
Learn the specific steps required to implementing your own OpenSocial container on the Java™ platform
![Page 3: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/3.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 3
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld Experience with Shindig - hi5
![Page 4: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/4.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 4
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld Experience with Shindig - hi5
![Page 5: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/5.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 5
“What is OpenSocial?”
OpenSocial is a set of common APIs for building social applications across the web
It is being developed by Google in conjunction with partners from the Web/Social Application development community
![Page 6: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/6.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 6
What is OpenSocial trying to solve?
As each social website opens its environment to developers, it exposes an API
“ … But what if you want to your application on multiple social websites?”
Problem: Developers have to learn multiple APIs to publish in multiple environments
Solution: OpenSocial allows developers to write applications to a common standard API that will run on multiple websites
![Page 7: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/7.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 7
OpenSocial Architecture at a glance
Client
OpenSocial Site
JSON(application communication)Gadget Server
OpenSocial JS
Social Data
![Page 8: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/8.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 8
OpenSocial Architecture at a glance
Client
OpenSocial Client
• Web page with embeddedOpenSocial Applications
• Applications are comprised ofXML documents with JavaScript™ technology
• Similar to iGoogle Gadget• Has additional functionality
• OpenSocial JavaScript APIs
![Page 9: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/9.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 9
OpenSocial JavaScript APIs
OpenSocial Application Developers essentially develop on the Gadget platform but with 3 core OpenSocial services…
![Page 10: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/10.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 10
OpenSocial JavaScript APIs overview
• People and Friends Data API Access friends information programmatically • Activities Data API See what you’re friends are up to Share what you are doing
• Persistence Data APIShare data with your friends, the world
The core OpenSocial services include:
![Page 11: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/11.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 11
OpenSocial JavaScript APIs overview
• Gadgets Core Utilities handling gadget preferences, IO, JSON
• Gadgets Feature-SpecificUtilities for working with flash, window management, tabs, rpc, MiniMessage
Additional Gadgets services include:
![Page 12: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/12.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 12
People & Friends API Code Example
/*** Request for friend info when the page loads.*/function getFriendData() { var req = opensocial.newDataRequest(); req.add(req.newFetchPersonRequest(VIEWER), 'viewer'); req.add(req.newFetchPeopleRequest(VIEWER_FRIENDS), 'viewerFriends'); req.send(onLoadFriends);};
Getting info on you and your friends:
![Page 13: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/13.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 13
Core Services - People
/*** Callback function for returned friend data.*/function onLoadFriends(response) { var viewer = response.get('viewer').getData(); var html = 'Friends of ' + viewer.getDisplayName() + ‘:<br><ul>’; var viewerFriends = response.get('viewerFriends').getData(); viewerFriends.each(function(person) { html += '<li>' + person.getDisplayName() + '</li>';}); html += '</ul>'; document.getElementById('message').innerHTML = html;};
Getting info on you and your friends:Generated output:
![Page 14: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/14.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 14
OpenSocial Architecture at a glance
Client
OpenSocial Site
JSON Request/Responses Exposed
Gadget Server
OpenSocial JS
Social Data
{"Responses":[{"response":{"Value":{"List":[{"AboutMe":"","AllowSend":true,"FullName"
:{"FamilyName":"Schalk","GivenName":"Chris","Unstructured":"Chris Schalk"},"Id":"05047698136432048591"…Chanezon"},"Id":"01515881069164444926","Location":"","Name":"Patrick Chanezon","Nickname":"","Occupation"
[{"type":"FETCH_PEOPLE","idSpec":"VIEWER","profileDetail":["id","name","thumbnailUrl"] {"type":"FETCH_PERSON_APP_DATA","idSpec":"VIEWER",”…
![Page 15: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/15.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 15
Getting familiar with OpenSocial Application Development
![Page 16: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/16.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 16
OpenSocial Architecture at a glance
OpenSocial Site
Gadget Server
OpenSocial JS
Social DataClient
{"Responses":[{"response":{"Value":{"List":[{"AboutMe":"","AllowSend":true,"FullName"
:{"FamilyName":"Schalk","GivenName":"Chris","Unstructured":"Chris Schalk"},"Id":"05047698136432048591"…Chanezon"},"Id":"01515881069164444926","Location":"","Name":"Patrick Chanezon","Nickname":"","Occupation"
[{"type":"FETCH_PEOPLE","idSpec":"VIEWER","profileDetail":["id","name","thumbnailUrl"] {"type":"FETCH_PERSON_APP_DATA","idSpec":"VIEWER",”…
“So how do you build an OpenSocial Server?”
![Page 17: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/17.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 17
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld experience with Shindig - hi5
![Page 18: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/18.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 18
Options for hosting OpenSocial Apps
Option #1: Write your own spec compliant code in whatever language you want… • Other early “pioneer” OpenSocial containers went this route.
Option #2: Utilized existing OpenSource container code.• The Apache incubator project “Shindig” serves this purpose!
![Page 19: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/19.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 19
OpenSocial Architecture at a glance
OpenSocial Site
OpenSocial container site requirements
Gadget Server
OpenSocial JS
Social Data
• Container must support Gadgets API
• Container must support OpenSocial JS API
• Container must have ability to tie into external social data
![Page 20: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/20.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 20
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld experience with Shindig - hi5
![Page 21: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/21.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 21
OpenSocial’s Container - Shindig
• What is Shindig?• “OpenSource software that allows you to serve OpenSocial applications”
• Is currently an Apache Software Incubator project• Heavy partner involvement (Ning, hi5 …)• Serves as open source reference implementation of OpenSocial & Gadgets technologies
• It’s Goal: “To serve as an easy to use OpenSocial “container in a box”
![Page 22: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/22.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 22
Shindig ComponentsShindigShindig
Gadget ServerGadget Server
…Gadget Container JavaScriptGadget Container JavaScript
OpenSocial Container JavaScript
Gadget Rendering ServletGadget Rendering Servlet
• Gadget Server• Renders gadget XML (i.e. from gmodules.com)• Gadget Container JavaScriptenvironment
• OpenSocial Container JavaScript environment
• JavaScript environment for people, activities, persistence SocialData Servlet
REST API Server
![Page 23: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/23.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 23
Shindig ComponentsShindigShindig
Gadget ServerGadget Server
…Gadget Container JavaScriptGadget Container JavaScript
OpenSocial Container JavaScript
Gadget Rendering ServletGadget Rendering Servlet•SocialData Servlet• Handles requests for data and sends to data handlers
•OpenSocial REST APIs• Provide lightweight REST access to social data(currently being implemented) SocialData Servlet
REST API Server
![Page 24: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/24.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 24
Shindig in Action
Gadget XML SourceGadget XML Source
Running the application Request is made from Client Data is returned and rendered
Application Installation Gadget XML is loaded and cached on OpenSocial Container
![Page 25: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/25.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 25
Shindig Website
http://incubator.apache.org/shindig
![Page 26: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/26.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 26
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld experience with Shindig - hi5
![Page 27: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/27.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 27
Developing with Shindig
Easy to get started…• Follow instructions on website building Shindig
• You’ll need a 1.5 Java™ Development Kit (JDK™ software/Java Runtime Environment (JRE™) software version
• A svn client to check out the code• Apache Maven to build Shindig
• Automated build downloads are not yet available
Once code is checked out, follow instructions in README files
![Page 28: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/28.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 28
Checking out, building and running Shindig (in about a minute!)
![Page 29: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/29.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 29
Working with Shindig in an IDE
Shindig can be worked on from and IDEThere’s guidance on the Shindig website on how to setup Eclipse to work with Shindig
![Page 30: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/30.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 30
Setting up Eclipse to build and debug Shindig
![Page 31: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/31.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 31
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld experience with Shindig - hi5
![Page 32: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/32.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 32
Integrating external data with Shindig
“So how can you make Shindig talk to your data?”
?
![Page 33: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/33.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 33
Integrating external data with Shindig
Solution!
Implement these interfaces and tie in to your own datasources:
• PeopleService• ActivityService • DataService
Can use JDBC directly or Hibernate ... or other persistence frameworks…
![Page 34: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/34.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 34
Integrating external data with Shindig
PeopleService Interface
public interface PeopleService {public ResponseItem<ApiCollection<Person>> getPeople(List<String> ids, SortOrder sortOrder, FilterType filter, int first, int max, Set<String> profileDetails, GadgetToken token);
public List<String> getIds(IdSpec idSpec, GadgetToken token) throws JSONException;public ResponseItem<ApiCollection<Person>> getPeople(List<String> ids, SortOrder sortOrder, FilterType filter, int first, int max, Set<String> profileDetails, GadgetToken token);
…}
![Page 35: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/35.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 35
Integrating external data with Shindig
Example: A SQL Implementation
public class SQLPeopleService implements PeopleService { public ResponseItem<ApiCollection<Person>>
getPeople(List<String> ids, SortOrder sortOrder, FilterType filter, int first, int max, Set<String> profileDetails, GadgetToken token) { Map<String,Person> allPeople = SQLDataLayer.get().getAllPeople();
return allPeople;}…
}
![Page 36: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/36.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 36
Integrating external data with Shindig
After creating your own implementations for People, Data and Activities, you bind your implementations using a provided Guice module
public class SocialApiGuiceModule extends AbstractModule { @Override protected void configure() {bind(PeopleService.class).to(SQLPeopleService.class);
bind(DataService.class).to(SQLDataService.class);bind(ActivitiesService.class).to(SQLActivitiesService.class);bind(new TypeLiteral<List<GadgetDataHandler>>() {})
.toProvider(GadgetDataHandlersProvider.class); } …}
![Page 37: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/37.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 37
Running the SampleContainer with custom data from a SQL database
![Page 38: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/38.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 38
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld Experience with Shindig - Hi5
![Page 39: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/39.jpg)
2008 JavaOneSM Conference | java.sun.com/javaone | 39
How to put it all together…
Map your social data to OpenSocial data standardsSecurity options• Can create your own implementations or use built in security
OAuth with ShindigTo render the gadgets, use JavaScript to embed gadgets onto your page
![Page 40: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/40.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 40
Putting it all together – Embedding OpenSocial Apps into your website
![Page 41: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/41.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 41
Agenda
OpenSocial OverviewOptions for hosting OpenSocial applicationsIntroducing Apache ShindigHow to develop with ShindigIntegrating external data with ShindigPutting it all togetherRealWorld experience with Shindig - hi5
![Page 42: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/42.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 42
Putting it All Together - Shindig at hi5
History• Started work January, 2008• In Production Since April 1st
• 100% Deployed April 6th
• http://developer.hi5.com/• 30-40m users per month
Architecture…Lessons Learned…Scaling…
![Page 43: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/43.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 43
Architecture
Load Balancers
Akamai CDN
AppAppFarmFarm
ShindigShindig FarmFarm
Backends
33rdrd Party PartyApp ServersApp Servers
![Page 44: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/44.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 44
ArchitectureServer Internals
App Servers• Apache 2.2• Resin 2.1• “Old Reliable”• Hundreds and Hundreds
Backends• Postgres Databases• Memcache, Memcache, Memcache
(1TB+ !)• Graph Servers• Storage, Mail, DNS, etc
Shindig Servers• Tomcat 6.0.16• Enunciate API Server• 4GB, dual 4-Core Xeon
3rd Party App Servers• Wide Variety• Rails, Python and PHP most
popular
![Page 45: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/45.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 45
Traffic – we have…
10k req/sec (Edge)6.5k req/sec (Origin)
![Page 46: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/46.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 46
Lessons Learned
Be prepared for Viral Growth• We expanded Shindig Servers 50% in the first week• Insure that requests are O(1)
Supporting OpenSocial is a lot more than Shindig• Developer Tools for publishing and managing Apps• Application Gallery and Metadata Management• Notifications Database• Monitoring and Controls – Essential!
![Page 47: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/47.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 47
How to Scale
Fix Your Concurrency IssuesWork Around Other People’s Concurrency IssuesTarget the requests on the Critical Path• Friend/Activities/Data used all the time• Must be fast, this is Ajax
Factor out the Disk• Server instances should never swap• Database usage should be minimal, if at all – use pre-populated
caches.
Cache, Cache, Cache• In the CDN, in the Browser, Everywhere
![Page 48: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/48.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 48
How to Scale – JVM
Fast, Consistent Response Time is RequiredUse latest Java 1.6 beta 10ParNew and CMS are your friend• -XX:+DisableExplicitGC • -XX:+UseParNewGC• -XX:+UseConcMarkSweepGC• -XX:+AggressiveOpts • -XX:+DoEscapeAnalysis • -XX:+PrintGCDetails • -Xss320k -Xms2300m -Xmx2300m
![Page 49: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/49.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 49
How to Scale – Concurrency
High CPU + spin locks == slowHow to Fix? – Fire Drills.• Push all traffic to a single host• Use Performance Monitoring
tools• Or just do lots of Stack Traces• Remove Concurrency Problem• … repeat …
![Page 50: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/50.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 50
How to Scale – Gotchas
JCE Crypto Providers• Use ThreadLocal Cipher Cache
Character Sets• Use more than 2? You die…• “String”.getBytes() ends up being synchronized.• UrlConnection will request charsets utf-8 and UTF-8!• Make static specialized CharsetEncoders
Log4j shared data structures• Just reduce logging
synchronizedMap(Hashmap) bad • ConcurrentHashMap good!
![Page 51: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/51.jpg)
2008 JavaOneSM Conference | java.com.sun/javaone | 51
Results
Fast• Cached at the Edge• Scales with more hosts/cores
Cheap• All commodity hardware• Open Source
Good• Quality Apps that our Users love• 10+ billion req/month• 85+ TB of data used
![Page 52: How to Implement Your Own OpenSocial Container on the Java ... · App Servers • Apache 2.2 • Resin 2.1 • “Old Reliable” • Hundreds and Hundreds Backends • Postgres Databases](https://reader033.vdocuments.net/reader033/viewer/2022050422/5f91093a4ae7a06d933fddc7/html5/thumbnails/52.jpg)
How to Implement your own OpenSocial Container on the Java Platform
Chris Schalk, Paul Lindner
TS-6574