项目中使用了Flex3 + EJB3 + WebService的方案,这里做了个小例子,总结一下。
此例的业务很简单,就是一个部门职员系统。
在EJB3中写WebService是很简单的,只要几个annotation而已,如下
@Stateless
@javax.jws.WebService(name = "HumanResourcesWS",
serviceName = "HumanResourcesService",
portName = "HumanResourcesPort")
@WebContext(contextRoot = Constants.CONTEXT_ROOT, urlPattern = "/HumanResources")
public class HumanResourcesServiceBean implements HumanResourcesService {
@WebMethod
public boolean saveEmployee(EmployeeBean employee) {
System.out.println(employee);
return true;
}
@WebMethod
public List<EmployeeBean> findEmployee(int departmentId, String position) {
System.out.println("departmentId : " + departmentId);
System.out.println("position : " + position);
List<EmployeeBean> list = new ArrayList<EmployeeBean>();
list.add(MockDAO.generateRonny(departmentId));
list.add(MockDAO.generateRichard(departmentId));
return list;
}
@WebMethod
public DepartmentBean getDepartment(int departmentId) {
System.out.println("departmentId : " + departmentId);
return MockDAO.generateJavaDepartment();
}
}
@WebContext(contextRoot = Constants.CONTEXT_ROOT, urlPattern = "/HumanResources") 注解将决定WSDL的地址
这方面相关的资料很多,这里就不多说了
Flex方面,首先写了一个BaseService父类,继承了mx.rpc.soap.WebService
调用WebService前要赋值 webService.wsdl = WebService的WSDL地址,然后webService.loadWSDL();
调用服务端WebService方法,有2中方式推荐
1. 使用AbstractOperation
var op : AbstractOperation = webService.getOperation( WebService Method Name );
op.addEventListener(ResultEvent.RESULT, 回调函数);
op.send(多个参数用逗号隔开);
2. 直接使用动态命名
webService.WebSerivceMethodName.addEventListener(ResultEvent.RESULT, 回调函数);
webService.WebSerivceMethodName(多个参数用逗号隔开);
在回调函数中使用event.result as Object;取得返回结果
我将这个例子打包成.ear文件,下载后放到jboss-4.2.3.GA\server\default\deploy目录中,然后启动JBoss
访问 http://localhost:8080/onecompanyweb/flex/onecompanyflex.html 即可看到效果
.ear文件包含java和flex的源代码,想研究的可以仔细看看