WEB开发网
开发学院软件开发Java Eclipse 环境下的 OpenSocial 开发:通过 Shindig... 阅读

Eclipse 环境下的 OpenSocial 开发:通过 Shindig SPI 扩展创建自己的 OpenSocial 容器

 2010-05-31 00:00:00 来源:WEB开发网   
核心提示: Shindig 服务器端 SPI 扩展Shindig 作为 OpenSocial 规范的引用实现,提供了 SPI 的扩展能力,Eclipse 环境下的 OpenSocial 开发:通过 Shindig SPI 扩展创建自己的 OpenSocial 容器(4),允许你把数据适配到 Shindig

Shindig 服务器端 SPI 扩展

Shindig 作为 OpenSocial 规范的引用实现,提供了 SPI 的扩展能力,允许你把数据适配到 Shindig 容器中去。你的这些数据也许存在于诸如 My SQL/Oracle 的关系数据库,或者是以 JSON 格式存储的静态文件,无论哪种存储,你都可能通过 Shindig SPI 将它们适配到 Shindig, 从而使这些数据公布在 OpenSocial 平台上。

图 4. Shindig SPI 扩展
Eclipse 环境下的 OpenSocial 开发:通过 Shindig SPI 扩展创建自己的 OpenSocial 容器

如图 4 所示,你的应用需要实现 ActivityService, PersonService, AppDataService 三个接口,利用诸如 JDBC/Hibernate 等机制把数据提供给 Shindig。

接下来,本文将通过一个例子,实现 PersonService 接口向 Shindig 提供 People/Friends 相关的 OpenSocial 数据。

清单 1 是 SocialTestJsonPersonService类的实现。

清单 1. SocialTestJsonPersonService Class

 public class SocialTestJsonPersonService implements PersonService { 
 private static final String PEOPLE_TABLE = "people"; 
 private static final String FRIEND_LINK_TABLE = "friendLinks"; 
 private JSONObject db; 
 private BeanConverter converter; 
    …… 
 public Future<RestfulCollection<Person>> getPeople(Set<UserId> 
       userIds,GroupId groupId, CollectionOptions options, Set<String> fields, 
   SecurityToken token) throws ProtocolException { 
  List<Person> result = Lists.newArrayList(); 
  try { 
   //Read people data from JSON table. 
   JSONArray people = db.getJSONArray(PEOPLE_TABLE); 
   Set<String> idSet = getIdSet(userIds, groupId, token); 
 
   for (int i = 0; i < people.length(); i++) { 
    JSONObject person = people.getJSONObject(i); 
    if (!idSet.contains(person.get(Person.Field.ID.toString()))) { 
     continue; 
    } 
    // Add group support later 
    Person personObj = filterFields(person, fields, Person.class); 
    result.add(personObj); 
   } 
 
   if (GroupId.Type.self == groupId.getType() && result.isEmpty()) { 
    throw new ProtocolException(HttpServletResponse.SC_BAD_REQUEST, 
      "Person not found"); 
   } 
   int totalSize = result.size(); 
   return ImmediateFuture.newInstance(new RestfulCollection<Person>( 
     result, options.getFirst(), totalSize, options.getMax())); 
  } catch (JSONException je) { 
   throw new ProtocolException( 
     HttpServletResponse.SC_INTERNAL_SERVER_ERROR, je 
       .getMessage(), je); 
  } 
 } 
 
 public Future<Person> getPerson(UserId id, Set<String> fields, 
   SecurityToken token) throws ProtocolException { 
  try { 
   //Read people data from JSON table. 
   JSONArray people = db.getJSONArray(PEOPLE_TABLE); 
   for (int i = 0; i < people.length(); i++) { 
    JSONObject person = people.getJSONObject(i); 
    if (id != null 
      && person.get(Person.Field.ID.toString()).equals( 
        id.getUserId(token))) { 
     Person personObj = filterFields(person, fields, 
       Person.class); 
     return ImmediateFuture.newInstance(personObj); 
    } 
   } 
   throw new ProtocolException(HttpServletResponse.SC_BAD_REQUEST, 
     "Person not found"); 
  } catch (JSONException je) { 
   throw new ProtocolException( 
     HttpServletResponse.SC_INTERNAL_SERVER_ERROR, je 
       .getMessage(), je); 
  } 
 } 
    …… 
 } 

上一页  1 2 3 4 5 6 7  下一页

Tags:Eclipse 环境 OpenSocial

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接