阳光男孩

Never give up!

Entries Tagged ‘应用’

JAVA可移植性广泛应用

0顶一下JAVA可移植性广泛应用。软件可移植性指与软件从某一环境转移到另一环境下的难易程度。为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境。尽量不用与系统的底层相关性强的语言。下面介绍JAVA的可移植性。 一、JAVA作为一种编程语言:源代码可移植性 作为一种编程语言,JAVA提供了一种最简单同时也是人们最熟悉的可移植性–源代码移植。这意味着任意一个JAVA程序...[阅读全文]

0
顶一下

JAVA可移植性广泛应用。软件可移植性指与软件从某一环境转移到另一环境下的难易程度。为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境。尽量不用与系统的底层相关性强的语言。下面介绍JAVA的可移植性。

一、JAVA作为一种编程语言:源代码可移植性

作为一种编程语言,JAVA提供了一种最简单同时也是人们最熟悉的可移植性–源代码移植。这意味着任意一个JAVA程序,不论它运行在何种CPU、操作系统或JAVA编译器上,都将产生同样的结果。这并不是一个新的概念。人们使用C、C++也可以产生同样的效果。

但是使用C或C++编程人们可以有太多的选择,在许多细节上它都没有严格定义,如:未初始化变量的值、对已释放的内存的存取、浮点运算的尾数值等等。所以除非你一开始就严格按照系统无关的概念来进行设计,否则这种可移植性只能是一种理论上的设想而不能形成实践。

总之,尽管C和C++有严密的语法定义,它们的语意(symantics)定义还不是标准的。这种语意上的不统一使得同一段程序在不同的系统环境下会产生不同的结果。有时即使系统情况完全相同而仅仅由于编译器的设置不同也会产生令人意想不到的结果。而JAVA就不同了。它定义了严密的语意结构,而使编译器不承担这方面的工作。

另外,JAVA对程序的行为的定义也比C和C++严格,如:它提供了内存自动回收功能(GarbageCollection),使程序不能访问越界内存;它对未初始化的变量提供确定值等等。它的这些特性能够减小在不同平台上运行的JAVA程序之间的差异,也使得JAVA具有即使没有JAVA虚拟机的存在的情况下比C和C++更好的平台无关性。

然而,这些特点也有它不利的一面。JAVA设想运行于具有32位字节长度且每字节为8位的计算机上,这就使得那些8位字长的计算机和一些巨型机不能有效的运行JAVA程序。在这样的平台上就只能运行那些可移植的C和C++程序了。

二、JAVA作为一个虚拟机:CPU可移植性

大多数编译器产生的目标代码只能运行在一种CPU上(如Intel的x86系列),即使那些能支持多种CPU的编译器也不能同时产生适合多种CPU的目标代码。如果你需要在三种CPU(如x86、SPARC和MIPS)上运行同一程序,就必须编译三次。

但JAVA编译器就不同了。JAVA编译器产生的目标代码(J-Code)是针对一种并不存在的CPU–JAVA虚拟机(JAVAVirtualMachine),而不是某一实际的CPU.JAVA虚拟机能掩盖不同CPU之间的差别,使J-Code能运行于任何具有JAVA虚拟机的机器上。

虚拟机的概念并不是JAVA所特有的:加州大学几年前就提出了PASCAL虚拟机的概念;广泛用于Unix服务器的Perl脚本也是产生与机器无关的中间代码用于执行。但针对Internet应用而设计的JAVA虚拟机的特别之处在于它能产生安全的不受病毒威胁的目标代码。正是由于Internet对安全特性的特别要求才使得JVM能够迅速被人们接受。当今主流的操作系统如OS/2、MacOS、Windows95/NT都已经或很快提供对J-Code的支持。

作为一种虚拟的CPU,JAVA虚拟机对于源代码(SourceCode)来说是独立的。我们不仅可以用JAVA语言来生成J-Code,也可以用Ada95来生成。事实上,已经有了针对若干种源代码的J-Code编译器,包括Basic、Lisp和Forth.源代码一经转换成J-Code以后,JAVA虚拟机就能够执行而不区分它是由哪种源代码生成的。这样做的结果就是CPU可移植性。
将源程序编译为J-Code的好处在于可运行于各种机器上,而缺点是它不如本机代码运行的速度快。

三、JAVA作为一种虚拟的操作系统(OS)和图形用户界面(GUI):操作系统可移植性

即使经过重新编译,大多数的用C和C++编写的Windows程序也不能在Unix或Macintosh系统上运行。这是为什么呢?因为程序员在编写Windows程序时使用了大量的WindowsAPI和中断调用,而Windows程序对系统功能的调用与Unix和Macintosh程序有很大的差别,所以除非将全套WindowsAPI移植到其它操作系统上,否则重编译的程序仍不能运行。

JAVA采用了提供一套与平台无关的库函数(包括AWT、UTIL、LANG等等)的方法来解决这个问题。就象JVM提供了一个虚拟的CPU一样,JAVA库函数提供了一个虚拟的GUI环境。JAVA程序仅对JAVA库函数提出调用,而库函数对操作系统功能的调用由各不同的虚拟机来完成。

JAVA也在它的OS/GUI库中使用了一种“罕见名称符”(least-commom-denominator)来提供对某种特定操作系统的功能调用,即此功能只在特定环境下生效而在其它操作系统下则被忽略。

这样做的好处在于可以针对某操作系统生成拥有人们熟悉的界面的应用程序而同时此程序又能在其它系统下运行。缺点则是系统中的某些功能调用有很强的依赖性因而在JAVA的虚拟OS/API中难以实现。遇到这种情况,程序员就只能写不可移植的程序了。

总之,JAVA在可移植性方面的特点使它在Internet上具有广泛的应用前景。同时它本身具有的防病毒的能力也使它在需要高可靠性的应用中占有一席之地。

Comments (1)

简单介绍J2EE应用的五种核心策略

0顶一下对于J2EE,我们知道当开发应用时,在架构设计阶段的决定将对应用的性能和可扩展性产生深远的影响。现在当开发一个应用项目时,我们越来越多地注意到了性能和可扩展性的问题。应用性能的问题比应用功能的不丰富问题往往更为严重,前者会影响到所有用户,而后者只会影响到碰巧使用该功能的那些用户。 作为应用系统的负责人,一直被要求”要少花钱多办事”—-用更少的硬件,更少的网络带...[阅读全文]

0
顶一下

对于J2EE,我们知道当开发应用时,在架构设计阶段的决定将对应用的性能和可扩展性产生深远的影响。现在当开发一个应用项目时,我们越来越多地注意到了性能和可扩展性的问题。应用性能的问题比应用功能的不丰富问题往往更为严重,前者会影响到所有用户,而后者只会影响到碰巧使用该功能的那些用户。
作为应用系统的负责人,一直被要求”要少花钱多办事”—-用更少的硬件,更少的网络带宽,以及更短的时间完成更多的任务。J2EE通过提供组件方式和通用的中间件服务是目前首选的最优方式。而要能够构建一个具有高性能和可扩展性的J2EE应用,需要遵循一些基本的架构策略。
 缓存(Caching)
  简单地说,缓存中存放着频繁访问的数据,在应用的整个生命周期中,这些数据存放在持久性存储器或存放在内存中。在实际环境中,典型的现象是在分布式系统中每个JVM中有一个缓存的实例或者在多个JVM中有一个缓存的实例。
缓存数据是通过避免访问持久性存储器来提高性能的,否则会导致过多的磁盘访问和过于频繁网络数据传输。
 复制
  复制是通过在多台物理机器上创建指定应用服务的多个拷贝来获得整体更大吞吐效率。理论上看,如果一个服务被复制成两个服务,那么系统将可处理两倍的请求。复制是通过单一服务的多个实例的方式从而减少每个服务的负载来提高性能的。
  并行处理
  并行处理将一个任务分解为更为简单的子任务,并能够同时在不同的线程中执行。
并行处理是通过利用J2EE层执行模式的多线程和多CPU特点来提高性能。与使用一个线程或CPU处理任务相比,以并行方式处理多个子任务可以使操作系统在多个线程或处理器中进行分配这些子任务。
 异步处理
  应用功能通常被设计为同步或串行方式。异步处理只处理那些非常重要的任务部分,然后将控制立即返回给调用者,其他任务部分将在稍后执行。
异步处理是通过缩短那些在将控制返回给用户之前必须处理的时间来提高性能的。虽然都做同样多的事情,但是用户不必等到整个过程完成就可以继续发出请求了。
  资源池
  资源池技术使用的是一套准备好的资源。与在请求和资源之间维持1:1的关系的不同,这些资源可被所有请求所共享。资源池的使用是有条件的,需要衡量下面两种方式的代价:
A、维持一套可被所有请求共享资源的代价
B、为每个请求都重新创建一个资源的代价
当前者小于后者时,使用资源池才是有效率的。
希望通过本文介绍的是J2EE中的五个核心策略,对你有帮助。

Comments (5)

分布式Java应用和SOA

0顶一下当我们所做的系统到一定的程度后,随着涉及的领域越来越宽泛,客户群也越来越多,我们的系统不得不需要第三方系统协作,或者将原有大系统分解成各个协作的小系统才能更好地完成任务。就好像KFC,收银员就负责客户端点餐、收银、找零钱、开发票是一个接待人员完成。而真正为您做餐的又分为比较复杂的分工,比如负责炸薯条的人、做汉堡的人、还有做盖饭的(KFC的盖饭,唉~~不说了)。而为这...[阅读全文]

0
顶一下

当我们所做的系统到一定的程度后,随着涉及的领域越来越宽泛,客户群也越来越多,我们的系统不得不需要第三方系统协作,或者将原有大系统分解成各个协作的小系统才能更好地完成任务。就好像KFC,收银员就负责客户端点餐、收银、找零钱、开发票是一个接待人员完成。而真正为您做餐的又分为比较复杂的分工,比如负责炸薯条的人、做汉堡的人、还有做盖饭的(KFC的盖饭,唉~~不说了)。而为这些做餐人员提供物料供给的又是另一些人。还有就是KFC外卖送,店员管理经理,是这些人撑起了一个KFC店面。每个人负责的分工都不一样,每个部门人员的分工都和别的部门人员的分工有交互才能完成客户整个的“吃饭”需求。当然了,KFC还提供了洗手间,里面有专门的保洁人员。

从实例看我们IT界吵了这么多年的SOA吧,说通俗了,他就是想让大型的软件系统像KFC这种提供服务类似,内部是各个小系统(相对于整个大系统来说的,有可能这里面每个小系统的规模都是十分大的),有可能内部员工来自于不同的国家,他们之间都使用统一的标准语言——英语进行交流。

Java的分布式系统一般都会遇到异构系统之间的交互,而且这些异构系统99.9%都是在不同物理位置的,需要网络进行通讯,互协作。也就是说当系统一大了,就要面临将群雄割据的系统逐一驯化,使之Java分布之系统为我辈所用。

问题

SOA让不同的系统之间使用标准的规范进行通讯,而每个系统暴露出来的功能,SOA称之为“服务”(Service),为客户服务得到位不到位,全看整个大系统运作流不流畅。系统之间没有SOA规范之前可能也进行过整合,协作,但是那个时候没有一个标准的规范限制住通讯的协议,那么造成一个现象就是:系统A与系统B进行因为不同语言,要进行协作使用的是WebService,而系统B与系统C因为大多数功能都是用Java实现的,他们之间可能出于同语言的原因,使用JMS进行通讯协作就够了。而过些时间又出来一个系统D,需要系统A与系统C同时与之协作才能完成一个复杂的业务逻辑了,怎么办?有可能同语言,采用更为古老的RMI,有可能直接写个socket通讯就OK。

基于以上的各种现象不同系统之间是采用不同的通讯技术或者说通讯规范的,那么就要求开发这个大系统的每个人都得需要了解其他很多种通讯规范,针对不同的协作系统的更改,进行相应的修改。这样就好比KFC的员工都说自己国家的语言,想和我交流吗,OK,先学学我们国家的语言咱们再交流。难道客户在柜台那边等着你们将员工内部所有的国语都学了个遍,交流顺畅了再要吃的??客户说算了,还是“更多快乐,更多欢笑尽在麦当劳吧。要不早饿死了……”

所以说不同系统,尤其是异构的系统之间采用一个标准的协议进行规范,大家都按照这个标准规范来,以上各自为政的现象就能够得以解决。

SOA规范的要求

SOA的规范要达到的要求主要有以下几点:

·统一的交互方式:这个目标就是解决上面异构系统之间的通讯问题

·服务品质:也叫做QoS,包括了通讯的安全,可靠的访问。每个服务能支撑的访问量是有限的,流量控制,机器资源负载分配等等措施都是保证服务质量的。

·依赖管理:大系统内部往往是小系统之间的耦合工作来完成,那么系统和系统间少不了就要产生耦合,或者说是依赖。那么SOA就需要有解系统间耦合的规定,不能让不同系统强制耦合在一起。

·高性能,高可用:协作的系统,当然要性能过关,客户用着用着说,怎么报出Exception了,或者说“系统正在维护,请耐心等待”?就好像客户在KFC吃汉堡包吃出了……(不说了),那么这客户下次肯定不来KFC了,而且还向他的朋友说KFC怎么怎么样……

与其说SOA提出这些规范,不如说SOA提出了这些目标。实现了这些目标,那么至少说您的大系统、大软件是符合SOA规范的。

实现SOA规范的,可参考的标准有SCA和ESB。

SOA实现

首先大家不要误会,SCA和ESB不是2个对立的东东,他们不是麦当劳和肯德基,他们的关系类似于JPA规范和Hibernate实现之间的关系。ESB更像是个抽象的概念,而SCA是一个面向应用的编程和组装方式。使用SCA,开发人员基本不用考虑技术接口, 代码是纯业务逻辑。

SCA的发布服务:

SCA为了减少对现有系统的入侵,将现有系统的服务类抽象成接口,当然如果原先就是接口+实现类就更方便了。通过SCA配置默认将系统接口暴露成为SCA服务。至于具体的配置文件格式和相关实现类的配置Demo在此先暂时放一放。

SCA的调用服务:

调用服务的方式可以采用xml配置实现,借助Spring集成相关SCA框架的整合可以很方便的使用SCA服务完成自己的业务。这个有点类似Spring集成CXF,这个内容在此也先不介绍。

SCA支持的通信及其交互方式:

SCA规范规定通讯方式有3种方式,JMS、WebService、跟情况而定,如果应用处于同一JVM采用JMS,不同则采用WebService。当然了,通过扩展SCA也可以支持其他通讯方式。

对于系统间的依赖管理SCA并没做太多解决的规范,而调试跟踪也没提出具体规定性的方案。这当然取决于具体的SCA实现框架,或者借助其他开源工具,比如Maven、TestNG整合等等手工措施待见属于你们公司自己的基于SOA思想的SCA平台。

ESB和SCA不是竞争关系,ESB算是提出一些基于SOA理念的一些抽象概念,核心思想是基于消息中间件来实现系统之间的交互,将系统要通讯的消息动作放到一个统一的寻呼台(消息中间件),处理消息队列的时候,消息自身带着目的信息,之后就发送过去,完成业务逻辑,就相当于麦当劳有个中央总控,所有人都有一个随身携带着的寻呼机,客户来了买餐,前台打开寻呼机往中央寻呼台发送一条消息:“客人点餐,儿童套餐”,发送完毕后,中央寻呼机将此消息发给了后厨,后厨赶紧炸薯条,烤面胚,微波炉热牛肉。一切皆由消息总线进行任务分发。

其实ESB相当于承担了SOA提出的统一服务方式进行交互。

ESB框架需要具备以下功能:

·标准通讯格式:方便系统间进行通讯

·消息路由:根据消息的目的地将消息发送至消息目的地,整合分系统统一成完整大系统,这点BPEL做得十分到位。

·支持消息的请求相应、订阅分发2种模式进行。

·支持多网络协议:http、TCP、UDP

·解决多种数据格式进行交换,数据间的请求数据格式有可能存在差异,消息总线要屏蔽这种差异。

综上所述,实现JMS规范的各种消息中间件,怎么看怎么和ESB所提出的规范相吻合。

总结

这次介绍了相应的分布式系统的特点和SOA提出来的目的,做大型企业分布式系统,利用SOA进行系统整合、一统的意义。当然这次仅仅是抽象概念的一些介绍。之后会有相关内容作为其SCA规范、ESB规范的具体代码实现的。

SOA已经不是什么新鲜词语了,笔者的感觉现在搞软件研发越来越像服务行业了,面对客户,面对客户的客户,我们只有提升自己的服务质量,才能营造更好的品牌效益。还是那句老话,任何技术的推动背后都是商业运作。

Comments (17)

Cookie技术在J2ME平台的应用

0顶一下本文向大家简单介绍一下cookie技术在J2ME平台的应用与实现,首先,我们来看一下cookie的原理。当服务器需要和浏览器维持某一状态的时候,例如需要记录用户的购物车中已经购买的商品。这时候服务器可以新建一个Cookie并把它写入到响应中,浏览器从响应中接收到cookie并保存起来。 cookie技术在J2ME平台的应用与实现 Cookie在Web应用程序中被广泛采用,维护浏览器和服务器之间的状态。遗憾...[阅读全文]

0
顶一下

本文向大家简单介绍一下cookie技术在J2ME平台的应用与实现,首先,我们来看一下cookie的原理。当服务器需要和浏览器维持某一状态的时候,例如需要记录用户的购物车中已经购买的商品。这时候服务器可以新建一个Cookie并把它写入到响应中,浏览器从响应中接收到cookie并保存起来。

cookie技术在J2ME平台的应用与实现

Cookie在Web应用程序中被广泛采用,维护浏览器和服务器之间的状态。遗憾的是这一特性在JavaME平台中并没有得到支持。因此,要想维持客户端和服务器端的状态则必须使用URL重写的方式。URL重写操作起来比较麻烦,所以研究一下cookie的原理并在JavaME平台上实现cookie是不错的尝试。

首先,我们来看一下cookie的原理。当服务器需要和浏览器维持某一状态的时候,例如需要记录用户的购物车中已经购买的商品。这时候服务器可以新建一个Cookie并把它写入到响应中,浏览器从响应中接收到cookie并保存起来。当浏览器再次向服务器发送请求的时候,浏览器会根据域(domain)和路径(path)检查是否有匹配的cookie,如果有则把cookie以“名称=值”的形式发送给服务器,服务器从请求中解析出cookie就知道用户的状态了。

那么,浏览器根据什么规则来决定向服务器发送cookie呢,首先要匹配domain,如果cookie的域属性是。google.com,那么请求指向j2medev.com的时候,cookie就不会被发送。如果域匹配的条件满足,则判断path是否匹配,如果cookie的path属性是请求的uri的父目录的话,那么cookie就会被发送给服务器。Cookie是有存活周期的,到期的cookie会被浏览器自动清除。如果服务器创建cookie的时候不设置生命周期,那么在会话结束后浏览器就会删除cookie.如果不为cookie指定path属性,那么默认就是这次请求的路径。

cookie在很多web应用程序中都有应用,比如记住密码,购物车等。在开发MIDlet的时候,你也可以让你的应用程序支持cookie,这样维持客户端与服务器端的状态将变得简单,为你集中精力解决其他业务方法奠定了基础。既然已经知道了cookie的工作原理,那么就应该考虑一下在JavaME平台如何实现cookie,这个想法是否可行。我将从下面三个方面进行分析。

第一:获得cookie

当服务器端的响应到来的时候,我们应该能够读取cookie。如果服务器向客户端写入Cookie的时候,响应中的HTTP头“Set-Cookie”中会包含一个字符串,代表了cookie的信息。幸运的是我们是用HttpConnection.getHeaderFiled(“Set-Cookie”)方法即可获得cookie,但是需要注意这里只是读取了一个cookie,如果响应中包含了多个cookie,那么你需要循环读取。类似于下面的代码:

StringsCookie=null;
Stringkey=null;
inti=0; //如果key存在,则查询header的key,如果key等于SET_COOKIE,则存储
while((key=connection.getHeaderFieldKey(i))!=null)
{
if(key.equals(SET_COOKIE)||key.equals(SESSIONID))
{
sCookie=connection.getHeaderField(i);
saveCookie(sCookie,url);
}
i++;
}

上面的代码把header是Set-Cookie和SesssionID的cookie内容读取下来。

第二:保存cookie

已经获得了cookie之后,就需要把cookie存储下来,存储分为两个部分,首先需要解析cookie,我们定义一个JavaBean来代表cookie.

packagecom.j2medev.lomol.model;
importcom.j2medev.lomol.util.StringUtil;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.util.Date;
/**  *acookiestoredonthemobiledevice,
cookieisusedtomaintainthestatesbetweenclientandserver
*@authormingjava
*@version0.105/06/2006
*/
publicclassCookie{
privateStringpath=”";
privateStringname=”";
privateStringvalue=”";
privatelongexpire=SESSION_COOKIE;
publicstaticlongSESSION_COOKIE=0;
//sessioncookie,onlyvalidthissession
publicCookie(){  }
publicStringgetPath(){  returnpath;  }
publicvoidsetPath(Stringpath){  this.path=path;  }
publicStringgetName(){  returnname;  }
publicvoidsetName(Stringname){  this.name=name;  }
publicStringgetValue(){  returnvalue;  }
publicvoidsetValue(Stringvalue){  this.value=value;  }
publicvoidserialize(DataOutputStreamdos)
throwsIOException{
dos.writeUTF(name);
dos.writeUTF(value);
dos.writeUTF(path);
dos.writeLong(expire);
}
publicstaticCookiedeserialize(DataInputStreamdis)throwsIOException{
Cookiecookie=newCookie();
cookie.name=dis.readUTF();
cookie.value=dis.readUTF();
cookie.path=dis.readUTF();
cookie.expire=dis.readLong();
returncookie;
}
publiclonggetExpire(){
returnexpire;
}
publicvoidsetExpire(longexpire){  this.expire=expire;
}
//fordebug
publicStringtoString(){
returnname+”=”+value+”;expires=”+newDate(expire)。
toString()+”;path=”+path;
}
publicbooleanisExpired(longnow){
returnexpire-now<0;
}
publicbooleanisExpired(){
returnexpire-(newDate()。getTime())<0;
}
publicstaticCookieparseCookie(Strings,Stringuri){
Cookiecookie=newCookie();
StringUtilsu=newStringUtil(s,”;”);
while(su.hasMoreTokens()){
Stringstr=su.nextToken()。trim();
inti=str.indexOf(”=”);
if(i==-1){
//securedonothing  continue;
}else{
Stringname=str.substring(0,i);
Stringvalue=str.substring(i+1,str.length());
if(”path”.equals(name)){
cookie.setPath(value);
}elseif(”expires”.equals(name)){
cookie.setExpire(StringUtil.getData(value));
}elseif(”domain”.equals(name)){
//donothing  }else{
cookie.setName(name);
cookie.setValue(value);
}  }
if(cookie.getPath()。equals(”"))
cookie.setPath(uri);  }  returncookie;  }
publicbooleanequals(Objectobj){
if(objinstanceofCookie){  Cookieo=(Cookie)obj;
if(o.getName()。equals(name)&&o.getPath()。equals(path))
returntrue;  }  returnfalse;  }
publicinthashCode(){  intresult=17;
resultresult=result*37+path.hashCode();
resultresult=result*37+name.hashCode();
returnresult;  }  }

提供了一个parseCookie方法来解析cookie,具体的原理就不再介绍了。然后需要把这个Cookie对象存储到RMS中。cookie并不大,所以不会占用太多的空间,在RMS中存储非常合适。注意对于会话期间的cookie没有必要存储在rms中,因为会话结束后就失效了,不如在内存中声明一个Map来存储会话类型的cookie。

第三:发送cookie

发送cookie也是需要两个步骤,首先检索rms和内存看是否有满足条件的cookie,如果有读取出来。

然后通过下面的方法向服务器端发送:

//检查是否有cookie需要发送给服务器端
String_cookie=collectCookie(url);
if(_cookie!=null)
connection.setRequestProperty(COOKIE,_cookie);

如果能够顺利解决上面的三个步骤,基本可以实现cookie在javame平台的应用。在《JavaME核心技术与最佳实践》一书中,本人编写了一个httpme联网框架,其中包括了cookie在javame平台的实现,供大家参考。

 

Comments (53)

浅谈SOA技术在企业ERP实施过程中的应用

1顶一下[导读]随着全球经济一体化进程的加速,企业面临的问题越来越复杂,传统ERP厂商由于原有产品的功能僵化,体系结构缺少灵活性,已不能满足客户不断变化 的个性化需求,ERP软件的发展遭遇了前所未有的挑战,ERP客户化的复杂性和实施成功率的低下成为困扰软件厂商和用户的难题。 一、 传统ERP面临的困境 随着全球经济一体化进程的加速,企业面临的问题越来越复杂,传统ERP厂商由于原有产品的...[阅读全文]

1
顶一下

[导读]随着全球经济一体化进程的加速,企业面临的问题越来越复杂,传统ERP厂商由于原有产品的功能僵化,体系结构缺少灵活性,已不能满足客户不断变化 的个性化需求,ERP软件的发展遭遇了前所未有的挑战,ERP客户化的复杂性和实施成功率的低下成为困扰软件厂商和用户的难题。

一、 传统ERP面临的困境

随着全球经济一体化进程的加速,企业面临的问题越来越复杂,传统ERP厂商由于原有产品的功 能僵化,体系结构缺少灵活性,已不能满足客户不断变化的个性化需求,ERP软件的发展遭遇了前所未有的挑战,ERP客户化的复杂性和实施成功率的低下成为 困扰软件厂商和用户的难题。

传统的ERP的主要局限性如下:

1.环境适应性的局限

(1)企 业外部环境变化。目前很多企业战略正从内部战略转向联盟体战略,这在企业管理领域是一个划时代的变化。传统的ERP在实现联盟体战略(即实现企业内部人 员、企业与业务伙伴、企业与客户之间的协同商务)时,遇到了不可逾越的鸿沟,不能灵活地支持供应链管理功能,不能实现企业与供应商、企业与分销商之问的信 息集成以及不同软件之间的互操作。

(2)企业内部环境变化。传统ERP不能适应企业内部经营管理模式的变化,企业组织架构、经营管理 模式的变化会导致原有的ERP系统需要重新开发或做较大的改进。造成投资浪费。

2.软件可扩展性的局限

因为传统 ERP中各业务模块之间是非松耦合的关系,某一块业务功能升级将引发整个ERP产品的升级,某一业务模块的调整将对整个公司或集团的信息处理工作带来影 响,如模块升级需要频繁停机安装和备份,甚至带来相关模块操作界面和流程的改变。

二、SOA概念、主要思想和实现方 法

1.概念

SOA(Servicp Oriented Architecture面向服务的体系结构)是由Gartner公司在1990年提出的,它根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部 署、组合和使用,是目前最流行的一种架构模型。SOA软件系统是由不同的功能单元(称为服务)组装而成,服务之间靠定义良好的接口和契约联系起来,这使得 构建在这样的系统中的各种服务以统一和通用的方式进行交互。

2.主要思想

SOA的主要思想是最大限度地重用现有 的服务以提高IT的适应性和效率。

3.实现技术

SOA目前最主要的实现方法是Web Services技术,实现Web Services的主流开发平台有J2EE平台和Microsoft.net平台,J2EE平台开发的系统因具有平台无关性、安全性、可伸缩性、不同供应 商实现方案之间的可移植性等若干优点而得到了广泛的应用。Web Services技术使用如下一系列标准和协议实现相关的功能:

(1)XML是一种流行的、独立于中间件的格式,可以在不同应用程序之间交换数据和文档。

(2)WSDL(Web Service Description Language)用于Web Service的提供者将自己的Web服务的所有相关内容,如所提供的服务的传输方式、服务方法接口、接口参数、服务路径等,生成相应的完全文档,发布给 使用者。

(3)UDDI(UniVersal Description,Discovery and Integeration)向服务注册代理描述、发布和注册Web服务,服务请求者通过UDDI进行查询.找到所需的服务。

(4)SOAP(Simple Object Access Protocol,简单对象访问协议)是Web Service的标准通信协议,采用标准化XML格式传输消息。Web Services标准的成熟和应用的普及为广泛地实现SOA架构提供了基础,Web Service技术实现了服务接口的传输和调用的标准化,服务接口和服务实现的分离,以及Web服务组件的可重用性。

三、 应用SOA构建ERP
随着网络技术飞速发展,软件架构日益向B/S结构迁移,为SOA在ERP中的实践提供了基础,同时中 间件和平台技术的成熟也给SOA在应用层面上的实践提供了有利的保障。

为了解决现有ERP系统难以重构,难以与企业之外的供应商、分 销商集成的问题,企业需要用一种手段,来消除上下游,以及企业内部应用的壁垒。实现信息、人员、流程的通畅,最佳的技术手段就是SOA。SOA是对企业各 种异构的信息孤岛进行整合的最有效方法,可以实现企业和组织的信息共享,提升人员协同能力以及业务的优化和整合程度,实现有效的业务转型和创新,帮助企业 适应外部变化,提高运营效率和反应速度。

基于面向服务架构(SOA)的ERP系统体系结构是一种定制化、个性化、可重用的ERP套 件,ERP软件分解成以Web服务形式出现的更加粒状的自我描述构件,组合这砦构件,以生成定制的松散耦联的复合应用,将企业应用构建成为服务的集合,实 现企业内外各个不同服务系统之间的互调或者集成。任何业务功能都被作为提供的一个服务使用,应用程序的不同功能(服务)通过这些服务之间定义的结构和合约 联系,应用系统可以看作是一系列服务的集成。

企业应用的业务功能分解并重组为一个个服务,这就涉及一个粒度的问题。基于SOA的 ERP系统体系结构,把ERP系统模块表示成粗粒度服务,而每一个粗粒度服务又可以分解成多个细粒度服务,每一个细粒度服务完成一项单一功能,通过调用数 据访问逻辑组件直接操作数据库表,通过细粒度服务的不同组合可实现ERP系统的不同业务功能和业务流程。当企业业务流程改变时,通过重新组合已编写的服务 组件,ERP各个业务模块的功能作为粗粒度服务发布,而每个模块的功能又是由多个子功能组成,这些子功能可以作为细粒度服务发布,从而达到企业业务流程重 组的目的。企业也可以把需要向外部企业提供的服务发布到公共服务注册代理供合作伙伴访问,同时也通过公共服务注册代理查找合作伙伴提供的服务,满足企业的 需要,服务粒度大小,在某种程度上决定着整个系统的灵活性和效率。如果粒度划分太细,企业付出的成本相应会高,如果粒度划分太粗,则系统无法很好地按需快 速变动。企业必须要在两者之间寻得一个平衡点,服务的粒度划分是基于SOA的ERP系统中的一个重点和难点。

SOA在企业信息化应用 中的优势:

1.减少成本和软件重用

利用现有的资源,将企业或者合作伙伴的有用资源改造成服务,并结合本企业和合 作伙伴现有的服务,开发出功能更强大的服务,这样软件的开发就不用从头开始,大大缩短了开发周期,降低了开发成本,在最短的时间内,利用最少的成本,开发 出需要的应用系统。

2.快速反应

能够在保持原有系统正常使用的前提下,从现有的服务中组合新的服务,缩短软件系 统分析、设计、开发等所需的时间,对新需求做出快速的响应,满足企业业务多变的需求。

四、基于SOA的ERP的应用 现状

各ERP厂商都在SOA的技术规范下建立了自己的SOA研发环境,都试图在SOA规范的基础上,增加和扩充属 于自己的一些东西,并希望其成为行业内的事实标准,比如SAP的NetWeaver、甲骨文公司的Fusion、金蝶的BOS、方正飞鸿ES2007等, 这些厂商基本上都足要把所有原来ERP的功能模块重新定义并做成服务形式,再把基于服务的形式创建成关于业务逻辑的知识,并建立了“企业服务知识库”,把 所有的服务归纳在一起,然后在知识库的基础上重新架构应用软件,将ERP导人SOA架构中。通过ERP内置研发平台,逐渐向企业其他应用渗透,这也是 ERP技术发展趋势之一。通过SOA研发平台的迁移,ERP厂商们对原来紧密结合的业务模块进行重新定义,作为单独的产品来发布和升级,是否内置符合 SOA标准的、支持多语言的研发平台,并且ERP任何应用模块都在这个平台上构建,现已成为区分ERP技术构架的分水岭。

五、 结束语

将SOA应用到ERP中的主要问题如Web Services的集成、服务资源和服务方法的重用、系统的分布性和异构性等。都有待于进一步研究。

在ERP系统中应朋SOA的路才 刚刚开始,还面I临着很多的问题和挑战。SOA作为构架企业信息化平台的新技术,能否拯救ERP,目前还没有肯定的答案,但可以相信的是,SOA必将对未 来几年的ERP市场的格局带来深远影响。笔者期待更多的ERP厂商不断推进SOA架构标准化。

进一步完善和细化基于SOA架构的 ERP产品,加快企业信息化建设的步伐。

Comments (238)