package org.gk.servlet;
import jfreecode.gwt.event.server.EventCenterServlet;
import jfreecode.gwt.event.server.bus.EventStore;
import jfreecode.gwt.event.server.invoke.InvokeIfc;
import jfreecode.gwt.event.server.invoke.InvokeSpringBean;
import jfreecode.gwt.event.server.invoke.exception.InvalidEventIdException;
import jfreecode.gwt.event.server.invoke.exception.SpringBeanNotFoundException;
import jfreecode.spring.context.WebSpringContext;
public class GULSpringServlet extends EventCenterServlet {
private static final long serialVersionUID = 1L;
private final InvokeIfc invoke = new InvokeSpringBean();
/**
* <pre>
* Client發佈事件過來,Server調用SpringBean進行處理 處理有四種例外狀況
* 1.找不到SpringBean元件SpringBeanNotFoundException
* 2.找不到可執行的方法 InvokeSpringBeanException
* 3.AP程式處理異常 APException
* 繼承InvokeSpringBean改寫可直接調用某檔案的腳本
* @throws NotFoundSpringBean
* </pre>
*/
@Override
public void doPut(EventStore es) {
String eventId = es.getEventId();
//
if (eventId.indexOf('.') == -1) {
throw new InvalidEventIdException("{" + eventId
+ "} format error! EventId format: "
+ "${BeanName}.${BeanMethod}");
}
// EventID包含了 $SpringName.$methodName
String[] beanProperty = eventId.split("\\.");
String beanName = beanProperty[0];
String beanMethod = beanProperty[1];
checkSpringBeanExist(beanName, beanMethod);
Object springBean = WebSpringContext.getApplicationContext().getBean(
beanName);
invoke.execute(springBean, beanMethod);
}
protected void checkSpringBeanExist(String beanName, String beanMethod) {
if (!WebSpringContext.getApplicationContext().containsBean(beanName)) {
throw new SpringBeanNotFoundException("beanName:" + beanName
+ ",beanMethod:" + beanMethod);
}
}
}