项目中使用了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 ListfindEmployee(int departmentId, String position) { System.out.println("departmentId : " + departmentId); System.out.println("position : " + position); List list = new ArrayList (); 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的源代码,想研究的可以仔细看看