![](http://blog.csdn.net/Emoticons/sad_smile.gif)
Design a simple service-oriented J2EE application framework读书笔记:
One:
- The service broker layer will be added between the Web tier and the business tier.
- Conceptually, an
Action
calls a business service request only, which passes the request to a service router. The service router knows how to hook up business service requests to different service provider controllers or adapters by looking up a service mapping XML file,X18p-config.xml
. - The service provider controller has specific knowledge of finding and invoking the underlying business services. Here, business services could be anything from POJO, LDAP (lightweight directory access protocol), EJB, JMX, COM, and Web services to COTS (commercial off the shelf) product APIs.
X18p-config.xml
should supply sufficient data to help the service provider controller get the job done. - Leverage Spring for X18p's internal object lookup and references.
- Build service provider controllers incrementally. As you will see, the more service provider controllers implemented, the more integration power X18p has.
- Protect existing knowledge such as Struts, but keep eyes open for new things coming up
在web tier 和 business tier之间增加service broker,让它路由请求到不同的服务控制器(service controller)。Business Manager的接口不会暴露给Action,Action只需要把Input传给指定的Service Provider,然后就等着接收Output。
对于Business Manager的内部细节全然不知:
...
ServiceRequest bsr = this.getApplicationContext().getBean("businessServiceRequest");
bsr.setServiceName("User Services");
bsr.setOperation("addUser");
bsr.addRequestInput("param1", "addUser");
String userIDRetured = (String) bsr.service();
...Two:
每个DAO都有CRUD操作,每个操作都遵循同样的步骤:First, a connection object is created. Then, input parameters are passed in to execute an operation. Lastly, the raw return data is processed and a more generic domain object or Java collection object returns to the caller. 这些步骤所对应的代码有很多都是重复的。这样的编程经历肯定是枯燥,乏味的,这篇文章的出现给我们带来了曙光。接口不变,方法的实现采取了巧妙的方式:
...
JdbcSQLProcessor p = JdbcProcessor.getSqlProcessor();
List inputList = new ArrayList();
inputList.add(userName);
try {
p.executeUpdate("select_user", inputList);
}
catch (Throwable e) {
e.printStackTrace();
}
...
JdbcSQLProcessor:executeUpdate :
.....
//Get a connection
Connection conn = getConnection();
doUpdate(sql, pStmtValues, processor, conn);
//Need to replace it with sophisticated service from DB package
closeConnection(conn);
return;
.....