J2EE平台由一整套服务(Service),应用程序接口(API)和协议构成,它对开发企业级应用提供了功能支持.13个核心技术分别是JDBC, JNDI, EJB, RMI, JSP, SERVLET, XML, JMS, JAVAIDL/CORBA, JTS, JTA, JAVAMAIL和 JAF.
何为企业级应用?
1.数据量特别大.
2.用户特别多.
3.性能要求高.
4.安全性要求高.
5.生命周期长.
这时候我们就要考虑数据存储和查询的问题,系统访问快慢即性能问题,如何使用事务保证安全的问题,如何使系统可扩展易维护的问题.这就要用到分布式,涉及远程方法调用,服务通信,事务和服务等技术,也就是EJB, RMI, JNDI, JTA等.
J2EE提供了一个框架-一套标准接口,用于开发分布式结构的应用,但它并没有提供实现.接口的意义在于让不同的厂商因为遵循共同的接口而完全解除依赖关系.举个例子,一个只能装5号电池的手电筒,可以装不同牌子的5号电池.有了5号电池的规范,生产手电筒和电池的厂商就可以各自生产了.J2EE提供接口之后,第三方厂商或专注于整个J2EE架构中的特定组件,如Apache的Tomcat,实现了JSP和Servlet;或对J2EE规范提供了一个较为完整的实现,如JBoss和BEA公司的WebLogic.
J2EE包含的容器大概有这么几类:
Web容器
EJB容器
Applet Client容器
Application Client容器
如图所示.
所以,Tomcat实际上是Web容器,包含JSP容器和Servlet容器.JBoss和WebLogic是Web容器和EJB容器.这两年JBoss很火.我们已经很熟悉当前布在JBoss上的ITOO项目.JBoss和J2EE帮助我们处理了大量常规的编程任务,如提供事务服务,安全领域,可靠的消息,名称和目录服务,数据库访问和连接池,线程池,集群,负载均衡和容错处理等.
我们来看看诸如JDBC和EJB等技术具体是如何为我们的分布式应用提供支持的.
JDBCAPI以一种统一的方式来对各种数据库进行存取.这是一个统一的接口,屏蔽掉了不同数据库的特性.不知道朋友们是否还记得最初使用JDBC时写的代码,得到Connection和statement...我们还使用了连接池,从连接池中拿到连接,管理连接.我们的数据持久层使用了Hibernate,而Hibernate是JPA规范的实现.前面J2EE的13个规范中并没有提到JPA,这里要补充一点,J2EE规范并不只有13个,这13个只是人们常用的.正如设计模式不止23个一样,我们只是最常用这些罢了.JPA封装了JDBC,所以我们系统中用好Hibernate而不用关心JDBC了.
EJB在J2EE规范中属于被广泛应用的.它提供了开发和实施分布式商务逻辑的框架,定义了EJB组件在何时如何与他们的容器进行交互作用.EJB容器负责提供公共服务如目录服务,事务管理,资源缓冲池等.
JNDI被用于执行名字和目录服务.怎么理解呢,它提供了一个一致的模型来存取和操作企业级的资源(DNS和LDAP),本地文件系统或应用服务器中的对象.我们所写的EnterpriseJavaBeans对象实例运行在EJB容器中,以下代码范例就是使用JNDI查找应用服务器中的对象,这里的应用服务器是异于本地的应用服务器.
基础系统的spring-mvc.xml文件中配置了如下bean.
<jee:jndi-lookup id="InstitutionBean" jndi-name="ejb:itoo-basic-institution-ear/itoo-basic-institution-core-0.0.1-SNAPSHOT/InstitutionBean!com.tgb.itoo.basic.service.InstitutionBean" > </jee:jndi-lookup>
其他系统远程调用基础系统的该接口,使用JNDI查找即可
/** * 获得所有学院 */ @Override public List<Institution> getAllColleageInfo() { InstitutionBean institutionBean = null; try { institutionBean = (InstitutionBean) this .lookupRemoteBean("itoo-basic-institution-ear/itoo-basic-institution-core-0.0.1-SNAPSHOT/InstitutionBean!com.tgb.itoo.basic.service.InstitutionBean"); } catch (NamingException e) { e.printStackTrace(); } return institutionBean.queryAllColleage(); }
J2EE的博大精深还很值得我们去研究,项目驱动是我们是我们越来越深入的良好模式.随后我们一起探索EJB的伟大之处.