??xml version="1.0" encoding="utf-8" standalone="yes"?>
-arch [processor architecture] -application [id] -clean -configuration [cofigfile location] -data [workspace location] -debug [option file] -dev [classpath entry] -nosplash -vm [jre path] -vmargs [Java VM arguments] Java Excel是一开放源码项目,通过它Java开发h员可以读取Excel文g的内宏V创建新的Excel文g、更新已l存在的Excel文g。用该API非Windows操作pȝ也可以通过UJava应用来处理Excel数据表。因为是使用Java~写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的讉K?/p> 现在发布的稳定版本是V2.0Q提供以下功能: 现在q不支持以下功能Q但不久׃提供了: 具体用的时候很单,遇到什么不懂得查一下API文档可以了Q今天才发现我也会用API了,^_^Q?br />关于POI使用时出现的问题现在q没有解冻I不知道是什么原因?/p> On Windows, this can be done via the following. For this document we assume that you have installed Axis in C:\axis. To store this information permanently in WinNT/2000/XP you will need to right click on "My Computer" and select "Properties". Click the "Advanced" tab and create the new environmental variables. It is often better to use WordPad to create the variable string and then paste it into the appropriate text field. Service here"卌?Web Service 服务端程序安装完? 一下,q里׃再描qC?br />C:\>cd \
其实QEclipse是一个可以进行非常灵z配|的pȝQ除了以~省的方式启动以外,q可以指定各U参数来定制启动方式。在参考了一些资料之后,我ȝ了一些比较常用的启动时Command ArgumentsQ如果有不正的地方希望大家予以指出?/p>
描述Q指定所使用的处理器的类?br />举例Qeclipse -arch x86或eclipse -arch sparc
描述Q指定要q行的应用,id为扩展org.eclipse.core.applications扩展点的插gid加扩展id
举例Q例如有个插件id为edu.sdu.appQ扩展id为myappQ则eclipse -application edu.sdu.app.myappQ就会执行你的扩展应?/p>
描述Q清I插件缓存内?br />举例Qeclipse -cleanQ有时插件显CZ出来是因为Eclipse插件进行了~存以加速启动过E,若指定此参数则会清空~存Q从头加?/p>
描述Q指定配|文件的位置Q在启动时用此目录下的配置文gconfig.ini来启?br />举例Qeclipse -configuration d:/eclipse/configuration
描述Q指定启动时的Workspace位置
举例Q例如Workspace位置讑֜D:/myworkspaceQ则eclipse -data D:/myworkspace
描述Q以Debug状态启动EclipseQ所有的Debug开兛_.options文g中指?br />举例Qeclipse -debug d:/eclipse/.options
描述Q以开发状态启动EclipseQ这会添加所有指定的路径作ؓ每个插g的Classpath
举例Q例如eclipse -dev binQ会生在bin目录下的所有类加蝲到类路径中,q在开发插件时非常有用
描述Q指定启动时不显C闪?br />举例Qeclipse -nosplash
描述Q指定启动时所使用的Java虚拟?br />举例Q例如要使用自己的Java虚拟机,则eclipse -vm D:/j2sdk1.4.2_04/jre/bin/java.exeQ这栯有一个好处,是可以开启一个ConsoleQ能够显C控制台信息Q当然若使用eclipse -vm D:/j2sdk1.4.2_04/jre/bin/javaw.exe则不会再昄控制?/p>
描述Q指定启动时要用的Java虚拟机参?br />举例Q例如要指定使用的内存容量,则eclipse -vmargs "-Xms256m -Xmx1024m"
注:此参C定要攑֜所有参数变量的最后面
]]>
]]>
什么是设计模式
设计模式是一套被反复使用、多Ch知晓的、经q分cȝ目的、代码设计经验的ȝ。用设计模式是Z可重用代码、让代码更容易被他h理解、保证代码可靠性?br />
毫无疑问Q设计模式于׃他h于系l都是多赢的Q设计模式代码~制真正工程化,设计模式是Y件工E的基石Q如同大厦的一块块砖石一栗?br />
GoF的“设计模式”是W一ơ将设计模式提升到理论高度,q将之规范化Q本书提Z23U基本设计模式,自此Q在可复用面向对象Y件的发展q程中,新的大量的设计模式不断出现?br />
设计模式和框?br />现在Q可复用面向对象软gpȝ现在一般划分ؓ三大c:应用E序 工具和框架(Framework),我们qx开发的具体软g都是应用E序QJava的API属于工具?而框架是构成一cȝ定Y件可复用设计的一l相互协作的cREJBQEnterprise JavaBeansQ是Java应用于企业计的框架.
框架通常定义了应用体pȝ整体l构 cd对象的关pȝ{设计参敎ͼ以便于具体应用实现者能集中_֊于应用本w的特定l节。框架主要记录Y件应用中共同的设计决{,框架设计复用Q因此框架设计中必然要用设计模?
另外Q设计模式有助于Ҏ架结构的理解Q成熟的框架通常使用了多U设计模?如果你熟悉这些设计模式,毫无疑问Q你迅速掌握框架的l构Q我们一般开发者如果突然接触EJB J2EE{框Ӟ会觉得特别难学,难掌握,那么转而先掌握设计模式Q无疑是l了你剖析EJB或J2EEpȝ的一把利器?
EJB中的设计模式
下面我们从设计模式的角度看看EJB的框架是怎样的?在这之前假设你已l大概了解了设计模式。专门的设计模式阐述误我的设计模式之系?
EJB是采取多层结构,原先我们数据库开发基本是应用E序(商业逻辑q算)直接调用数据库驱动,在EJB中,为将商业逻辑计算和数据库截然分开Q用多个结构式模式:Adapter模式和Bridge模式{?q样做的好处昄有三个:
1.分离了商业逻辑层和数据讉K?
2.能同时支持多个数据库Q?
3.但数据库cd更换Ӟ不会设计到商业逻辑代码的大量修?
EJB中将Ҏ据库q行调用(如发出select{语?UCؓ会话bean(Sessionbean),而将对应数据库一个个记录的beanUCؓ实体bean(Entity bean);p两种cd的bean完成Ҏ据库的访?
会话bean一般和客户端应用是一一对应Q而和数据库端联系紧密的是实体bean,EJB在实体bean(或直接在会话bean)和数据库之间使用了Adapter模式和Bridge模式Q无意在实体bean和数据库之间又多了一层,UC为DAO(Data Access Object )QDAO实际是设计模式的合体.
我们以Java的宠物店中的CatalogZ,q是专门处理宠物店中的宠物类?在对数据库访问中Q有两个主要E序QCatalogEJB和CatalogDAO,我们从具体代码中看看设计模式是怎么应用?
Bridge模式和Adapter模式
我们首先看看CatalogEJB代码Q?br />
public class CatalogEJB implements SessionBean {
protected CatalogDAO dao;
//从DAO工厂中获取一个DAO q是调用工厂(factory)模式的一个实?br /> public void ejbCreate() {
try {
dao = CatalogDAOFactory.getDAO();
}
catch (CatalogDAOSysException se) {
Debug.println("Exception getting dao " + se);
throw new EJBException(se.getMessage());
}
}
....
}
我们发现在CatalogEJB中ƈ没有通常的会话bean那样有对数据库操作的"select .. from ."{之cSQL操作语句Q这些都被封装到DAO的具体实C(Concrete class).
在Catalogq个CZ中用了设计模式的Bridge模式,判断是否是某U模式,主要依据其参与者的U类和相互关p,我们先看看Bridge模式的定义和参与者:
Bridge模式是将抽象和行为划分开?各自独立,但能动态的l合hQ好象搭Z一座桥Q。在本例中,是将商业逻辑和数据库讉Kq样的行为划分开来,数据库访问专门放|在DAO中了?br />
Bridge模式需要两个接?抽象cd接口通称为接?Q一个用来封装抽象部分,本例中是装商业逻辑Q是CatalogEJB;q有一个是装行ؓ(Implementor)Q本例中是CatalogDAO,看看CatalogDAO代码Q?br />
public interface CatalogDAO {
public Category getCategory(String categoryID, Locale l)
throws CatalogDAOSysException;
public Page getCategories(int start, int count, Locale l)
throws CatalogDAOSysException;
public Product getProduct(String productID, Locale l)
throws CatalogDAOSysException;
public Page getProducts(String categoryID, int start, int count, Locale l)
throws CatalogDAOSysException;
public Item getItem(String itemID, Locale l)
throws CatalogDAOSysException;
public Page getItems(String productID, int start, int size, Locale l)
throws CatalogDAOSysException;
public Page searchItems(String query, int start, int size, Locale l)
throws CatalogDAOSysException;
}
Bridge模式中参与者还需要有行ؓ接口的具体实?ConcreteImplementor),在本例中是CatalogDAOImpl,虽然在目前宠物店中只有一个ConcreteImplementor,但是可扩展ؓ到Mysql XML{数据源讉K,比如你可以自己新增一个叫CatalogDAOImplMysqlQ也是作为CatalogDAO的子cR?br />
看看CatalogDAO的一个子cCatalogDAOImpl的代码:
public class CatalogDAOImpl implements CatalogDAO {
protected static DataSource getDataSource()
throws CatalogDAOSysException {
try {
InitialContext ic = new InitialContext();
return (DataSource) ic.lookup(JNDINames.CATALOG_DATASOURCE);
}
catch (NamingException ne) {
throw new CatalogDAOSysException("NamingException while looking "
+ "up DB context : "
+ ne.getMessage());
}
}
//具体Select语句在这里出玎ͼq里主要是Oracle 数据库的讉K语句
public Category getCategory(String categoryID, Locale l)
throws CatalogDAOSysException {
Connection c = null;
PreparedStatement ps = null;
ResultSet rs = null;
Category ret = null;
try {
c = getDataSource().getConnection();
ps = c.prepareStatement("select a.catid, name, descn "
+ "from (category a join "
+ "category_details b on "
+ "a.catid=b.catid) "
+ "where locale = ? "
+ "and a.catid = ?",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ps.setString(1, l.toString());
ps.setString(2, categoryID);
rs = ps.executeQuery();
if (rs.first()) {
ret = new Category(rs.getString(1).trim(),
rs.getString(2),
rs.getString(3));
}
rs.close();
ps.close();
c.close();
return ret;
}
catch (SQLException se) {
throw new CatalogDAOSysException("SQLException: "
+ se.getMessage());
}
....
}
Bridge模式参与者ȝ如下Q?br />
商业逻辑抽象c?(CatalogEJB)
抽象的商业逻辑操作.
对DAOImplementor调用.
不关心是具体什么数据源被?无论是Oracleq是JDBCq是XML).
DAO(Data Access Object) (CatalogDAO)
Ҏ据源的抽象操作行?
提供了非常方便访问和l护理数据的APIl构.
DAOImplementor (CatalogDAOImpl 有可能有CatalogDAOImplSybase CatalogDAOImplMysql {?
实现具体的DAO接口内容.
使用Adapter模式Q将特定的数据源驱动接口适配到DAO接口中去
数据?( Oracle, or Sybase database via JDBC API)
提供讉K具体数据库的驱动接口Q如包括q接池等.
在用数据源驱动接口Ӟ需要用Adapter模式QAdapter模式两个不相关的类U合在一起用,Adapter模式实际是用组?composition)和?inheritance)两种方式再生c,在著名的"think in Java"?cd?专门提到q两个方?
很显Ӟ如果你对Bridge模式和Adapter模式熟悉Q那么对宠物店中的Catalog理解׃非常快,同样Q在宠物店其他部分如订单 用户注册 {都能迅速理解?br />
Factory模式和Singleton模式
该模式类似newQ是用来创徏对象的,使用Factory模式是ؓ了实现面向对象的基本原则.装(Encapsulation)和分z?Delegation);创建对象与使用对象q行分工。因此在qx开发过E中Q尽量用Factory模式创徏对象?br />
本例CatalogEJB中是使用Factory模式获得一个DAO的具体实例对象,见上面CatalogEJB代码中注释。我们看看CatalogDAOFactory的代?
public class CatalogDAOFactory {
public static CatalogDAO getDAO() throws CatalogDAOSysException {
CatalogDAO catDao = null;
try {
InitialContext ic = new InitialContext();
String className = (String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
catDao = (CatalogDAO) Class.forName(className).newInstance();
} catch (NamingException ne) {
...
}
return catDao;
}
在CatalogDAOFactory可以依据pȝ的配|文Ӟ动态获得DAO的方法,之所以采取动态方式,当然便于用户自己增加自己的DAO方式Q而不必修改代码,只要直接修改配置文g可以?br />
如果在这里只需要CatalogDAOFactory产生一个实?可以采取Singleton模式,Singleton的目的是控制cd例对象的创徏Qƈ且允许整个程序只在一点对它进行访问。Singleton本ncd能创Z?是单U程?br />
public class CatalogDAOFactory {
private static CatalogDAO catDao = null;
public static CatalogDAO getIntance(){
if (catDao==null)
try {
InitialContext ic = new InitialContext();
String className =
(String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
catDao = (CatalogDAO) Class.forName(className).newInstance();
} catch (NamingException ne) {
...
}
}
return catDao;
}
}
那么在CatalogEJB的调用从
dao = CatalogDAOFactory.getDAO();
要改?br />dao = CatalogDAOFactory.getIntance();
Facade模式
在EJB应用中,有两个端点,q一端是用户端,另外一端是EJB,通常在这两个端点间会增加一层,用来松散两个端点之间的耦合Q比如在宠物店例子中,考虑C同n份的用户有不同的操作程Q比如顾客注册进入后Q需要浏览目录,下订单,而商店管理者进入后需要确认或者否定订单,或者检查库存。这些功能需要借助Session bean和Entity bean完成?br />
但是如果用户端直接和q些bean互动,会有以下问题:
1. 用户端必L意和q些beans的所有有联系或互动的事情Q无法阻止用L可能不恰当的使用q些beans.
2.如果EJB的API改动Q那么用L的一些代码也要修攏V无疑扩展性很差?br />3.即ɘq些beans都在同一台服务器上,用户端还是用remote方式来调用它们,造成|络无故拥挤?br />
那么我们使用Facade模式来解册个问题,Facade的定义是为子pȝ中的一l接口提供一个一致的界面,很显然我们需要ؓq些bean提供一个统一的对外界面。如下图Q?br />
在宠物店中,ShoppingClientFacadeLocalEJB是面Ҏ有用L操作的统一界面Q用L操作׃直接和那些EJB如CustomerEJB或ShoppingCartEJB有联p?而是都通过ShoppingClientFacadeLocalEJB来联pȝ。代码如下:
public class ShoppingClientFacadeLocalEJB implements SessionBean {
...
//和CustomerEJB联系
public CustomerLocal getCustomer() throws FinderException {
if (userId == null) {
...
}
try {
InitialContext ic = new InitialContext();
Object o = ic.lookup("java:comp/env/ejb/petstore/local/customer");
CustomerLocalHome home =(CustomerLocalHome)o;
customer = home.findByPrimaryKey(userId);
} catch (javax.naming.NamingException nx) {
...
}
return customer;
}
.....
//和ShoppingCartEJB联系
public ShoppingCartLocal getShoppingCart() {
if (cart == null) {
try {
InitialContext ic = new InitialContext();
Object o = ic.lookup("java:comp/env/ejb/cart/Cart");
ShoppingCartLocalHome home =(ShoppingCartLocalHome)o;
cart = home.create();
} catch (javax.ejb.CreateException cx) {
...
}
}
return cart;
}
....
}
Facade模式参与者:
SessionFacade (ShoppingClientFacadeLocalEJB)
提供一l操作流E?
真正工作委托到EJB的bean.
EJB的bean (CustomerEJB, ShoppingCartEJB{等)
执行基本的商业逻辑操作
没有M对SessionFacade的调?
q样不但可扩展性大大增强,效率也提高了Q用L只需要一ơRemote对SessionFacade调用可以了Q而SessionFacade会自动定位到与它同一台服务器的那些邻居bean(CustomerEJB, ShoppingCartEJB{等),无疑减少|络拥挤Q提高了速度.
ȝ
在EJB的具体用中Q用合适的设计模式Q不但代码可重用?可拓展性增强,最重要的是能提高效率和速度Q我们知道EJB框架׃考虑大型pȝ中事务安全等各方面问题,效率性能有所Ơ缺Q那么我们在具体问题具体应用Ӟ使用设计模式可以弥补q个问题?br />
例如Proxy模式可以为我们在讉K巨大的需要花费一定时间才能展开的对象时Q提供一个代理,q样不会因ؓ那个巨大对象而媄响当前运行速度QEJB中的那些bean很显然属于巨大对象(因ؓ它们有反复的数据库操作,q些很费旉〕?br />
Flyweight模式是避免大量拥有相同内容的类的开销(如耗费内存),使大家共享一个类(元类).当你要从EJB中获取一pd字符?而这些字W串中肯定有许多是重复的,那么我们可以这些重复的字符串储存在Flyweight?pool)中以辑ֈ׃n?br />
]]>class ReadExcelByJxl
{
public static void main(String [] args)
{
try
{
//构徏Workbook对象, 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创徏Workbook
InputStream is = new FileInputStream("Electrolux_images_PM400download_complete.xls");
jxl.Workbook rwb = Workbook.getWorkbook(is);
Sheet[] rs = rwb.getSheets();
for(int i = 0; i < rs.length; i++)
{
Cell cellUrl = rs[i].findCell("Location URI \n(to be entered by Dalian)");
int row = cellUrl.getRow();
int column = cellUrl.getColumn();
String loUri = rs[i].getCell(column + 2, row).getContents();
System.out.println(loUri);
}
]]>
axis的配|很单,q程如下
1. axis-src-1_2_1q个包解压后Q将axis-1_2_1\webapps下axis的所有东西拷贝到你刚刚徏立的TOMCAT的webapps下。目录结构如下:
然后查看一下你的axis的WEB-INF的lib?.jar文g是否全,应该??br />axis.jar
axis-ant.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j-1.2.8.jar
saaj.jar
wsdl4j-1.5.1.jar
(一定看好各个文件的文g名,一会将配置CLASSPATH)
axis的安装向D要求其他的几?jar文gQ包括xerces.jarQ和mail.jar.q些都可以在Apache|站上找?
2. 然后到axis-1_2_1目录?扑ֈlib文g?拯其中的activation.jar文g,?br />Tomcat\webapps\axis\WEB-INF\lib,和上面的8个jar文g在一POK了?br />3.剩下的就是整个过E中最为关键的部分Q如果弄不好你需要走很弯路的?br />关于classpath 的设|,包括两部分。一. 有关Tomcat的classpath的设|,q一部分是最Ҏ被忽视的Q很多关于axis的安装的文章都没有讲。这׃你在后面遇到很多问题Q首先如果这部分没有讄Q即使你后面关于axis的classpath讄的完全正,在编写客L试Web Service 是也会出现错误。而且q时候,你的axis已经可以q行Q你写的单的HelloWorld.jws也没什么问题,能看到相应的SOAP消息。但是你的客LE序却出问题了,你可以正常编译,不会出现错误。但q行时会出现诸如Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis/client/Service此类的异常,q种错误通常是最令h痛苦的?br />关于Tomcat的classpath一要注意,如果你是通过Windows安装E序安装Ӟq是你的pȝ中已l有了TOMCAT_HOMEQ和JAVA_HOME 环境变量Q此时你要做的就是添加classpath环境变量Q如果你q没有添加的话,具体做法我就不用说了Q很单的基础知识Q,classpath的设|如?br />classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(.;是必需的,它指代当前目?
然后修改环境变量中的classpathQ把tomat安装目录下的common\lib下的(可以Ҏ实际q加)servlet.jarq加到classpath中去Q修改后的classpath如下Q?
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;
4.接下来就是关于axis的环境变量的讄了,向导上讲的很清楚。就把原文直接考过?br />set AXIS_HOME=c:\axis
set AXIS_LIB=%AXIS_HOME%\lib
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;
%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
注意一点,.jar文g要与你的解压的axis目录中的文g名一_׃版本问题Q文件名可能不一致?/font>5 . 试
此文g命名?wsTestService.jws 存放?br />Tomcat的\webapp\axis\目录?br />讉K http://localhost:8080/axis/wsTestService.jws, 出现 "There is a Web
下面是一个简单的WebService, 供测试?/font>
Q代码是转脓Q呵呵)import java.util.*;
public class wsTestService
{
String strName = "Ryun";
int intAge = 21;
List items = new ArrayList();
public String getName()
{
return strName;
}
public int getAge()
{
return intAge;
}
public List getItems()
{
return items;
}
}
开发一?Web Service 客户端程?br />建立客户端程序wsTestClient.java
以下是客L的源E序, 用于?Web Service Server 提交服务h:import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class wsTestClient
{
public static void main(String args[])
{
System.out.println("Start invoking
");
try
{
String strUri =
"http://localhost:8080/axis/wsTestService.jws";
Service service = new Service();
Call call = (Call)
service.createCall();
call.setTargetEndpointAddress(new
java.net.URL(strUri));
call.setOperationName("getName");
String ret = "" + call.invoke(new Object[]
{});
System.out.println("I am " + ret + ".");
}
catch (Exception e)
{
System.err.println(e.toString());
}
System.out.println("Finished the invoking.");
}
}
C:\>javac wsTestClient.java
C:\>java wsTestClient
Start invoking...
I am Ryun.
Finished the invoking.
完成Q再d习,E后ȝ
但这时还有一个问题,我还没有解决Q关于log4j的一个warnQ不知道该如何配|log4jQ懒得再L{案了。axis的相关问题搜索了两天了才有个l果Qlog4j的问题以后有旉再弄吧?br />
]]>
2. cd前不能有修饰W?br />3. cM不能有构造方法,因ؓ它没有名字。在构造对象是使用父类的构造方法。如果实现接口,则接口后面的圆括号不能带参数?
class TestInnerAnonymous
{
public static void main(String[] args)
{
Object obj = new Outer().makeTheInner(47);
System.out.println("Hello World" + obj.toString());
}
}
class Outer
{
private int size = 5;
public Object makeTheInner(int localVar)
{
final int fianlLocalVar = 99;
return new Object()
{
public String toString()
{
return ("InnerSize" + size + "finalLocalVar:" + finalLocalVar);
}
};
}
}
注意Q匿名类属于Ҏ内嵌c,不可以用父cȝ成员
抽象cM接口的区别:
抽象cd以有非抽象的ҎQ有构造函数?br />抽象cL它所有子cȝ公共属性的集合Q抽象类不能被实例化Q它的构造函数是提供l它的子c调用的?br />被abstract所修饰的方法叫抽象ҎQ格式如?br />abstract returnType abstractMethod([paramlist]);
抽象cM可以包含抽象ҎQ也可以不包含abstractҎ。但是,一旦某个类中包含了抽象ҎQ则q个cdd明ؓabstractcR即abstractҎ必须位于abstractcM?br />接口是方法和帔R?/font>得集合?br />
]]>
下面用了递归,可以清楚的看C所要创建的表格层数都创Z,只是到显C的时?从第28层之后都不能昄出来而已.
至于Z么显CZ?我也不得而知.
点击下面的代?查看l果:
Platform
Location
Protocols
Programming language
Invocation patterns
Service versioning
Service model
Information model
Data format
Enterprise services share some or all of these characteristics that impact what actions the service performs, how it does so, and whom it interacts with. These services can be reclassified in the SOA model and placed into new domains that describe what function they perform in the overall model. An analysis of the preceding list identifies at least four different domains of architecture, along with subdomains that influence where a service can exist and the function it performs. These domains and subdomains, discussed later in this chapter, are as follows:
Infrastructure services domain with subdomains
Utility business services
Service-level automation and orchestration
Resource virtualization
Middleware domain
Business services domain
Application services domain with subdomains
Application programming model subdomain
Off-the-shelf commercial software subdomain
Information management subdomain
It is essential to maintain a separation of concerns and domains. In an enterprise, these domains can have separate implementations using any permutation of packaged applications, custom applications, existing infrastructure, and external or outsourced services.
引用别h的话"它不是一门技?更不能把它刻录到光盘d什么的..它提供的是一U思想!想OO思想一?
IBM WebSphere Integration Developer, Version 6 software is Eclipse technology-based tooling designed to enable you to rapidly assemble business solutions based on a composite application development framework and using minimal programming skills.
Its graphically rich interface allows developers to create composite business applications by wiring service components with minimal skills and agnostic of underlying programming implementations. It has fully integrated testing, debug and deployment environment that allows you to easily deploy to WebSphere Process Server. Once deployed, you can dynamically change and adapt to changes with its rich features, such as business rules, selectors, and state machines.
WebSphere Process Server includes three layers:
SOA core
Supporting services
Service components
Role resources matrix
Duration matrix
Availablity matrix
Decision probabilities