每一项技术的Java类/示例可能不可能在单个帖子中实现,因为你问的是进化行业在过去十年中经历了,并且仍在不断发展。因此,过去十年中发生的事情无法在一篇文章中涵盖。但是,了解它是如何经历这个阶段以及为什么需要新技术堆栈以及它解决了什么样的问题是很好的。
-
EJBs Enterprise Java Beans serverside component architecture.它能够快速、简化地开发
1)分布式(其中多个应用服务器相互通信,服务器组件(例如,服务调用托管在不同服务器上的其他服务)。
2)事务性 - 持久化bean(DB TXN),任何简单/Web/分布式应用程序最重要的部分。易于开发,例如配置基础。编写处理事务的XML,例如何时提交,何时回滚(异常)等。JPA Java Persistance API 提供对象关系映射。例如,您的表行通过 xml 配置映射到您的 java 对象。
3)安全 - 身份验证(uid / pwd)和授权(基于角色 - 谁是登录用户以及他可以执行的所有任务?
这在开发任何企业应用程序时看起来都很好,但是它有一些缺点,例如它非常重(所有jar都包含在其中)。用作 bean 的类应该向 EJB 标准确认(类应该已经为 EJB 引擎实现了某些接口,以了解它是哪种类型的 Bean)。
为了克服这种情况,业界有许多EJB的替代方案,例如Hibrnate做同样的事情,例如OR映射,TXN处理EJB中的持久性bean提供的相同。Spring,轻量级框架并简化了业务逻辑(您可以使用已经构建的类,这些类不需要实现任何接口,检查异常或扩展一些必需的抽象类)。
现在一天,大多数公司都真正在轻量级框架上工作,如Spring,Hibernate,IBatis,Axis-2。
-
面向服务的体系结构 (SOA) 面向服务的体系结构是企业级别平台独立性的答案。OR 为了更快地集成您的应用程序,以便在不同的应用程序服务器之间进行通信。
只要想想你想实施解决方案,为世界各地的酒店预订提供选项。您的要求是检查这些酒店的房间可用性。现在,这意味着您需要一次与多个酒店应用程序进行交互。不一定每个酒店都使用相同的标准,或者他们的应用程序(服务器,编程语言)可以部署在不同的应用程序服务器上。同时,编写可以与所有不同类型的应用程序服务器通信的不同应用程序是不切实际的。我们需要一些基于标准的解决方案来解决这个问题。这可以通过 Web 服务实现。
这是可能的,因为Web服务基于XML在SOAP(简单对象访问协议)中发送消息。XML 用于跨任何语言、平台或网络协议交换数据。
Web 服务可以分为基于 SOAP 和 REST。基于 SOAP 的服务 JAX-RPC 和 JAX-WS(http://www.ibm.com/developerworks/webservices/library/ws-tip-jaxwsrpc/index.html)
Web 服务可以先开发契约 - 首先写入 WSDL。代码优先 - 首先编写代码。
现在,让我们谈谈如何实际开始Web服务。
最简单的Web服务或hello world(JAXWS)可以这样写:- http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/java_first_jaxws/
- 面向消息的中间件 (MOM)
- 断续器
-
消息队列(点对点)
MOM 需要克服请求-响应式通信的缺点。当客户端发送响应时,服务器需要处于活动状态。客户端等待响应,直到服务器执行并响应。
请求响应 - 如果服务器或客户端关闭,应用程序将失败。MOM - 任一端点都不需要按时发送请求消息以进行处理。
MOM是概念,JMS是这个概念的规范。许多供应商都有这个规范的实现,例如IBM有MQ,OpenJMS开源实现,Tibco的EMS等。
JMS规范主要有两种模式。发布/订阅和点对点。
发布/订阅是主题,您的应用程序希望向所有感兴趣的各方发布某些信息。例如仪表板。(Stock 应用程序希望向所有已注册的侦听器通知特定消息)。
点对点通信是通过消息队列完成的。
业务用例 - 认为您有应用程序,例如客户对客户服务的请求。另一方,您有多个客户服务代表,而另一方客户有时比客户服务代表多,一次只有一个代表会得到处理的请求,他/她不会收到下一个请求,直到完成任务。(同一个队列多个窗口,任何一个窗口是空闲的将处理请求)。您可以考虑其他复杂性,例如,如果其中一个节点失败,请求未处理以及特定类型的请求需要由特定节点处理,该怎么办。等。
生成代码:- http://docs.oracle.com/javaee/1.4/tutorial/examples/jms/simple/src/SimpleProducer.java
使用者同步代码:- (POJO 类) http://docs.oracle.com/javaee/1.4/tutorial/examples/jms/simple/src/SimpleSynchConsumer.java
http://www.java2s.com/Code/Java/J2EE/ThisexampleisasimpleJMSclientapplication.htm
使用异步代码:- (示例为Spring - 从目标读取消息,直到程序不会停止。http://www.springbyexample.org/examples/simple-spring-jms-listener-config.html
虽然,它只是基本的,在这个MOM中有许多方面需要涵盖,例如什么是故障转移机制,什么是选择器,持久消息,消息确认模式等...
现在,假设您很久以前就采用了 SOA 和 MOM,并且您有一堆服务,它们相互通信以完成企业范围的任务。想象一下,管理逻辑,例如应该从哪里重定向的多个目标将非常麻烦。有些人将此应用程序称为逻辑。服务总线将用于减少应用程序逻辑,并更多地关注业务逻辑(应用提供的功能)。
简单来说,将端点视为在服务器上公开的 URL。您将使用此 url/端点来调用您的服务。
例如 http://localhost:8888/Context/MyService?wsdl
在代码中:-
String endpointAddress = "http://localhost:8080/jaxws/services/hello_world?wsdl";
// Add a port to the Service
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
HelloWorld hw = service.getPort(HelloWorld.class);
System.out.println(hw.sayHi("World"));
路线当服务总线收到特定消息时,它将通过任何服务/代理目标(如队列/主题)路由它。此路径称为路由。
例如,您的股票应用程序已由分析师提供一些输入,它将通过应用程序/Web组件进行处理,然后结果将发布给所有感兴趣/注册的成员以进行特定股票更新。
Apache Camel和Muel http://camel.apache.org/how-does-camel-compare-to-mule.html 为企业集成提供了解决方案。