一直想写一些关于JavaEE的东西,从刚開始看《Ejb in Action》的时候就想写,总是感觉自己知道的太少了、太不值得一提了、太欠缺了(我太谦虚了)……哈哈哈。到后来工作中一直在使用JavaEE的相关技术。开源的那些流行框架(SSH以及以Spring为核心的Spring家族的东西)丢的也差点儿相同了。工作的时候JavaEE企业级的东西把自己搞的也跟傻子似的。回过头来看看总结一下避免自己真的成了傻子。

先从“组件”(component)说起,不知道从什么时候開始人们希望软件开发就像孩子搭积木似的能够是组装的。随之而来的一个概念就是“组件”,用专业一些的话说就是“组件是一个自包括的、能够重用的软件单元,能够把它集成到应用程序中”。更加直白一些说就是一块积木是能够独立完毕一项任务的,并且这个块积木是能够被多个地方使用的(想想螺丝、螺母大一些的话想想发动机、变速器相信能帮助读者理解“组件”这个概念)。在Java中组件的最简单形式是JavaBean。我们通常叫bean。

讲到这刚開始学习的人听到这个词会骂街。猪八戒,猪悟能、猪刚鬣、木母、净坛使者、天蓬元帅一堆名字到头来不就是一头猪么!

什么bean,Javabean到头来不就是Java中的类么。

骂街归骂街,不同的名称在不同的地方是有意义的。

天蓬元帅指这头猪在天庭当官时候的称呼,猪八戒是这头猪跟了唐僧之后的称呼,猪刚鬣是猪在高老庄时期的称呼……好像说远了。总之要说的是不同的名称所包括的意义以及要反应的东西是有差别的千万不要一叶障目。如今JavaBean的这个名字你理解了吧?

在企业范围内,组件更专注于实现业务服务。同一时候依据组件可运行的业务操作定义组件的协定。Java EE的标准组件模型是EJB模型,它定义了包装、部署以及与自包括业务服务进行交互的方式。

EJB的类型决定了须要与之交互的协定。会话bean(Session bean)使用标准的Java接口来定义能够调用的业务方法集合。而消息驱动bean(message-driven bean)的行为取决于bean旨在接受的消息类型和格式。

上面的这段话是非常官方的。总结成接地气的话就是在JavaEE领域不同类型的组件有着其自身的规范,这些组件能够依照其自身的规范来完毕业务服务。

啊。好抽象……

在我们平时开发其中时候使用组件模型是可选的,一般来说能够用会话bean的容器服务也可用servet。

结果导致如今大多数Web应用程序全然避开了EJB,直接从Servet到数据库。

这也导致了以Spring为核心的Spring家族以及类Spring家族的开源框架的蓬勃发展。

在使用组件的时候我们须要以层的形式组织应用程序,其中业务服务处于组件模型中。且表示服务层位于它之上(你可能在想MVC了。就笔者如今的理解EJB与MVC的关系不是包括也不是并列的关系。他们是……以后再说)。

眼下之所以非常多Web应用程序不选择EJB是因为历史上EJB的复杂性。相对于EJB2来说EJB3吸收了非常多开源框架的思想,眼下能够说已经非常easy了。随着复杂性这个问题得到解决人们開始渐渐的收获定义明白的业务服务集合所带给应用程序的优点。(拗口吧,意思就是EJB已经不像之前那么不复杂了,牛X了,開始好用了,嚯哈哈哈)。

松散耦合(oose couping)。以组件的思想组织业务逻辑,更easy写出松耦合的代码。

依赖性管理(dependencymanagement)。不管是注解还是配置文件。容器和人(主要是人)都能一目了然。

生命周期管理(ifecyce management)。组件由容器定义和管理能够统一处理资源的获取和释放。

声明性容器服务(decarativecontainer service)。组件的业务方法是由应用server所截获。所以并发性、事务管理、安全性以及远程处理这些服务不须要分散开发者过多的精力。

可移植性(portabiity)。一个应用程序在Tomcat下能跑那么Gassfish也能用。在Webogic下没问题那么Jboss下也不会有太大的问题,讲到这IIS不吭声了。

可扩展性和可靠性(scaabiity and reiabiity)。

应用server旨在确保组件能够有效地实现可扩展性管理。依据组件的类型和server配置,使用组件实现的业务操作能够重试失败了的方法调用,或者甚至把故障转移到集群上的还有一台server(考虑RMI)。

JavaEE应用程序的更多相关文章

  1. JavaEE

    1.  为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担. 为了程 ...

  2. JavaEE基本了解

    1.  为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担. 为了程 ...

  3. JavaEE中遗漏的10个最重要的安全控制

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! JavaEE有一些超赞的内置安全机制,但它们远远不能覆盖应用程序要面临的所有威胁.很多常见攻击,例如跨站点脚本攻 ...

  4. JavaEE(24) - JAAS开发安全的应用

    1. 安全域.角色和用户组 容器提供的两种安全性控制:声明式安全控制和编程式安全控制 安全域是指用户.用户组和ACL的逻辑集合.服务器支持的两种常用安全域:RDBMS安全域和文件系统安全域. 2. J ...

  5. JavaEE(12) - JPA规范及实现(TopLink和Hibernate)

    1. JPA规范与ORM框架之间的联系 JPA规范并不属于EJB3规范,它是一套完全独立的规范,不仅可以在基于EJB的JavaEE应用程序中使用,而且完全可以在普通JavaSE应用程序中使用. JPA ...

  6. JavaEE介绍

    相关术语 为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担.为了程 ...

  7. 详细解释什么是JavaEE?

    也许你学习了那么久的Java了,但如果有人问你什么是JavaEE?你会怎么回答他呢?在此我来谈谈关于JavaEE的相关技术.(仅是个人见解) 在谈JavaEE时,我们首先来了解一下Java平台.目前, ...

  8. 15.Servlet程序结构与部署

    1.JavaEE应用程序结构 组成:Servlet  JSP  工具类  第三方jar包,HTML页面(图片.Flash) 部署结构: JavaEE应用根目录下的资源都是允许客户端访问的(WEB-IN ...

  9. Java开发之javaEE(java2EE)的介绍,java软件工程师初步阶段知识

    1. 为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担. 为了程序 ...

随机推荐

  1. nodejs使用fetch获取WebAPI

    在上一篇<Nodejs获取Azure Active Directory AccessToken>中,已经获取到了accessToken,现时需要获取WebAPI的数据,选择了node-fe ...

  2. Apache Kafka 企业级消息队列

    1.大纲 了解 Apache Kafka是什么 掌握Apache Kafka的基本架构 搭建Kafka集群 掌握操作集群的两种方式 了解Apache Kafka高级部分的内容 2.消息系统的作用是什么 ...

  3. 日期 function

    SELECT SYSDATE, ADD_MONTHS(SYSDATE,), ADD_MONTHS(SYSDATE,), LAST_DAY(SYSDATE), MONTHS_BETWEEN(SYSDAT ...

  4. Web应用漏洞评估工具Paros

    Web应用漏洞评估工具Paros   Paros是Kali Linux集成的一款Web应用漏洞评估工具.该工具提供HTTP会话分析.网络爬虫.漏洞扫描三大功能.首先借助HTTP代理模式,该工具可以实时 ...

  5. Xamarin XAML语言教程构建ControlTemplate控件模板

    Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的 ...

  6. thinkpad win8.1 无线连接受限

    把博通的驱动回滚到6.30.223.102就好了

  7. 购物平台webApp+服务后台开发

    服务器后台参考:Cloud BaaS 主站地址:http://cloudbaas.sinaapp.com/ 演示地址:http://jeebaas.sinaapp.com/ Mobile UI 框架: ...

  8. 【转载】【bitset】C++ STL bitset 使用总结

    C++ bitset类的使用与简介 有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值.位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法.标准库提供了bits ...

  9. 【kmp算法】模板

    void GetFail(char P[],int __next[])//__next[i]表示s[0]~s[i-1]的前缀中,最大长度相等的前后缀是多少 { __next[0]=-1; int le ...

  10. 动态NAT地址转换

    1.配置路由器的端口ip地址(注意外网和内网ip地址的设置) Router(config)#inter f0/0 Router(config-if)#ip add 192.168.1.1 255.25 ...