【发布时间】:2013-11-24 15:45:52
【问题描述】:
寻找使用 JAX-RS 实现 EJB 3 REST 服务的示例。希望拥有 EJB 的事务功能并能够从其他 J2EE 应用程序以及 AJAX 应用程序(Web、移动等)调用 EJB。
【问题讨论】:
标签: rest jakarta-ee ejb jax-rs
寻找使用 JAX-RS 实现 EJB 3 REST 服务的示例。希望拥有 EJB 的事务功能并能够从其他 J2EE 应用程序以及 AJAX 应用程序(Web、移动等)调用 EJB。
【问题讨论】:
标签: rest jakarta-ee ejb jax-rs
服务实现为无状态会话 bean。出于说明目的,使用单例 bean 来模拟 DAO。
PUT 示例:
http://mydomain/MyApp/rest/carbean/savecarorder
内容类型:应用程序/json
JSON: {"equipmentId":"570674","status":"L","operation":"PS"}
GET 示例(PUT 操作后插入或更新):
http://mydomain/MyApp/rest/carbean/getcarorder?equipmentId=570674
结果: {"status":"L","operation":"PS","equipmentId":"570674"}
package com.samnunnally.services;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import com.samnunnally.CarManager;
import com.samnunnally.CarOrder;
/**
* Session Bean implementation class CarService
*/
@Stateless(mappedName = "ejb/CarService")
@LocalBean
@Path ("/carbean")
public class CarService {
@EJB
CarManager carManager;
@GET
@Produces({ MediaType.APPLICATION_JSON })
@Path("/getcarorder")
public CarOrder getCar(@QueryParam("equipmentId") String equipmentId) {
return carManager.getCarOrder(equipmentId);
}
@Path("/savecarorder")
@PUT
@Consumes({ "application/xml", "application/json" })
public String saveCarOrder(CarOrder carOrder) {
carManager.saveCarOrder(carOrder);
return "true";
}
}
这个需要添加到ear中war文件的web.xml文件中:
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
管理器模拟数据层
package com.samnunnally.managers;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import com.samnunnally.model.CarOrder;
/**
* Session Bean implementation class CarManager
*
* @author Sam Nunnally
*
*/
@Singleton(mappedName = "ejb/CarManager")
@LocalBean
public class CarManager {
/*
* this should be a database of some sort
*/
private Map<String, CarOrder> carOrders = null;
public CarOrder getCarOrder(String equipmentId) {
return getCarOrders().get(equipmentId);
}
public void saveCarOrder(CarOrder carOrder) {
getCarOrders().put(carOrder.getEquipmentId(), carOrder);
}
private Map<String, CarOrder> getCarOrders(){
if(carOrders == null){
carOrders = new HashMap<String, CarOrder>();
}
return carOrders;
}
}
【讨论】: