Eclipse 环境下的 OpenSocial 开发:通过 Shindig SPI 扩展创建自己的 OpenSocial 容器
2010-05-31 00:00:00 来源:WEB开发网Shindig 服务器端 SPI 扩展
Shindig 作为 OpenSocial 规范的引用实现,提供了 SPI 的扩展能力,允许你把数据适配到 Shindig 容器中去。你的这些数据也许存在于诸如 My SQL/Oracle 的关系数据库,或者是以 JSON 格式存储的静态文件,无论哪种存储,你都可能通过 Shindig SPI 将它们适配到 Shindig, 从而使这些数据公布在 OpenSocial 平台上。
图 4. Shindig SPI 扩展
如图 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);
}
}
……
}
Tags:Eclipse 环境 OpenSocial
编辑录入:爽爽 [复制链接] [打 印]- ››Eclipse+SVN+Google Code配置过程
- ››eclipse中开发android程序时,打开layout配置文件自...
- ››Eclipse快捷键大全
- ››Eclipse Helios 之旅:看看 Eclipse 的最新同步发...
- ››Eclipse和MyEclipse的关系
- ››Eclipse 环境下的 OpenSocial 开发:通过 Shindig...
- ››Eclipse 向导机制扩展 -- 实现可定制的向导
- ››Eclipse 中的 EJB V3.0 数据库持久化
- ››Eclipse 常用快捷键
- ››Eclipse 插件开发 -- 深入理解菜单(Menu)功能...
- ››Eclipse 插件开发-如何扩展 WTP Wizard
- ››Eclipse Android 开发环境 搭建
更多精彩
赞助商链接