java开发工程师

2024-10-12 版权声明 我要投稿

java开发工程师(推荐10篇)

java开发工程师 篇1

户口所在: 汕头 国 籍: 中国

婚姻状况: 未婚 民 族: 汉族

培训认证: 未参加 身 高: 167 cm

诚信徽章: 未申请 体 重:

人才 测评: 未测评

我的特长:

求职 意向

人才 类型: 应届毕业生

应聘职位: 软件工程师:,JAVA开发工程师:

工作年限: 2 职 称: 初级

求职 类型: 实习可到职日期: 随时

月薪要求: 2000--3500 希望工作地区: 广州,深圳,

工作经历

志愿者经历

教育背景

毕业院校: 东北师范大学

最高学历: 本科 获得学位: 毕业日期: 2011-07

专 业 一: 软件工程 专 业 二:

起始年月 终止年月 学校(机构) 所学专业 获得证书 证书编号

-07 2011-07 东北师范大学 软件工程 - -

语言能力

外语: 英语 良好 粤语水平: 一般

其它外语能力: 研读过 日语 三级教材

国语水平: 精通

java开发工程师 篇2

在日常的工作和生活中, 会有大量的人需要接触和联系。因此有必要将众多联系人信息记录下来, 以方便联络。而要将这些信息进行电子化存储, 并提供查询等相关操作, 就是本系统要实现的功能。

本系统是一个通信录程序, 使用Java语言开发而成。可以使用本系统进行联系人信息的增加、删除、修改、查询等常用的操作。

本系统设定的联系人全部信息包括名字、手机、单位、部门、职务、职称、学历、学位、性别、出生日期、电话、传真、邮件、网页、地址、邮编、备注, 共17项。其中名字和手机是必填信息, 其他为选填信息。为实现分类管理联系人的目的, 系统中首先要建立不同的组, 联系人信息放在组中。程序界面左边是一个树控件, 显示组及组成员的主要信息 (手机+名字) 。程序界面右边是一个表控件, 显示组成员的详细信息。包括联系人的全部信息。程序界面上边是下拉菜单, 包括组管理和成员管理两个菜单。在树控件里单击右键出现弹出菜单, 内容和下拉菜单一致。在树控件里双击, 将在右边表控件中显示选中的详细信息。组管理菜单是对组的各项操作, 包括组增加、组删除、组改名、组导入、组导出各项。成员管理菜单是对组成员的操作, 包括成员增加、成员删除、成员修改、成员查询各项。XML文件的层次性强, 操作方便, 适合存放数据。本程序数据存储在XML文件中。

2 用户界面

本系统用户界面使用Swing开发。Swing是Java语言提供的专门开发图形界面系统的工具包, 通过使用Swing的功能, 可以方便地建立用户界面。

使用下拉菜单代码如下:

使用弹出菜单代码如下:

界面中有各种常用的控件, 比如标签、输入框、列表框、组合框、单选框、复选框、按钮等。常用的操作如下:

要处理鼠标右键代码如下:

要处理鼠标双击代码如下:

对于层次性的数据, 可以使用树控件, 一些常用操作如下:

对于一行一行的数据, 可以使用表控件, 一些常用操作如下:

3 XML数据操作

本系统使用DOM提供的功能操作XML。

读XML操作如下:

写XML操作如下:

4 部分程序

由于源程序代码较长, 故只列出函数头代码, 详细代码可参见源程序。

5 结语

浅谈Java桌面应用程序开发 篇3

【摘 要】Java对于服务器,个人电脑和移动设备来说是一项伟大的技术。由于需要java的跨平台的特性,因此java在服务器和移动设备方面的应用是非常成功的。Java开发的桌面程序既有友好易用的图形用户界面,也能够实现相应的功能。【关键词】桌面开发

AWT

Swing SWT Java与桌面端现在流行的桌面平台要数Windows、Mac和 Linux。但它们不是十全十美的,Windows主宰着桌面操作系统的市场,其上有巨大的应用和开发群体,但它昂贵且有许多安全漏洞。Linux有着稳固的基础,它是开源的软件,比Windows更可靠。Mac非常容易操作且不是黑客的目标,但与Windows和Linux比起来,Mac的硬件和软件可选的余地非常的有限。Windows、Linux和Mac 在桌面的流行创造了多样性,这种多样性正是Java需要的,这就使得Java在桌面有举足轻重的地位。跨平台的支持Java 运行于所有相关的操作系统,包括Windows、Mac和Linux。也就是说把现有的应用从一个操作系统移植到另一个操作系统而不用做太多的改动,所以Java是首选的桌面开发平台。或许用微软的可视化工具很容易构建.NET应用,但是这将使软件被绑定在了Windows平台上。也许有人想用Linux 代替Windows 从而避免由微软操作系统的漏洞带来的问题,但是用户不能容忍的问题之一是当从Windows移植到Linux时所带来的巨大的费用。如果应用程序用Java构建,就没有了这些问题,Java的图形用户界面看上去会跟使用的操作系统一样,而并不需要做什么改动。丰富的特征最初,Java只有非常有限的一些特征去构建图形用户界面,思想就是用与平台无关的Java应用程序接口打包不同的操作系统的本地图形用户界面,称之为抽象的窗口工具。它仅有普通的部件如文件域、文本区、选择框、单选按钮、列表框和按钮被AWT支持,图形和图像的特性支持非常有限,也就是说,只能够构建简单的applet程序。认识到需要更高级的图形用户界面组件和图形能力,Sun公司开发了Swing,Java 2D,Java 3D,图像的输入/输出,Java高级图像(JAI)和很多其它的组件。这些中的一些窗体组件现在已经是Java 2标准版(J2SE)里的一部分。例如Swing、Java 2D、图像的输入/输出都是Java的核心API,它们随着Java开发工具包(JDK)和Java运行环境一起被提供给用户。Java图形界面工具Java有三个主要的图形界面工具:AWT,Swing和SWT。Swing 是构建java图形界面标准的API(应用程序接口),一些AWT类由Swing继承而来。SWT是一个非常有前途的新的窗体工具,由IBM资助。但是事实上,这三者相互补充,它们满足不同的需求。AWT抽象窗口工具包(Abstract Windowing Toolkit)(AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包。AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。AWT提供了JavaApplet和Java Application中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。SwingSwing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。工具包中所有的包都是以swing作为名称。SWTSWT是IBM为它的Eclipse集成开发环境而开发的图形用户界面工具。SWT可以在Eclipse环境外使用,而且提供对操作系统本地图形用户界面的直接访问。因此,基于SWT的Java应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起。SWT社区现在正在设计浏览器API,这些API可以产生基于IE或者Mozilla的HTML窗口。SWT现在可以在AIX,HPUX,Linux,QNX,Solaris,和Windows下面运行。误解与Bug对于java/Swing一直有着误解,诸如:Java/Swing太慢了,或者是Java/Swing需要更多的内存。也许老式的奔腾运行JDK1。2确实很慢,但是PIII级别的CPU运行JDK1。4环境是足够快的。一个应用程序中鼠标在1毫秒和在10毫秒的反映的差异,从使用者方面来说是没什么区别的。Java不但在企业级的上千人同时在线的服务器中表现良好,而且在仅有有限资源的移动设备上的表现也是很出色的。总结Java作为一种网络技术,是为了在浏览器中能够运行小应用程序而发布,但是它从开始就有运行独立的桌面应用程序的能力。不幸的是,AWT没有提供足够的桌面端的程序所需的特性。Swing着手于解决这些问题,但是它有不少的bug。今天,Java有构建大型桌面端应用程序的能力并修复了bug。Java独有的优点是“只写一次,到处运行”——在Windows,Linux,Mac和其它操作系统上运行Java代码的能力。【参考文献】[1]Eric,Java编程思想[M],第4版,机械工业出版社,2007年4月[2]Metsker S J,Java设计模式[M],第2版,电子工业出版社,2012年09 月[3]毕建信,基于MVC设计模式的Web应用研究与实现[D],武汉理工大学出版社,2006年5月

Java初级开发工程师的职责 篇4

1.承担项目组核心开发或设计工作,并能够按要求、高质量地完成开发或设计任务;

2.熟练掌握分析设计工具,按照规范的要求,编写设计文档;

3.按照设计的功能,实现模块的代码编写和维护;

4.按公司规范进行编码,并对开发的代码进行测试。

职位要求:

1、计算机相关专业本科或以上学历;

2、2年以上JavaEE Web 应用项目经验,参与过至少2 个J2EE 中型项目;

3、熟练掌握Java、JavaScript等;

4、熟悉Struts2、Spring、Hibernate、Mybatis 等开源框架;

5、熟悉SqlServer、MySQL等关系数据库,了解NoSQL数据库;

6、熟悉分布式系统的设计和应用,有大规模分布式系统的开发经验。

基于Java的BBS开发 篇5

进入21世纪, 伴着社会经济的高速发展, 人们对信息的渴求越来越大, 对信息的获取速度要求也越来越高。随着计算机技术的愈发成熟, Internet也日渐渗透到人们的学习、生活和工作等方面, 成为人们生活之中不可缺少的一部分[1]。比如:通过网络进行知识交流、网上购物、网上付款、获取新闻等。高度发达的社会, 使得信息的传播尤为重要。BBS网络论坛便应用而生。它是Internet的重要应用之一, 是Internet上一种主要的信息交流和发布平台[2], 在这个平台上, 人可以自由发表自己发观点以及意见, 也可以参与到热门话题的讨论, 人们的交流也日益密切。

本文在分析设计设计时, 遵循了软件工程的思想。本设计是基于JSP和MVC模式的BBS论坛, 采用SQL Server进行数据库的管理、操作和维护。利用Myeclipse开发平台和HTML、JSP实现前台界面设计、后台数据库接口、帖子的发布以及回复等各项功能[3]。文中比较详细的介绍了系统功能设计、系统功能的实现、系统功能测试以及总结与展望。

2 系统设计

2.1 系统概述

本论坛共由三大部分组成, 分别为用户模块、帖子模块以及管理员模块, 各个版块之间相

互转化。论坛总体概述图见图1:

通过上面概述图, 大概了解了论坛系统的组织结构, 现给出本论坛的基本功能流程图, 图2为系统功能流程图。

2.2 系统功能设计

2.2.1 用户模块

顾名思义, 用户模块是针对用户的。用户在论坛中的主要操作有浏览别人发的帖子, 自己发表帖子, 回帖以及与个人信息相关的操作。其中, 个人信息相关操作包括用户注册、登录, 修改个人资料等。图3详细描述了用户模块的相关功能。

2.2.2 帖子模块

本模块为论坛的最重要的一部分, 论坛的主要功能基本在这一模块实现。帖子模块不仅包括用户在这一模块下的操作, 也包含了管理员在此模块下的操作。主要包括:发帖、回帖、删帖等操作。图4给出了帖子模块的具体功能。

2.2.3 管理员模块

考虑到论坛中帖子数量, 用户人数等原因, 本论坛设置管理员。对于普通用户而言, 管理员不仅要拥有普通用户的所有权限, 还要拥有普通用户所没有的权限。比如设置管理员、用户的禁言以及帖子的删除;对于帖子模块而言, 管理员要充当管理者的角色, 布置论坛的版块, 维护论坛的正常运行。

3 系统实现

3.1 论坛系统的开发环境

论坛使用Myeclipse 10作为系统的开发软件, Myeclipse是在eclipse的基础上加上自己的插件开发而成的一款功能强大的企业级开发环境, 由于Myeclipse可以支持Java Servlet、Jsp、JDBC数据库连接, 故本设计采用其作为开发软件。

本设计使用SQL Server 2008作为论坛系统数据库, SQL Server具有强大的兼容性, 其数据可以存储在各种设备上;在安全性上, SQL Server对数据进行加密, 为关键应用程序提供了强大了安全技术支持, 保证数据不容易受到非法攻击或恶意篡改;在功能上, SQL Server提供了可预测响应, 使其对数据的处理速度更快, 响应更迅速。

本论坛使用Tomcat 7.0作为系统服务器。Tomcat服务器是一个免费的开源的轻量级应用服务器。Tomcat对最新的Servlet、JSP具有完美的支持。除以上关键软件之外, 论坛中还使用了JDK 1.8作为支持Java运行的环境, 整个论坛系统在window8.1下完成开发设计。

3.2 系统开发模型

本论坛系统采用的是MVC模型, 目前, MVC模式已广泛的应用于Web程序开发中[4]。MVC设计模式强制性将程序的输入、输出、处理分开, 使得程序设计更加清晰明了, 后期具有较好的维护性和扩展性。MVC模式共分为三层, Model (模型) 表示业务逻辑层, View (视图) 代表表示层, Controller (控制器) 代表控制层[5]。三者相互关系见图6。

论坛页面采用JSP页面, JSP是一种基于JAVA语言的动态Web应用开发技术[[66]]。JJSSPP页面在执行时采用编译方式, 生成SSeerrvvlleett。JJSSPP具有许多优点, 如:一次编写, 到处运行;支持多个平台;内容和显示分离;组件重用性高等[]。

3.3 系统开发页面简介

4 总结与展望

本文搭建了一个基于Java的BBS论坛系统, 所述设计采用的开发平台为Myeclipse+Tomcat+JSP+Servlet+SQLSERVER2008。全文系统地阐述了BBS研究意义以及设计概念, 所做主要工作包括:

1) 调查研究当前BBS发展状况以及研究的重要性;

2) 介绍了BBS论坛设计概念, 应用MVC模式将应用逻辑、现实逻辑和处理过程分离, 数据库设计理念, 各个模块的功能实现;

3) 系统各项功能的测试。

摘要:该文是基于Java的BBS论坛后台设计, 设计时遵循软件工程思想。系统采用MVC架构模式, 应用JSP+Servlet技术, 让前端页面和后台代码分离。同时使用Java Bean组件增强代码的重用性, 共同实现了后台的数据处理以及数据的输出, 使得系统易于维护。系统数据库使用SQL Server 2008, 完成了系统的数据管理。

关键词:网上商城系统,javaEE,MVC,B/S结构,Myeclipse

参考文献

[1]赵驰龙.实用数据库教程[M].北京:清华大学出版社, 2010:98-100.

[2]张丽华, 李德荣, 王冬星.BBS论坛的设计与实现[J].电脑学习, 2009 (6) :2-3.

[3]Hammouda I, Koskimies K.A.Pattern-Based J2EE Applica-tion Development Environment[J].Nordic Journal of Comput-ing, 2002, 9 (3) :248-260.

[4]徐永彪.基于MVC框架的BBS论坛管理系统的设计与实现[D].昆明:云南大学, 2012:41-45.

[5]张志峰, 甘勇, 黄敏.JSP程序设计技术教程[M].北京:清华大学出版社, 2014:9-10.

[6]王雷, 蔡自兴.用JSP开发Web应用[J].计算机应用, 2001 (10) :45-57.

[7]张丽华, 李德荣, 王冬星.BBS论坛的设计与实现[J].电脑学习, 2009 (6) :56-58.

java开发工程师 篇6

[关键词] Model(模型)View(视图)Controller(控制器)MVC

一、MVC模式

将JSP页面中嵌入的流程控制代码和部分的逻辑处理代码提取出来,放到一个单独的角色中,这个角色就是控制器角色了。这样的架构就符合MVC架构模式,MVC即模型——视图——控制器(Model-View-Control)。

MVC架构有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。MVC架构提供了一种按功能参各种对象进行分割的方法,其目的是为了将各对象间的耦合程序降至最低。MVC框架原本是为了将传统的输入(input)、处理(processing)和输出(output)任务运用到图形化用户交互模型中而设计的,但是,将这些概念运用到基于Web的企业级多层应用领域也是很适合的。

图1MVC模型、视图、控制器的关系图

在一个MVC架构中,一个应用被分成三个部分,模型(Model)、视图(View)和控制器(Control)。

模型代表应用程序的数据以用于访问控制和修改这些数据的业务规则。当模型发生变化时,它会通知视图,并为视图提供查询模型相关状态的能力。同时,它也为控制器提供访问封闭在模型内部的应用程序功能的能力。

视图用开组织模型的内容。它从模型那里获得数据并指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。

控制器定义了应用程序的行为。它负责对来自视图的用户请求进行解释,并把这些请求映射成相应的行为,这些行为由模型负责实现。在独立运行的GUI客户端,用户的请求可能是一些鼠标单击或是菜单选择操作。在一个WEB应用程序中,它们的表现形式可能是一些来自客户端GET或POST的HTTP请求。图1描述了在MVC应用程序中模型、视图、控制器三部分的关系。

在这种开发模式下,控制器的角色由Servlet实现,视图的角色由Jsp页面实现,模型的角色由JavaBean来实现,该模型的架构图如图2所示。

图2JSP开发模型

Servlet充当控制的角色,它接受请求,并且根据请求信息将它们分发给适当的JSP页面来产生响应。Servlet控制器还根据JSP视图的需求生成JavaBean的实例并输出给JSP环境。JSP视图可以通过直接调用JavaBean实例的方法或使用动作元素来得到JavaBean中的数据。

二、基于MVC框架的论坛功能的实现

论坛是电子商务网站中一种常见的功能,它为上网用户提供了一个自由的讨论区。用户可以根据需要在论坛上发表文章,提出问题并表达自己的观点,俗称发帖子或灌水。与此同时,上网用户也可以在论坛中浏览其他人发表文章,并能对该文章进行回复。一个典型的论坛系统一般应提供如下功能:会员管理、讨论区文章查阅、发表新文章、后台管理。

运用MVC框架实现论坛,首先把应用分解为模型、视图和控制器来实现,这样就将业务逻辑和表现层分开,提高软件可扩展性和良好的逻辑性,改变了传统Web开发设计模式。下面将以论坛中用户登陆为例按照MVC架构来详述实现过程。

1.创建视图组件

在视图中主要包括两个组件:用户登录页面Login.jsp,登录失败页面error.jsp;是用户登录失败后显示的页面。它们都保存在Web应用目录xxx下。

2.创建模型组件

模型组件文件UserInfo.java 是处理业务逻辑的JavaBean, 封装了与论坛用户相关的所有信息,同时也定义了所有与论坛用户信息处理相关的方法。例如检查用户身份的方法以及查找、删除、编辑、存储用户信息等。通过Action类派生的子类LoginAction访问UserInfo.java实现对业务逻辑的处理。注意业务逻辑层对应的类所在的包应该部署在xxx/WEB-INF/classes下。

3.创建控制器组件

控制器组件作为整个MVC架构的控制中心,包括了ActionServlet、Action Bean、ActionForm Bean、以及相关配置文件web.xml及资源包。

(1)声明及定义LoginActionForm.java

该Javabean用于获取用户登录页面提交的表单数据。注意ActionFormBean中属性名称一定要对应用户表示层JSP页面中的表单元素名称及超链接参数名。

(2)声明及定义LoginAction.java

LoginAction负责处理客户端提交请求,其主要功能是依据接收到的不同请求,通过LoginActionForm中得到对应的提交表单数据,调用业务逻辑层中对应的UserInfo.java进行处理。最终将结果传给用户表示层JSP页面,显示在用户面前。

(3)配置文件定义

web.xml主要实现了对ActionServlet进行配置如下。

ActionServlet

< servlet-class>ActionServlet

ActionServlet

/servlet/ActionServlet

三、結束语

从某种意思上讲,MVC实现了Web层的应用框架,是一个具有良好扩展性和不断完善的框架,利用这种应用框架不但能缩短开发时间,还能够实现框架和代码的重用,特别是当应用有着较复杂的逻辑,并且返回的视图也不同时,该种方式是首先。

Java开发工程师的职责说明 篇7

根据分配任务进行代码实现,包括B/S、C/S、小程序及运维接口开发;

遵循软件工程规范和项目要求,认真编写工作中涉及的文档;

项目测试;

上级领导分配的其他任务。

任职要求:

本科及以上,计算机、软件工程、地理信息系统等相关专业。

熟悉J2EE、Spring MVC、Spring、SpringBoot等开源框架,熟悉Redis缓存技术;

有平台架构设计经验,熟悉SOA架构技术;

熟悉应用服务器,如Nginx、Tomcat等的配置、部署、调优;

熟悉大型数据库,如Oracle、MySQL、PostgreSQL等;

Java前端开发工程师的职责 篇8

1、负责实现web系统架构设计和搭建。

2、项目的总体规划和总体设计、概要设计、软件架构和数据库设计。

3、负责解决项目中的关键问题和技术难题。

4、负责项目的具体技术实现和编码。

5、能够带领团队,负责公司相关产品的web开发。

任职资格:

1、计算机或相关专业、3年以上WEB开发经验

2、精通Java语言和JavaEE体系结构,熟悉多线程技术,熟悉Java网络编程

3、熟练使用主流框架如SpringMVC、SpringBoot、Mybatis,RabbitMQ等,能够搭建web框架,熟悉使用Tomcat或Weblogic

4、熟悉使用基于Maven、Gradle等项目构建工具

4、熟悉常用数据库Oracle/MySQL,掌握SQL优化

5、熟练使用IntelliJ IDEA等开发工具

java开发工程师 篇9

关键词:Java语言;EJB组件技术;信息管理系统

中图分类号:TP311.52

信息管理系统(IMS,Information Management System)是随着计算机技术而兴起的一门学科,它综合了计算机、网络通信和数据库等多种技术,已被广泛应用于办公自动化系统、通信系统、交易处理系统、管理信息系统和执行信息系统、决策支持系统及企业系统,对于信息管理过程中的信息收集与处理、市场模拟与预测、生产计划与控制及辅助决策环节发挥着重要作用[1]。

目前,越来越多的企业或机构开始使用信息管理系统,但由于其具体业务和管理内容的不同,各机构需要完全重新设计并开发其系统。事实上,不同机构用到的信息管理系统在功能模块及逻辑架构上是相同的。如果能够将这些共性架构抽象出来,提炼成功能模块完善、逻辑层次分明的信息管理系统开发框架,各机构只需根据其具体使用场景选择模块并添加具体功能,并做必要的扩展即可。这样节省了大量的系统设计与开发工作,降低了系统开发成本,缩短了开发周期,并提高了开发效率。

1 Java与EJB介绍

1.1 Java语言。为了使本文设计的框架能够方便地移植和扩展到不同的信息管理系统中,我们需要选择移植性、扩展性和健壮性好的开发语言。因此,Java以其卓越的通用性、高效性、平台移植性和安全性成为我们的首选[2]。

Java是由Sun Microsystems公司推出的程序设计语言,Sun公司对Java编程语言的解释是:Java编程语言是个简单的、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java是运行在Java虚拟机上的,只要安装了虚拟机系统,Java可以运行在任何系统下,因此,Java语言可移植性好,与平台无关。因此,我们选择Java作为本文系统开发框架语言。

1.2 EJB组件技术。为了满足信息管理系统的可扩展性,系统的各框架之间应该是一种松耦合关系,这样各部分是相对独立的,替换或修改其中某一部分对整个系统不会产生大的影响,能够方便各机构根据实际需要设计其系统。因此,我们采用组件式的体系结构,整个系统由不同的组件构成,通过对组件的添加、修改和删除即可实现对系统的设计。目前,常用的组件技术有CORBA、COM和EJB,其中EJB(Enterprise JavaBean)是Sun公司的JavaEE服务器端组件模型,我们选择EJB作为本系统的底层组件技术[3]。

EJB是一种分布式的组件技术,设计目标与核心应用是部署分布式应用程序。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB更关注于业务逻辑的实现而非底层的实现机制,它能够支持事务处理,可以通过在代码外的描述来定义事务处理级别可扩展性,并且提供了负载均衡,由EJB服务器提供资源的访问权限控制。

2 信息管理系统框架的设计

通过对各机构的信息管理系统的调查与分析,我们整理了系统所需的主要功能:第一,模块管理功能:用于搭建具体的信息管理系统架构,包括确定该系统所需的各个功能模块,添加、修改和删除各个模块的具体功能等。第二,业务管理功能:用于确定各模块的具体实现业务、业务流程、逻辑实现等细节。第三,用户管理功能:用于管理信息管理系统用户的使用权限,包括增加、删除用户,增加、删除角色权限,为用户添加、删除角色授权等。

基于以上功能,我们将信息管理系统设计为五层层次结构[4],从底向上分别是:数据库层、Entity Bean层、Session Bean层、服务器层和浏览器层,如图1所示。其中,数据库层主要负责数据的存储;Entity Bean层通过JDBC接口访问数据库,其主要任务是对数据库层的封装,用来隐藏不同数据库层细节,为上层提供统一透明的访问接口;Session Bean层是远程服务器访问系统内部结构的接口,它控制所有对系统内核的访问都通过这一唯一入口;服务器层是主要的业务与数据处理中枢,负责处理系统内核提供的各类数据,并将结果通过HTTP提供给浏览器层;浏览器层是面向用户的接口,为用户呈现了可视化的业务和数据处理结果。

3 信息管理系统框架的实现

我们对信息管理系统框架的实现主要集中在Entity Bean层和Session Bean层,这两层共包括三个EJB组件:ModuleEJB、BusinessEJB、UserEJB和四个管理模块:模块管理、权限管理、用户管理和角色管理。

3.1 ModuleEJB的实现。ModuleEJB主要包括模块管理和权限管理两部分。系统开发人员在设计信息管理系统时,需首先确定该系统涉及的各个模块、各模块的功能、允许访问该模块的角色及具体的角色权限。然后,根据设计好的模块框架,添加各模块的逻辑实现流程及数据库表,其数据库表包含了模块内部的数据关系、模块与角色关系及角色与权限关系表。这样,ModuleEJB实现了对系统中各模块的管理。

3.2 BusinessEJB的实现。BusinessEJB主要包括用户管理和权限管理两部分。对于某一业务流,首先要规定哪些用户有权限执行这一操作,其次要明确不同的用户有何不同的权限。例如,企业员工有权利更改自己的个人信息,但无权更改自己的工作职责信息,而只有系统管理员可以更改员工的工作职责信息。只有明確各业务的权限归属,才能充分定义系统不同用户的职责,报障系统与企业的有效运作。

3.3 UserEJB的实现。UserEJB主要包括用户管理和角色管理两部分。我们在系统中首先规定几类不同的角色,如管理员、部门经理、主管、员工等,不同的角色分别对应不同的权限。然后,我们将用户添加到其对应的角色中,这样能够实现对用户权限的统一管理,既减少了权限划分的工作量,又能保证权限划分的统一和准确。要注意的是,不同的角色权限可能是相互嵌套的,同一用户可能被分有几个不同角色。

4 结束语

本文基于Java语言和EJB组件技术设计了信息管理系统的开发框架,该框架包括模块管理、业务管理和用户管理三大功能,从底向上分为数据库层、Entity Bean层、Session Bean层、服务器层和浏览器层共五层结构。该系统能够辅助各机构更简单、更高效地完成其信息管理系统设计与实现,且稳定运行、安全可靠。

参考文献:

[1]李瑜,黄必清,吴澄.虚拟企业信息管理系统[J].高技术通讯,2000(09).

[2]孟祥武.Java技术简介[J].现代科学仪器,1998(04).

[3]王子君,范学峰.EJB技术的探讨与研究[J].计算机工程,2002(02):106-108.

[4]王强兵,刘广钟.基于J2EE的Web企业计算[J].计算机工程,2002(01).

作者简介:刘建(1979.04-),男,广东东莞人,讲师,大学本科,软件工程硕士,研究方向:计算机科学技术。

Java分布式开发与集群技术 篇10

1.1 概述

目前许多Web网站为了满足更高的访问量, 并提供稳定可靠的服务, 已经在使用分布式开发和Web集群技术。Web集群技术主要就是通过一台前端服务器将大量用户的动态Web请求按照一定策略分配到后台的多台Web负载服务器上去, 负载服务器生成结果后再通过前端机返回给用户, 对用户来说就像访问单台服务器一样。

各台Web负载服务器必须运行相同的应用, 并且共享访问同一台数据库服务器 (或主从模式的数据库集群) 和分布式文件系统 (DFS) 。当网站用户访问量增加时, 只要添加新的Web服务器就可以对网站的负载能力进行横向扩展, 同时当一台负载服务器当机时, 由于其他服务器可以立即替代之, 因此可以有效地克服单点失效的问题。

1.2 Apache和Tomcat的集群

Web集群技术的一个典型架构就是当前较为流行的A-pache加Tomcat的网站构建方式。该方式采用Apache Httpd服务器作为前端负载均衡机, Apache的长处是处理静态的内容, 它的并发传输能力很强, 可以很好地处理网络传输, 同时它起到负载均衡的作用:将来自用户的动态Web请求分配到后台的Tomcat服务器集群上去。

Apache和Tomcat的连接方式有两种:使用mod_proxy插件和使用mod_jk插件。

Mod_proxy插件是一种反向代理技术, 即它本身就是一个HTTP代理服务器, 只是它的功能不是用来帮助防火墙内的用户访问外网, 而是用来代理外部用户对内部Web服务器的访问。因此可以想到的是它的工作效率并不算高, 对于每一个外部Web连接, 代理服务器会建立一个和内部Web服务器的连接, 因此负载均衡器上就会产生双倍的连接数 (外部连接加等量的内部连接) 。而该方法的优势就在于简单, 适用范围广, 例如可以用在Apache和Apache的连接, Apache和Tomcat的连接等。

mod_jk插件则是用于Apache和Tomcat之间连接的专用方法, 它采用Ajp1.3作为连接协议, 不会产生类似于HTTP反向代理那样的双倍连接问题, 运行效率较高。

1.3 Web集群遇到的问题

Web集群技术是一种相对较为简单的服务器集群技术, 集群内服务器之间的直接联系较少, 通过共享数据库就可以做到对外表现一致。目前遇到的唯一问题就是会话共享问题。比如前端机为了防止同一个用户在不同的Web负载机之间跳来跳去, 而不同的负载服务器又不能共享会话, Apache提供了会话粘连和会话复制两种方案。

1.3.1 会话粘连 (Session Sticky)

所谓会话粘连就是将同一个会话中的客户端Web请求都定向到同一台Web负载机上, 这样不需要共享会话信息, 处理简单。但问题是一旦用户当前所在的负载机当机, 会话信息就完全丢失。例如之前已经登录的用户刷新网页时突然发现自己注销了, 这就可能是它之前的负载机当机了, 它被前端机分配到新的Web服务器上, 因此丢失了它的会话信息。

1.3.2 会话复制 (Session Distribute)

会话复制, 则是在Web集群内复制会话信息, 即在一台Web服务器上的会话通过多播 (multicast) 通信的方式被复制到所有其他的Web服务器上, 用户在会话中的每次Web请求可以被分配到任何一台Web服务器上。该方式虽然可以解决会话粘连中的会话信息丢失问题, 但由于要在所有服务器上保持会话信息, 因此系统开销较大, 特别是当集群内有大量Web服务器时, 会话信息的任何修改都会引发大量的网络数据传输。

因此, 可见需要有专门的分布式和集群的解决方案来解决Web会话共享的问题, 这将会大大提高Web服务器之间协同的效率。

2 移动互联网软件服务器端对集群的要求

2.1 海量用户和偏重后台的架构需要逻辑处理由集群来完成

除了Web服务器对集群的要求越来越高, 新的移动互联网服务例如微信、云笔记等软件的出现, 对分布式计算和服务器集群也提出了要求。

例如, 随着OTT (over the top) 业务的发展, 移动互联网企业开始向传统电信业务发起了挑战, 它们的用户数已经高达数亿, 但是和传统电信商相比, GSM或者3G业务 (短信、语音、彩信等) 只要手机开机就处于在线状态, 而OTT依赖于无线数据网络, 网络要一直保持在线就很难。目前很多软件采用长连接、慢心跳来保持无线链路避免被超时拆除, 同时为了追求高效和节省手机电能 (过快的能源消耗会直接导致用户减少使用量) , 往往只是提供了单一的网络访问接口。比如客户端只打开一个TCP连接到服务器;所有的请求, 包括登录、图文发送、信息推送和其他逻辑都是通过该连接完成。这样就把很多任务丢给了服务器, 这种架构下各种逻辑功能要由前端负载均衡服务器 (典型的有Linux Virual Server软件负载均衡服务器、硬件的有F5负载均衡机等) 来分发, 并交给后台负载机来处理, 服务器内部的逻辑关系和协同处理将更为复杂。

这样就不仅仅是类似Web网站那样的信息提交和数据库存取了, 而是包含了丰富的应用逻辑, 需要由不同的服务器来完成不同的逻辑功能和计算。同时由于用户量及其巨大, 同样的应用逻辑也是由多台服务器的集群组成, 集群内部如何共享信息和协同工作就成为一个问题。

2.2 一种原始的基于数据库信息中转的分布式编程

举个简单的逻辑应用例子:连接到OTT通信集群内的各个服务器上的用户, 它们之间是如何通过服务器交换即时聊天信息的呢?

一种简单的方法就是类似Web服务器那样, 消息服务器1把用户A要求发给用户B的聊天信息写到数据库的一张转发表上去, 同时消息服务器2会定时地扫描转发表, 一旦发现存在需要路由到它上面的用户的聊天信息, 就读取出来并发给该用户, 至于发送的结果还得再写回数据库, 然后由消息服务器1读出来发给用户A一个消息确认信息。

可以发现, 该过程非常的低效繁琐, 对数据库的访问量很大, 编程方式上看也不是很直接。可以想见, 如果没有一个分布式计算的中间层而单纯地依赖于数据库的写入中转来完成集群内不同服务器之间的数据共享, 是很困难的。

另外一个逻辑应用是集群内如何进行快速的实时运算, 例如要求计算出最近24小时之内, 和指定用户之间的距离在10公里之内按照距离由近到远排列的100个用户。

假定通信集群内有50台消息服务器, 每台上大约有1万的在线用户, 同时还缓存了24小时之内的5万用户的基本信息 (主要是经纬度数据) , 也就是50台服务器上大约有总共300万用户的信息, 如果能够通过分布式的任务调用向这50台服务器同时发布一个计算请求 (输入参数为用户的经纬度坐标) , 让各台服务器分别计算出它们上面的所有用户和该用户的距离在10公里之内的用户列表, 并且返回给发出请求的服务器。这就需要有一个分布式任务的调用和处理机制, 从而让大量的服务器并发进行少量分散计算, 并快速地汇总出结果。

3 Java分布式开发的支持系统

3.1 Java多线程开发的技术要素

要弄清楚Java分布式开发需要什么样的支持环境和系统, 可以从研究和分布式关系比较密切的Java并发编程开始, 也就是Java多线程编程, 看看它需要哪些技术要素?

在多线程编程中面临的问题有线程之间的同步、对共享资源的互斥访问, 以及最好有一些线程安全的数据结构 (例如Map、List、Set和Queue等容器) 提供便捷的安全数据访问。

3.1.1 Java多线程的原生支持

从Java诞生之日起, JDK中的Thread类就提供了在Java虚拟机内运行多个执行线程的可能, Thread类的start、sleep、join等方法完成线程的启动, 休眠和同步等操作。

同时, 在每个Java对象 (object) 的内部都存在一个内部监控锁, 使用synchronized关键词修饰的同步方法或者语句可以对监控锁 (和每个对象相关的) 进行访问, 从而控制多个线程对某段含有对共享资源读写的代码的访问, 即进入synchronized保护的方法或者语句块时获取监控锁, 离开后释放锁。

3.1.2 JDK1.5的多线程支持包

从JDK1.5 (JDK1.5是用于开发者的版本号, 也就是Java产品上的JDK5.0) 开始, 为了简化了多线程程序的开发和提高多线程程序的执行性能, 引入了java.util.concurrent包, 其中包含了一系列多线程支持类和接口。

例如, 为了简化线程的创建和管理, 添加了Executor接口, 它提供一种将任务的提交与每个被提交的任务将如何运行的机制 (包括线程使用的细节、调度等) 分离开来的方法, Executor定义如下:

Executor接口最简单的实现类可以直接在调用者的线程内直接运行Runnable对象, 也可以实现为通过创建额外的线程以异步方式运行Runnable对象。

Executor Service接口提供了方法来管理线程如何终止, 以及通过在提交任务后产生一个Future对象, 来跟踪一个或者多个异步线程的执行过程, Future.cancel方法可以尝试取消任务的执行。

Scheduled Executor Service作为Executor Service的子接口, 可以安排任务在一个给定的延迟时间之后执行, 或者周期性地运行任务。

为了减少大量线程激活过程所产生的开销, 和增强对线程执行过程中资源的管理, 提供了Executors类, 它提供了一系列的工厂方法来创建线程池, 线程池都是Executor Service的实现类:

一个子包java.util.concurrent.locks中提供了接口Lock, 它的众多实现提供更好的锁定共享资源和代码段的方法, 它的一般使用如下:

使用Lock接口可以比使用synchronized方法和语句访问每个对象关联的隐式监控锁, 获得更多灵活性和更多扩展性的锁操作。

例如, 可以先对A锁加锁, 再对B锁加锁, 然后释放A锁, 再获取C锁, 从而允许多个锁按照任意顺序被获取和释放。

再比如, 使用方法try Lock () 尝试性地获取锁, 在不能立即获取锁时立即返回false值, 而不是同synchronized方法那样阻塞进锁的等待中。方法try Lock (long time, Time Unit unit) 则是尝试在指定的时间范围内获取锁。

3.2 多线程环境下的对内存数据结构的要求

在JDK1.5之前, 对多线程下的数据结构的访问要么通过上述的同步方法或者同步语句来保护非线程安全的数据结构, 要么通过java.util.Collections中的synchronized Map (Mapm) 、synchronized List (List?list) 等方法, 它们返回线程安全的Map、List等结构 (其实只是对每个方法添加了synchronized的访问控制) , 例如:

Map m=Collections.synchronized Map (new Hash Map () ) ;//创建一个由Hash Map支持的线程安全的Map对象

到了JDK1.5, 开始用了一个多线程环境下的专用Map接口Concurrent Hash Map, 它不同于上述的synchronized的访问控制, 它使用了几个技巧来获得高程度的并发以及避免锁定, 包括为不同的哈希 (桶) 使用多个写锁和使用JMM (Java memory model) 的不确定性来最小化锁被保持的时间, Map的get、put、remove等常用操作只锁定当前需要用到的桶, 从而改变原来只有单个线程访问Map为允许多个线程同时执行写操作, 获得更好的并发访问性能。

接口Concurrent Map它继承了java.util包中的接口Map的所有方法, 并添加了多线程开发常用的几个原子操作方法:put If Absent, remove, and replace。

3.3 分布式编程的额外需求

分布式和集群环境编程也具有和多线程编程类似的并发控制需求, 并要求内存数据能够做到分布式存储, 即将同一个Map、List等容器的内容在集群内的所有节点之间分片存储, 并保证任何一个节点都能够通过高速网络快速地访问其他节点上的存储数据, 而这一切对于调用者来说是完全透明的, 使用和访问本地数据结构一样的调用语法。

除了容器类的数据结构, 还要求能够实现集群范围内的锁, 即在集群范围内 (而不是单个Java虚拟机内) 实现对共享资源和代码段的访问控制。

能够通过Executor Service接口发布一个分布式的任务调用, 即在一个或者多个其他节点上执行指定的任务, 并自动汇总各个节点的计算结果给调用者节点。

总之, 就是将多线程的并发编程推广到跨越整个集群的多台服务器上, 为开发者提供一个便于理解、概念清晰的编程模型, 以及和多线程开发相类似的接口和类。

4 Hazelcast分布式开发中间层软件

目前国外出现了数款支持Java分布式和集群环境开发的软件中间件, 例如Oracle公司的Coherence组件, 和另外一款中间件Hazelcast, 它是一款基于多播通信的内存数据网格中间件。

这里重点介绍Hazelcast的工作原理和基本功能, 可以作为进行快速分布式开发的一个支持, 它的设计思想和工作原理也为自己实现这样类似的分布式软件中间件提供重要参考。

Hazelcast产品主要分为社区版和企业版两个版本, 两者基本功能一致, 企业版添加了一些高级特性, 而社区版是免费使用的。

4.1 分布式数据结构

(1) Hazelcast支持的分布式数据结构有:Map、Set、List、Queue、Multi Map等。它们是JDK1.5中对应数据结构的一个分布式实现, 并具有并发、分布式、可观察和可查询的特性。以其中的Map为例, 它的分布式特性体现如下:

1) 数据分片存储并有冗余备份:集群内的数据总是在所有节点之间均匀分片存储的。每个节点带有大约为| (1/n*总数据) +备份数据|的数据, n是集群中节点的数量, 这被称为一个分片。也就是说, 每个节点持有Map中所有数据的n分之一, 并持有其他一个或者多个节点的数据作为备份。

2) 单点失效可从备份副本恢复数据:当集群中的某个节点当机时, 集群中持有备份副本的节点会把备份数据分散到所有节点上, 从而保证数据没有丢失。

3) 数据自动重新分片:当有新的成员加入集群时, 会从各个现存节点分得部分数据, 形成新的分片, 从而减轻其他节点的负荷。

4) 节点对等, 去中心化:集群中每个节点都是地位均等的, 不存在一个主的服务器。

5) 部分存储、全部访问:每个节点仅存储部分的数据, 却能够访问到整个Map中的全部的数据。如果访问到的数据恰好是在本地则直接从内存访问, 否则通过网络发送多播请求来拜访存放在其他节点上的数据。如果访问的数据恰好在本节点上有备份数据, 则由用户的配置来决定是直接访问备份数据还是从原始的数据存储节点获取。如果访问备份数据, 则存在一定的数据不一致的风险。

(2) Hazelcast支持Map数据项的基于策略的回收

回收策略 (eviction-policy) :当前支持的回收策略是LRU和LFU。这个特性使得Hazelcast可以被用作分布式缓存。

每个数据项的最大生存时间 (time-to-live-seconds) :如果该值不等于0, 那么比该值老的数据项并且该数据项超过时长time-to-live-seconds都未被更新, 就会被回收掉, 而不用考虑回收策略 (eviction-policy) 是如何设置的。

每个数据项在Map中的最大空闲秒数 (max-idle-seconds) :数据项空闲 (即不被触碰) 时长超过max-idle-seconds会被从Map中回收。数据项不被触碰是指未对其调用get, put或contains Key方法。Map的最大尺寸:当Map的尺寸到达该值时, Map会被执行回收 (基于上述的回收策略) 。

(3) 关于Hazelcast是如何确定Map的每个键值对分别处在集群中哪个节点上的算法

Hazelcast会为Map的键的所有值创建固定数量的虚拟分区 (块) 。分区数量默认被设置为271。每个Map键通过运算, 会落入这些分区之一。每个分区由集群的一个节点所拥有和管理。集群中最老 (即最先进入该集群, 或在集群中存在时间最长的) 的那个节点负责分配分区的所有权, 并让所有其他节点知道哪个节点拥有哪些分区。因此在任意时刻, 每个节点都知道每个分区的拥有者。在访问Map中的键值对时, Hazelcast会把你的键对象转换为com.hazelcast.nio.Data, 然后计算出该键所处的分区。这样因为每个节点都知道每个分区的拥有者, 因此当前节点就能找到Map键所在的那个集群节点。

(4) Hazelcast允许载入和保持分布式数据到一个持久的数据存储上

如果一个载入器实现被提供了 (例如用户提供了一个实现com.hazelcast.core.Map Loader接口的自定义类) , 当get (key) 方法被调用时, 如果Map入口数据项不存在于内存中, 那么Hazelcast会调用载入器从一个数据存储中载入数据。同样, 如果一个存储器实现被提供了, 当put (key, value) 被调用时, Hazelcast会调用存储器实现来存储数据项到一个数据存储。载入器、存储器可以是基于关系型数据库或者文件存储来实现的。

Hazelcast可以同步地 (write-through) 不带延迟地存储数据, 或者异步带有延迟 (write-behind) 的存储, 它在配置文件中通过write-delay-seconds值定义。

当Map第一次被触及和使用时, 载入器也可以用来预先产生内存中的Map数据项。

(5) 对分布式Map的查询

由于数据是分布式存储, Map.get () 方法并非返回数据项的引用, 而是原始数据项的一个克隆, 可以修改该值而不会改变Map中的原始值。必须调用put方法才能让对数据项的改变对所有的集群节点可见。

Hazelcast分片数据并扩散到集群的服务器上。可以完全遍历整个Map数据项并查找感兴趣的某些数据项, 但这不是高效率的, 因为把整个数据集拿到了本地进行遍历。相反, Hazelcast允许对分布式Map运行分布式查询。

分布式查询的语法类似于SQL语句, 例子代码如下:

(6) Hazelcast允许关注数据项事件并添加监听器

监听器用来在Map数据项被添加、更新或者删除时得到通知。监听器是集群范围的。当一个成员对一个Map添加了监听器, 它就是实际上注册了对源于集群内任何成员上发生的数据项改变事件的监听。当一个新的成员加入时, 源于该成员的数据项事件也会被递送。所有事件都是排序了的, 即监听器会按照事件发生的顺序接收和处理事件。

(7) 建立索引

Hazelcast分布式查询会在每个集群成员上并发运行, 并且只把结果返回给调用者。当查询在一个成员上运行时, Hazelcast会遍历该成员的整个数据项并找到匹配的那些数据。是否可以让这个事件快速运行?是的, 通过对最常查询的字段建立索引。就像你对你的数据库做所做的那样。当然, 建索引会增加每次写入操作的负担, 但是查询会变得更快。如果对Map查询的较多, 那就确保对最频繁查询的字段建立索引。因此, 如果查询‘active and age<30’被频繁使用, 那就对它加入索引:

(8) 临近缓存

Map数据项被分片于集群内。如果读取键值k许多次, 而k键被集群中的另一个成员所拥有。每个Map.get (k) 都会是一个远端操作, 有许多网络开销。如果有一个Map, 它主要被读取, 那么可以考虑创建一个临近缓存用于该Map, 因此读取会更加的快速并消耗更少的网络传输。

4.2 分布式的执行器服务 (Executor Service)

分布式执行器服务是java.util.concurrent.Executor Service接口的一个分布式实现。它允许在集群中运行代码。分布式任务必须要求实现了Serializable接口 (即可以被序列化) , 并且是实现了Runnable或者Callable接口之一的Java类。通过Executor Service的execute或submit方法提交分布式任务。

分布式代码执行的目标节点可以如下:在选择的集群成员上执行, 在拥有选定的键值的集群成员上运行, 让Hazelcast帮你任选一个成员, 在集群的所有成员或者成员的一个子集上运行。

如果在集群中运行的任务超过了可以接受的时间, 可以通过Executor Service.submit方法所返回的Future对象的cancel方法取消它。

Execution Callback允许在任务执行完成时, 可以异步地得到通知。当实现Execution Callback.done (Future) 方法时, 可以检查任务是完成了还是已经被取消掉的。

4.3 分布式锁

锁在整个集群范围内有效, 这个锁的特性类似于java.util.concurrent.lock.Reentrant Lock, 即可重入锁。

5 结语

对传统Web网站和移动互联网软件服务器端分布式开发和集群的需求进行了分析, 并引入Java分布式开发的支持系统的基本特征、功能和编程接口, 对Hazelcast软件的功能和原理, 特别是分布式Map对象的分片、回收、持久化、分布式查询等关键技术进行了分析, 希望对正在从事服务器端开发工作的架构师和程序人员提供一定的帮助。

参考文献

[1] (美) 霍斯特曼, 等.JAVA核心技术卷II:高级特性.陈昊鹏, 等, 译.机械工业出版社, 2008.

[2] (美) 布里泰恩, (美) 达尔文.Tomcat权威指南.2版.吴豪, 等, 译.中国电力出版社, 2009.

[3] (美) 黄铠, (美) 福克斯, (美) 唐加拉.云计算与分布式系统:从并行处理到物联网.武永卫, 等, 译.机械工业出版社, 2013.

[4]Oracle.JDK 5.0 Documentation. (2004, 2010) [2004, 2010].http://docs.oracle.com/javase/1.5.0/docs/.

上一篇:让我们为中考加油吧下一篇:企业生态道德建设的必要性与可行性探讨