每种技术的 Java 类/示例。在单个帖子中可能无法实现,因为您所问的是进化行业在过去十年中经历了并且仍在不断发展。因此,过去十年发生的事情不能在一篇文章中涵盖。但是,很高兴了解它是如何经历这个阶段的,为什么需要新技术堆栈以及它解决了什么样的问题。
EJB 企业 Java Beans 服务器端组件架构。它可以实现快速和简化的开发
1)分布式(多个应用程序服务器相互通信,服务器组件(例如服务调用托管在不同服务器上的其他服务)。
2)事务性-持久性bean(DB TXN),任何简单/网络/分布式应用程序的最重要部分。易于开发,例如配置库。编写处理事务的 XML,例如何时提交、何时回滚(发生异常)等。JPA Java Persistance API 提供对象关系映射。比如你的表格行通过xml配置映射到你的java对象。
3)安全 - 身份验证(uid/pwd)和授权(基于角色 - 谁是登录用户以及他可以做什么所有任务?)。
这在开发任何企业应用程序时看起来不错,但是它有一些缺点,例如它非常重(其中包含所有 jars。)。用作 bean 的类应符合 EJB 标准(类应为 EJB 引擎实现某些接口以了解它是哪种类型的 bean)。
为了克服这种情况,业界有许多可供 EJB 使用的替代方案,例如 Hibrnate 执行相同的操作,例如 OR 映射,TXN 处理与 EJB 中的持久 bean 提供的相同。Spring,轻量级框架并简化业务逻辑(您可以使用您已经构建的类,无需实现任何接口、检查异常或扩展一些强制性抽象类)。
现在,大多数公司都在使用轻量级框架,例如 Spring、Hibernate、IBatis、Axis-2。
面向服务的架构 (SOA) 面向服务的架构是对企业级平台独立性的回应。或者为了更快地集成您的应用程序,在不同的应用程序服务器之间进行通信。
试想一下,您想实施解决方案,为世界各地的酒店预订提供选项。您的要求是检查这些酒店的客房供应情况。现在,这意味着您需要一次与多个酒店应用程序进行交互。不必每家酒店都使用相同的标准,或者它们的应用程序(服务器、编程语言)可以部署在不同的应用程序服务器上。同时,编写可以与所有不同类型的应用程序服务器通信的不同应用程序是不切实际的。我们需要一些基于标准的解决方案来解决这个问题。这可以通过 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。code first - 先写代码。
现在,让我们谈谈如何实际开始使用 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 规范主要有两种模式。发布/订阅和 ponin 到点。
Pub/sub是主题,您的应用程序希望向所有相关方发布某些信息。例如仪表板。(股票应用程序希望向所有注册的侦听器通知某些消息)。
点对点通信是通过消息队列完成的。
业务用例 - 认为您有应用程序,例如客户对客户服务的请求。另一方,您有多个客户服务代表,而其他客户有时多于客户服务代表,一次只有一个代表会收到要处理的请求,他/她在完成任务之前不会收到下一个请求。(同一个队列多个窗口,哪个窗口空闲将处理请求)。您可以在其中考虑其他复杂性,例如,如果其中一个节点发生故障、请求未处理以及特定类型的请求需要由特定节点处理怎么办。等等
生成代码:- 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 by example - 从目的地读取消息直到程序不会停止。)
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 and Muel http://camel.apache.org/how-does-camel-compare-to-mule.html
为企业集成提供了解决方案。