修炼着,快乐着,只愿努力长成想要的样子~~~~~

发布新日志

  • 基本SQL小结

    2007-07-12 22:58:05

    今天对SQL的基础知识做个小结:

     一,select

    1,select [select_list]

      from [table_name]

      where [search_conditions]

      group by [group_by_list]

      (having [search_conditions])

      order by [order_list]

      (compute [function])

    a.where

      where子句的查询条件可以包括:

    比较运算符:<,>,<=,>=,=,!=,!<,!>

    范围说明:between A and b, not between A and b

    可选值列表:in( ), not in()

    模式匹配:like '_', not like'%'

    是否为空值:is null, is not null

    逻辑组合:and, or, not

    b.group by

      根据条件自动分组,上下分开。

     having子句,和group by连用,对分组指定搜索条件。

    eg.查询多个员工的工资不低于6000的部门编号。

      select dept_id,count(*) from employee

       where e_wage>=6000

       group by dept_id

       having count(*)>=1(多个)

    c.order by [orderby_conditions] [desc,asc]

    d.function 汇总函数(针对行)|(针对列)字段之间直接进行数学计算

    Avg,Sum,Max,Min,Count

    count([*]统计元组个数,[列名]统计一列中值的个数)

    e.union(行连接)

    将两个或两个以上的查询结果合并为一个结果集。

    eg.查询计算机系的学生或者年龄不大于20的学生,按年龄倒序。

    select * from department where sdept='计算机'

    union

    select * from student where sage<=20

    order by sage desc

    f.嵌套

    eg1.查出与学号9500同龄的学生。

    select * from students

    where age=(select age from students

               where sno='9500')

    eg2.查出选修lesson1的学生的学号和姓名。

    select sno, sname from students

    where sno in(select sno from lesson

                 where lno='lesson1')

    2.其他数据操作

    a.update 修改列值

    update 表名 set 列名1=表达式1, 列名2=表达式2 where 条件

    只对单表操作;尽当事务提交(commit)后才生效;也可以通过回滚(rollback)来作废。

    b.delete 清除列

    delete from 表名 where 条件

    无where则清空,表结构还在,整行删除

    c.insert 插入行

    insert into 表名 values( , , ,)

    eg.select * from menu
    insert into menu values (6,'高级人才','person/gaoji.asp')
    update menu set url='person/default.html'
    where menuid=2
    delete from menu where menuid=6

    3.数据表定义

    create table

    drop table

    alter table 修改表:添加表列,重定义表列,更改存储分配

    alter table add constraint 在以有的表上添加约束。

    约束:

    约束类型:主键约束

             唯一性约束

             检查约束

             缺省约束

             外键约束

    4.数据控制语言

    权限控制 grant 权限,角色授予

            revoke 从用户或数据表收回权限

            set role 禁止或允许一个权限

    事务处理控制 commit work 把当前事务作为更改永久化

                rollback 作废上次提交以来的所有更改

    5.存储过程 stored procedure

    6.sql server对象命名

    a.三段式名字表识对象

    <database>.<table>.<colmn>

    b.别名 (as)

    如果指定了别名,那么对数据表所有的操作都必须用别名。

  • OSI模型

    2007-07-09 22:54:33

    The OSI model is a reference model which most IT professionals use to describe networks and network applications.OSI模型是一个参考模式,运用最专业的网络与网络应用来形容.

    The OSI model was originally intended to describe a complete set of production network protocols, but the cost and complexity of the government processes involved in defining the OSI network made the project unviable.OSI模型原本描述了一整套生产网络议定书但成本和复杂的过程,政府确定了互连网络工程不可行. In the time that the OSI designers spent arguing over who would be responsible for what, TCP/IP conquered the world.在当时互连设计师花争论谁负责什么、传输/庆征服世界.

    The seven layers of the OSI model are:7OSI模型有:

    Layer

    Name姓名

    7七月

    Application应用

    6六月

    Presentation表示

    5五月

    Session会议

    4四月

    Transport交通

    3三月

    Network网络

    2二月

    Data Link据链路

    1一月

    Physical物理

    The easiest way to remember the layers of the OSI model is to use the handy mnemonic "All People Seem To Need Data Processing":最容易记住的层层OSI模型是要用好用记忆"一切仿佛需要数据处理":

    Layer

    Name姓名

    Mnemonic记忆

    7七月

    Application应用

    All所有

    6六月

    Presentation表示

    People

    5五月

    Session会议

    Seem似乎

    4四月

    Transport交通

    To

    3三月

    Network网络

    Need需要

    2二月

    Data Link数据链路

    Data数据

    1一月

    Physical物理

    Processing加工

    The functions of the seven layers of the OSI model are:职能OSI模型的七个层分别是:

    Layer Seven of the OSI Model7层的OSI模型

    The Application Layer of the OSI model is responsible for providing end-user services, such as file transfers, electronic messaging, e-mail, virtual terminal access, and network management.应用层OSI模型负责提供最终用户服务,如档案转移、电子信息、电子邮件、虚拟终端接入、网络管理. This is the layer with which the user interacts.这是层与用户互动.

    Layer Six of the OSI Model6层的OSI模型

    The Presentation Layer of the OSI model is responsible for defining the syntax which two network hosts use to communicate. 表示OSI模型层负责确定哪两个网络主机使用语法沟通. Encryption and compression should be Presentation Layer functions.应套层加密和压缩功能.

    Layer Five of the OSI Model5层的OSI模型

    The Session Layer of the OSI model is responsible for establishing process-to-process commnunications between networked hosts.会议层是OSI模型的建立过程中,负责对联网主机之间commnunications进程.

    Layer Four of the OSI Model4层的OSI模型

    The Transport Layer of the OSI model is responsible for delivering messages between networked hosts.OSI模型的运输层负责将信息网络之间的主机. The Transport Layer should be responsible for fragmentation and reassembly.运输层应负责不成改头换面.

    Layer Three of the OSI Model3层的OSI模型

    The Network Layer of the OSI model is responsible for establishing paths for data transfer through the network.OSI模型的网络层负责通过建立网络数据传输通道. Routers operate at the Network Layer.路由器运行在网络层.

    Layer Two of the OSI ModelOSI模型的两个层

    The Data Link Layer of the OSI model is responsible for communications between adjacent network nodes.数据链路层的OSI模型是负责沟通、相邻网络节点. Hubs and switches operate at the Data Link Layer.开关运转枢纽和数据链路层.

    Layer One of the OSI ModelOSI模型层之一

    The Physical Layer of the OSI model is responsible for bit-level transmission between network nodes.OSI模型的物理层负责有点层次之间传输网络节点. The Physical Layer defines items such as: connector types, cable types, voltages, and pin-outs.物理层定义的项目,:连接器型号电缆类型、电压、边奏.

    The OSI Model vs. The Real WorldOSI模型与现实世界

    The most major difficulty with the OSI model is that is does not map well to the real world!最重要的是,OSI模型的困难是没有好到现实世界地图!

    The OSI was created after many of todays protocols were already in production use.该系统互连后形成的许多人已经在生产使用today's议定书. These existing protocols, such as TCP/IP, were designed and built around the needs of real users with real problems to solve.这些现有议定书等的TCP/庆设计并围绕用户的实际需要,

  • Java2平台

    2007-07-05 22:48:36

    Java2平台包括:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类,主要用于桌面应用软件的编程。比如:数据库连接、接口定义、输入/输出、网络编程。可以这样理解:J2SE是基础;压缩一点,再增加一些CLDC等方面的特性就是J2ME;扩充一点,再增加一些EJB等企业应用方面的特性就是J2EE。
  • J2ME

    2007-07-05 22:45:55

    J2ME(Java 2 micro Edition)是一种高度优化的Java运行环境,针对市面上的大量消费电子设备,例如Papers、cellularphones(蜂窝电话), screen-phones(可视电话?)、digital set-top boxes(数字机顶盒)、car navigation systems(汽车导航系统)等等。 J2ME技术在1999年的JavaOne Developer Conference大会上推出。J2ME技术将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序

          J2ME就是Java 2 micro Edition的缩写,是sun的java 2 的三大成员之一(J2SE,J2EE,J2ME)。专门用于开发消费性电子产品。例如手机,PDA等。

    一、J2ME平台体系结构

          J2ME并不是一种产品,而是一种技术,J2ME包括两种类型组件,即配置(configuration)和简表(profile)。

          配置(configuration)是一系列低层次的API应用编程接口)和一种为该族设备优化的虚拟机。今天在用的一般配置有两种,连接的设备配置(CDC)和限制连接的设备配置(CLDC)。

          CDC提供了一种虚拟机,以及支持像灵敏发报机、寻呼机、个人数字助理(PDA)和电视机顶盒这样的设备上的Java应用的基类库。这些设备的典型特征是具有一个32位的处理器和用来支持虚拟机和类库的超过2MB存储容量。CVM虚拟机正好满足了它们对于Java 2虚拟机特征集的功能需求。这是在小型平台上全特征的虚拟机。

          CLDC提供一个适合于小型的、资源受限的、连接的设备上使用的标准Java平台。这些设备的典型特征是具有一个16位或者32位的处理器和用来支持虚拟机和类库的160KB到512KB的总内存,它们通常以电池作为电源,并联入某类网络中,联网一般使用带宽时常小于9600bps的无线的、断断续续的连接方式。CLDC的核心是K虚拟机KVM)。“K”标记反映了它们的大小是以kilobytes(千字节)衡量的这一事实。CLDC的特征也是包含一系列类库。

      CDC的硬件参数:

      ·2M以上内存。
      ·具有网络连接能力,通常为无线网络。
      ·需要实现
    java虚拟机规范的全部功能。
      ·32位或者64位的处理器。

      CLDC的硬件参数:

      ·512 KB 以下内存
      ·有限能源供应(通常使用电池)
      ·有限或非持续网络连接
      ·简单的用户界面
      ·16位或者32位的处理器

      从上述的标准中我们不难看出CLDC主要针对那些资源非常受限的设备比如手机、PDA、双工寻呼机等。而CDC主要面对那些家电产品,比如机顶盒、汽车导航系统等。简表是以配置为基础的,例如Mobile Information Devices Profile(MIDP)就是CLDC上层的重要简表。与配置的纵向特性不同的是,简表是横向的。下图是J2ME体系结构的框图:


        J2ME体系结构框图

          简表(profile)是一种说明,它详细描述了架构在配置之上并使用配置的一系列API。简表的一个例子是创建在CDC之上的基础描述(Foundation Profile),它为以像住宅网关、灵敏电话和双向寻呼机这样的设备为目标的应用提供完整的J2ME运行时环境。另一种简表是移动信息设备描述(MIDP),它构建在CLDC之上,为那些运行在像移动电话和登录级PDA这样的设备上的应用提供完整的J2ME运行时环境。MIDP致力于解决像用户界面、持久存储、联网和应用程序生命周期这样的问题。

    二、J2ME 目标设备

          使用 CLDC 开发的 J2ME 应用程序的目标设备通常具有以下特征:

          · 可供 Java 平台使用的 160 到 512 千字节的总内存
          · 功率有限,常常是电池供电
          · 网络连通性,常常是无线的、不一致的连接并且带宽有限
          · 用户接口混乱,程度参差不齐;有时根本就没有接口

          一些 CLDC 支持的设备,包括无线电话、寻呼机、主流个人数字助手 (/pda/ PDA),以及小型零售支付终端。

          依照 Sun Microsystems,CDC 的目标设备通常具有以下特征:

          · 使用 32 位处理器
          · 2 兆字节或更多可供 Java 平台使用的总内存
          · 设备要求的 Java 2 “蓝皮书”虚拟机的全部功能
          · 网络连通性,常常是无线的、不一致的连接并且带宽有限
          · 用户接口混乱,程度参差不齐;有时根本就没有接口

          一些 CDC 支持的设备,包括常驻网关、智能电话和通讯器、PDA、管理器、家用电器、销售网点终端以及汽车导航系统。

    三、J2ME、J2SE与J2EE之间的比较

          下面的图表描述了支持 J2ME 应用程序的设备,同时说明了 J2ME 适合 Java 平台之处: 
     
    四、J2ME开发工具

    1)、J2MEWTK,这个工具在前文已经提到过,它是最基本的J2ME程序开发工具,免费,体积小,速度较快,完全遵守J2ME的各种规范。具有简单的IDE界面,易于上手,开发十分方便快捷,可以和 Forte 3.0捆绑。J2MEWTK适用于初学者和已经达到很高水平的开发者。窃以为J2MEWTK+JDK+Editplus/UltraEdit是绝配。

    2)、VisualAge Micro Edition 1.4。这是IBM的产品,号称是J2ME开发领域的TOP 1,但是我用了半天,也没有看出好在那里。马上就删除了。窗口太复杂,不明所以,开发起来很难适应,速度和J2MEWTK一样,比较庞大,装了这个东西,你的C盘就要小心了,多了很多乱七八糟的文件,还注册了许多COM组件,典型的非绿色软件

    3)、CodeWarrior for Java 6.0。这是Motolola的产品,功能十分强大,集成度很好,开发,调试,发布J2ME程序都很方便(还可以做一般的Java Program)。它的IDE和Visual Studio十分相似,很容易上手。CodeWarrior比较适合中等水平的开发者的使用。不过CodeWarrior不是免费软件,你只能够免费使用30天。

    4)、Borland Jbuilder 5.0的Nokia Bobile版

  • J2EE

    2007-07-05 22:43:46

    J2EE(Java 2 Enterprise Edition)是建立在Java 2平台上的企业级应用的解决方案。J2EE技术的基础便是Java 2平台,不但有J2SE平台的所有功能,同时还提供了对EJBServlet,JSP,XML等技术的全面支持,其最终目标是成为一个支持企业级应用开发的体系结构,简化企业解决方案的开发,部署和管理等复杂问题。事实上,J2EE已经成为企业级开发的工业标准和首选平台。

      J2EE并非一个产品,而是一系列的标准。市场上可以看到很多实现了J2EE的产品,如BEA WebLogic,IBM WebSphere以及开源JBoss等等。

          J2EE,是sun公司提出的一个标准,符合这个标准的产品叫"实现";其中你下载的sun公司的j2ee开发包中就有一个这样的"实现",而jboss,weblogic,websphere都是j2ee标准的一个"实现"。由于jboss,weblogic,websphere自身带有j2ee的api,所以可以不使用sun的j2ee实现。

    一. J2EE的概念

          目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Java2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。

          J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。

          J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。

    二. J2EE的优势

         J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:
          保留现存的IT资产: 由于企业必须适应新的商业需求,利用已有的企业
    信息系统方面的投资,而不是重新制定全盘方案就变得很重要。这样,一个以渐进的(而不是激进的,全盘否定的)方式建立在已有系统之上的服务器端平台机制是公司所需求的。J2EE架构可以充分利用用户原有的投资,如一些公司使用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及Netscape Application Server。这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。

          高效的开发: J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:

          状态管理服务 -- 让开发人员写更少的代码,不用关心如何管理状态,这样能够更快地完成程序开发。
          持续性服务 -- 让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。
          分布式共享数据
    对象CACHE服务 -- 让开发人员编制高性能的系统,极大提高整体部署的伸缩性。
          支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。J2EE标准也允许客户订购与J2EE兼容的第三方的现成的
    组件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用。
          可伸缩性: 企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统,这种系统单机可支持64至256个处理器。(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈,允许多台服务器集成部署。这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来商业应用的需要。
          稳定的可用性: 一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的,即使在夜间按计划停机也可能造成严重损失。若是意外停机,那会有灾难性后果。J2EE部署到可靠的操作环境中,他们支持长期的可用性。一些J2EE部署在WINDOWS环境中,客户也可选择健壮性能更好的操作系统如Sun Solaris、IBM
    OS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择。

    三. J2EE 的四层模型

          J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。事实上,sun设计J2EE的初衷正是为了解决两层模式(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议――通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在J2EE 的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,以下是 J2EE 典型的四层结构:

          运行在客户端机器上的客户层组件
          运行在J2EE服务器上的Web层组件
          运行在J2EE服务器上的业务逻辑层组件
          运行在
    EIS服务器上的企业信息系统(Enterprise information system)层软件

          J2EE应用程序组件
          J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元,它们通过相关的
    文件组装成J2EE应用程序,并与其他组件交互。J2EE说明书中定义了以下的J2EE组件:
          应用客户端程序和applets是客户层组件.
          Java Servlet和JavaServer Pages(JSP)是web层组件.
          Enterprise JavaBeans(EJB)是业务层组件.

          客户层组件
          J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.
          web 层组件J2EE web层组件可以是JSP 页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。

          正如下图所示的客户层那样,web层可能包含某些 JavaBean 对象来处理用户输入,并把
    输入发送给运行在业务层上的enterprise bean 来进行处理。

          业务层组件
          业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprise bean 进行处理. 下图表明了一个enterprise bean 是如何从客户端程序接收数据,进行处理(如果必要的话), 并发送到EIS 层储存的,这个过程也可以逆向进行。

          有三种企业级的bean: 会话(session) beans, 实体(entity) beans, 和 消息驱动(message-driven) beans. 会话bean 表示与客户端程序的临时交互. 当客户端程序执行完后, 会话bean 和相关数据就会消失. 相反, 实体bean 表示数据库的表中一行永久的记录. 当客户端程序中止或服务器关闭时, 就会有潜在的服务保证实体bean 的数据得以保存.消息驱动 bean 结合了会话bean 和 JMS的消息监听器的特性, 允许一个业务层组件异步接收JMS 消息.

          企业信息系统层
          企业信息系统层处理企业信息系统
    软件包括企业基础建设系统例如企业资源计划 (ERP), 大型机事务处理, 数据库系统,和其它的遗留信息系统. 例如,J2EE 应用组件可能为了数据库连接需要访问企业信息系统

          我们就J2EE的各种组件、服务和API,进行更加详细的阐述,看看在开发不同类型的企业级应用时,根据各自需求和目标的不同,应当如何灵活使用并组合不同的组件和服务。

    · Servlet

          Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。

    · JSP

          JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。

    · EJB

          EJB定义了一组可重用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。在装配组件时,所有的Enterprise Beans都需要配置到EJB服务器(一般的Weblogic、WebSphere等J2EE应用服务器都是EJB服务器)中。EJB服务器作为容器和低层平台的桥梁管理着EJB容器,并向该容器提供访问系统服务的能力。所有的EJB实例都运行在EJB容器中。EJB容器提供了系统级的服务,控制了EJB的生命周期。EJB容器为它的开发人员代管了诸如安全性、远程连接、生命周期管理及事务管理等技术环节,简化了商业逻辑的开发。EJB中定义了三种Enterprise Beans:

    ◆ Session Beans

    ◆ Entity Beans

    ◆ Message-driven Beans

    · JDBC

          JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。Java中的JDBC相当与Microsoft平台中的ODBC(Open Database Connectivity)。

    · JMS

          JMS(Java Message ServiceJava消息服务)是一组Java应用接口,它提供创建、发送、接收、读取消息的服务。JMS API定义了一组公共的应用程序接口和相应语法,使得Java应用能够和各种消息中间件进行通信,这些消息中间件包括IBM MQ-Series、Microsoft MSMQ及纯Java的SonicMQ。通过使用JMS API,开发人员无需掌握不同消息产品的使用方法,也可以使用统一的JMS API来操纵各种消息中间件。通过使用JMS,能够最大限度地提升消息应用的可移植性。 JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信。

    · JNDI

          由于J2EE应用程序组件一般分布在不同的机器上,所以需要一种机制以便于组件客户使用者查找和引用组件及资源。在J2EE体系中,使用JNDI(Java Naming and Directory Interface)定位各种对象,这些对象包括EJB、数据库驱动、JDBC数据源及消息连接等。JNDI API为应用程序提供了一个统一的接口来完成标准的目录操作,如通过对象属性来查找和定位该对象。由于JNDI是独立于目录协议的,应用还可以使用JNDI访问各种特定的目录服务,如LDAP、NDS和DNS等。

    · JTA

          JTA(Java Transaction API)提供了J2EE中处理事务的标准接口,它支持事务的开始、回滚和提交。同时在一般的J2EE平台上,总提供一个JTS(Java Transaction Service)作为标准的事务处理服务,开发人员可以使用JTA来使用JTS。

    · JCA

          JCA(J2EE Connector Architecture)是J2EE体系架构的一部分,为开发人员提供了一套连接各种企业信息系统(EIS,包括ERP、SCM、CRM等)的体系架构,对于EIS开发商而言,它们只需要开发一套基于JCA的EIS连接适配器,开发人员就能够在任何的J2EE应用服务器中连接并使用它。基于JCA的连接适配器的实现,需要涉及J2EE中的事务管理、安全管理及连接管理等服务组件。

    · JMX

          JMX(Java Management Extensions)的前身是JMAPI。JMX致力于解决分布式系统管理的问题。JMX是一种应用编程接口、可扩展对象和方法的集合体,可以跨越各种异构操作系统平台、系统体系结构和网络传输协议,开发无缝集成的面向系统、网络和服务的管理应用。JMX是一个完整的网络管理应用程序开发环境,它同时提供了厂商需要收集的完整的特性清单、可生成资源清单表格、图形化的用户接口;访问SNMP的网络API;主机间远程过程调用;数据库访问方法等。

    · JAAS

          JAAS(Java Authentication and Authorization Service)实现了一个Java版本的标准Pluggable Authentication Module(PAM)的框架。JAAS可用来进行用户身份的鉴定,从而能够可靠并安全地确定谁在执行Java代码。同时JAAS还能通过对用户进行授权,实现基于用户的访问控制。

    · JACC

          JACC(Java Authorization Service Provider Contract for Containers)在J2EE应用服务器和特定的授权认证服务器之间定义了一个连接的协约,以便将各种授权认证服务器插入到J2EE产品中去。

    · JAX-RPC

          通过使用JAX-RPC(Java API for XML-based RPC),已有的Java类或Java应用都能够被重新包装,并以Web Services的形式发布。JAX-RPC提供了将RPC参数(in/out)编码和解码的API,使开发人员可以方便地使用SOAP消息来完成RPC调用。同样,对于那些使用EJB(Enterprise JavaBeans)的商业应用而言,同样可以使用JAX-RPC来包装成Web服务,而这个Web Servoce的WSDL界面是与原先的EJB的方法是对应一致的。JAX-RPC为用户包装了Web服务的部署和实现,对Web服务的开发人员而言,SOAP/WSDL变得透明,这有利于加速Web服务的开发周期。

    · JAXR

          JAXR(Java API for XML Registries)提供了与多种类型注册服务进行交互的API。JAXR运行客户端访问与JAXR规范相兼容的Web Servcices,这里的Web Services即为注册服务。一般来说,注册服务总是以Web Services的形式运行的。JAXR支持三种注册服务类型:JAXR Pluggable Provider、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry和ebXML Registry/Repository等)。

    · SAAJ

          SAAJ(SOAP with Attachemnts API for Java)是JAX-RPC的一个增强,为进行低层次的SOAP消息操纵提供了支持。

    四. J2EE 的结构

          这种基于组件,具有平台无关性的J2EE 结构使得J2EE 程序的编写十分简单,因为业务逻辑被封装成可复用的组件,并且J2EE 服务器以容器的形式为所有的组件类型提供后台服务. 因为你不用自己开发这种服务, 所以你可以集中精力解决手头的业务问题.

          容器和服务

          容器设置定制了J2EE服务器所提供得内在支持,包括安全,事务管理,JNDI(Java Naming and Directory Interface)寻址,远程连接等服务,以下列出最重要的几种服务:

          J2EE安全(Security)模型可以让你配置 web 组件或enterprise bean ,这样只有被授权的用户才能访问系统资源. 每一客户属于一个特别的角色,而每个角色只允许激活特定的方法。你应在enterprise bean的布置描述中声明角色和可被激活的方法。由于这种声明性的方法,你不必编写加强安全性的规则。

          J2EE 事务管理(Transaction Management)模型让你指定组成一个事务中所有方法间的关系,这样一个事务中的所有方法被当成一个单一的单元. 当客户端激活一个enterprise bean中的方法,容器介入一管理事务。因有容器管理事务,在enterprise bean中不必对事务的边界进行编码。要求控制分布式事务的代码会非常复杂。你只需在布置描述文件中声明enterprise bean的事务属性,而不用编写并调试复杂的代码。容器将读此文件并为你处理此enterprise bean的事务。

          JNDI 寻址(JNDI Lookup)服务向企业内的多重名字和目录服务提供了一个统一的接口,这样应用程序组件可以访问名字和目录服务.

          J2EE远程连接(Remote Client Connectivity)模型管理客户端和enterprise bean间的低层交互. 当一个enterprise bean创建后, 一个客户端可以调用它的方法就象它和客户端位于同一虚拟机上一样.

          生存周期管理(Life Cycle Management)模型管理enterprise bean的创建和移除,一个enterprise bean在其生存周期中将会历经几种状态。容器创建enterprise bean,并在可用实例池与活动状态中移动他,而最终将其从容器中移除。即使可以调用enterprisebean的create及remove方法,容器也将会在后台执行这些任务。

    五、企业级应用示例

          下面我们通过假设一个企业应用的J2EE实现,来了解各种组件和服务的应用。假设应用对象是计算机产品的生产商/零售商的销售系统,这个销售系统能够通过自己的网站发布产品信息,同时也能将产品目录传送给计算机产品交易市场。销售系统能够在线接受订单(来自自己的Web网站或者来自计算机产品交易市场),并随后转入内部企业管理系统进行相关的后续处理。

          参见图1,这个企业应用可以这种方式架构。该企业应用的核心是产品目录管理和产品定购管理这两个业务逻辑,使用EJB加以实现,并部署在EJB容器中。由于产品目录和定购信息都需要持久化,因此使用JDBC连接数据库,并使用JTA来完成数据库存取事务。


    图1 J2EE应用示例

          然后使用JSP/Servlet来实现应用的Web表现:在线产品目录浏览和在线定购。为了将产品目录发送给特定的交易市场,使用JMS实现异步的基于消息的产品目录传输。为了使得更多的其它外部交易市场能够集成产品目录和定购业务,需要使用Web Services技术包装商业逻辑的实现。由于产品定购管理需要由公司内部雇员进行处理,因此需要集成公司内部的用户系统和访问控制服务以方便雇员的使用,使用JACC集成内部的访问控制服务,使用JNDI集成内部的用户目录,并使用JAAS进行访问控制。由于产品订购事务会触发后续的企业ERP系统的相关操作(包括仓储、财务、生产等),需要使用JCA连接企业ERP。

          最后为了将这个应用纳入到企业整体的系统管理体系中去,使用Application Client架构了一个管理客户端(与其它企业应用管理应用部署在一台机器上),并通过JMX管理这个企业应用。

  • 基本排序的几种算法总结

    2007-07-04 13:57:14

    #include <stdio.h>
    #include <time.h>
    #include<stdlib.h>
    #include<dos.h>
    #define n 10000
    typedef int keytype;
    typedef struct{
        keytype key;
      }rectype;//待排序的文件的记录类型
    typedef rectype seqlist[n+1];
    seqlist r;
    int m;
    main()//主程序
      {
      int i,j;

      //选择一种数据输入形式
      printf("1---random data\n");
      printf("2---inscre data\n");
      printf("3---descre data\n");
      printf("4---input data\n");
      scanf("%d",&j);
      if (j==1) randoming();//产生一组随机数据

      if (j==2)//产生一组递增序列
       for (m=1;m<=n;m++)
        r[m].key=m;

      if (j==3)//产生一组递减序列
       for(m=1;m<=n;m++)
        r[m].key=n-m+1;

      if (j==4){//由用户自己输入数据序列,设这组数据中不含0,以0作为结束
        printf("please input the sort data:(end of 0)\n");
        r[0].key=1;
        m=0;
        while((m<=n)&&(r[m].key)){
          m++;
          scanf("%d",&(r[m].key));
         }//end of while
        m--;
       }//end of if

      printf("1-----insertsort\n");
      printf("2-----bubblesort\n");
      printf("3-----selectsort\n");
      printf("4-----quicksort\n");
      printf("5-----heapsort\n");
      scanf("%d",&j);

      //输出排序前的序列
      printf("the source data:\n");
      for(i=1;i<=m;i++)
       printf("%d ",r[i].key);
      printf("\n");

      //选择一种方法进行排序
      if (j==1) insertsort(m);//直接插入排序
      if (j==2) bubblesort(m);//冒泡排序
      if (j==3) selectsort(m);//直接选择排序
      if (j==4) quicksort(1,m);//快速排序
      //if (j==5) heapsort(m);//堆排序

      //以下输出排序结果
      printf("the answer data:\n");
      for(i=1;i<=m;i++)
        printf("%d ",r[i].key);
     }//end of main


     insertsort(int m)
      {//直接插入排序
       int i,j;
       for(i=2;i<=m;i++)
        if (r[i].key<r[i-1].key){
          r[0].key=r[i].key;j=i-1;
          do{
             r[j+1].key=r[j].key;
             j--;
           }while (r[0].key<r[j].key);
          r[j+1].key=r[0].key;
         }//end of if
      }//end of insertsort

     bubblesort(int m){
       //冒泡排序
       int i,j;
       int exchange;
       for(i=1;i<m;i++){
         exchange=0;//设置未交换过标记
         for(j=m-1;j>=1;j--)
          if(r[j+1].key<r[j].key){//若逆序
            r[0].key=r[j+1].key;//以r[0]为辅助空间交换
            r[j+1].key=r[j].key;
            r[j].key=r[0].key;
            exchange=1;//设置做过交换标志
           }//end of if
         if (!exchange) return;
        }//end of for
      }//end of bubblesort

     selectsort(int m)
       {//直接选择排序
        int i,j,k;
        for(i=1;i<m;i++){
          k=i;
          for(j=i+1;j<=m;j++)//在无序区r[j..m]中查找最小关键字位置k
           if(r[j].key<r[k].key)
             k=j;
          if (k!=i){//若k<>i,则交换,扩大有序区
            r[0].key=r[i].key;
            r[i].key=r[k].key;
            r[k].key=r[0].key;
           }//end of if
         }//end of for
       }//end of selectsort

     quicksort(int low,int high)
      {//对r[low..high]进行快速排序
       int pivotpos;
       if(low<high){
        pivotpos=partition(low,high);//对r[low..high]进行一次快速排序,
                //以pivotpos为划分点,分成两个无序区r[low..pivotpos-1]和r[pivotpos+1..high]
            quicksort(low,pivotpos-1);//对r[low..pivotpos-1]进行快速排序
         quicksort(pivotpos+1,high);//对r[pivotpos+1..high]进行快速排序
        }//end of if
        }//end of quicksort
  • QTP的学习(转)

    2007-07-04 13:54:34

            我们使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。

            建议大家参照 Tutorial_oldsidney_cn.pdf 文件来认认真真、从头到尾地执行一遍,包括录制脚本、分析脚本、增加check point、Split Action等。我想这会减少你在学习QTP过程中的不少困惑和疑虑。


            这篇文档对如何使用QTP写的非常详细,是QTP初学者的经典教材。我就是看了这篇文档后才对QTP的整个测试流程有了一个初步的认识。在此,表示感谢。

            注意:
          1. 确保你的IE运行正常,依次点击菜单 查看 --> 工具栏,一定要上网助手等插件卸载掉,特别3721这个垃圾网站和其它拦截广告的插件(它也把测试过程中弹出的窗口当成广告,一样会拦截的!)
          2. 如果是按照Tutorial_oldsidney_cn.pdf 文件 中的订购飞机票的例子来练习 QTP的使用,那么只需选择Web 插件就可以了。如果是测试其它的应用程序或系统,就要根据需要来选择相应的插件了。
    在这个阶段你就要自己针对某个系统去录制脚本、维护脚本了。在录制后的回放过程中,你可能会遇到各种问题,这个时候就需要发挥你的主观能动性来解决遇到的问题。

            我想你可以按照下面的方法去解决:

           1. 查看QTP的有关文档,包括Help 、QTP User’s Guide等文档。这些都是比较系统全面的学习材料。你该好好利用呀。
           2. 在本论坛上查看以前别人是如何解决此类问题的(如果有的话)或者是发新贴寻求帮助,也可以搜索Google 等网站寻找问题的解决方法;
           3. 与自己部门的同事交流,例如与测试人员交流他们是如何解决的,与开发人员交流某个QTP无法识别的控件具体是是用什么来识别的等。毕竟他们对你测试的环境和测试的软件比论坛上的人熟悉呀。
           4. 自己通过学习VB scrīpt 等方式来提高自己的管理QTP scrīpt的能力。

            或许你会发现许多问题都是由提出问题的人来解决的,因为他们希望问题得到解决的迫切心比谁都强烈。
            如果你对VB scrīpt 、QTP和需要测试的程序或系统非常熟悉,你可能就想直接写QTP scrīpt来表现一下了。如果你能达到这个水平,那么恭喜你---你就是真正的高手了。这个时候你已经可以从宏观上把握QTP了,也能灵活自如地使用QTP了。

  • 数据驱动在QTP的运用(转)

    2007-07-04 13:52:36

    所谓数据驱动就是用一个数据文件把测试脚本驱动起来,来达到更接近用户化更智能的测试.其目的是把测试人员从维护复杂的脚本程序中解放出来,只需维护好数据文件即可,减少了很多修改脚本的麻烦.下面讲一下通过四种途径来达到数据驱动.

    1.datatable

            QTP本身程序就给我们提供了这么一个数据表,我们可以把测试数据或测试用例填入这个数据表中.

    如:设计用例

       username  passwd

    case1  mercury mercury

    case2 xxxxxxx xxxxxx

    录制脚本

    For i=1 to Datatable.GetRowCount
    Dialog("Login").WinEdit("Agent Name:").Set
    DataTable("username", dtGlobalSheet)
    Dialog("Login").WinEdit("Password:").Set
    DataTable("passwd", dtGlobalSheet)
    Dialog("Login").WinButton("OK").Click
    datatable.GlobalSheet.SetNextRow
    Next

            本例是验证一个登录系统,通过DataTable不同的用例设计,驱动起这段脚本,达到测试的效果.当然上面的例子中还少一个很重要的步骤,那就是结果比较.如果不能进行结果比较的自动化测试不能够称为自动化测试.
            当然我们这里主要讲的是数据驱动,所以不在对上面的例子进行补充.

    2.文本文件

            我们可以把文本文件当成数据文件,通过对文本文件的读写操作,来实现数据驱动.

    例:文本文件内的内容

      mercury,mercuy

    读文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile,username,passwd
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\testing.txt",1,false)
    tmp=split(myfile.readline,",")
    username=tmp(0)
    passwd=tmp(1)
    myfile.close
    End Function

    写文本文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\result1.txt",8,false)
    myfile.writeline orderno
    myfile.close
    End Function

    3EXCEL文件

            我们可以把EXCEL文件当成数据文件,通过对EXCEL文件的读写操作,来实现数据驱动.

            可以把EXCEL文件当作对象的方式来完成写的操作

    Dim Excel,ExcelSheet
    Set Excel=CreateObject("Excel.Application")
    Set ExcelSheet=CreateObject("Excel.Sheet")
    ExcelSheet.Application.visible=true
    ExcelSheet.ActiveSheet.Cells(1,1).value=1
    ExcelSheet.ActiveSheet.Cells(1,2).value=2
    ExcelSheet.ActiveSheet.Cells(1,3).value=3
    Excel.Save "C:\test.xls"
    Set ExcelSheet=Nothing

            用ADO的方式连接EXCEL文件来做读的操作


    Dim conn,input,filename
    filename="D:\公基本情况(tb_gsgk)-标准格式.xls" '
    Set conn= createobject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&filename&";Extended Properties='Excel 8.0;hdr=yes'"
    Set input= createobject("ADODB.Recordset")
    input.Open "select * from [公基本情况-标准格式$] " ,conn,2,2
    input.close
    Set input=nothing

    4.数据库

            可以利用设计数据表,把测试数据和测试用例放在数据表里,用ADO或者其他任何可以访问连接数据库的方式连接数据库,来实现数据驱动

       Dim res,cmd,sql
    Set Res=createobject("adodb.recordset")
    Set Cmd=createobject("adodb.command")
    Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改
    Cmd.CommandType = 1
    sql="selec t * from 表 where name=username"
    Cmd.CommandText = sql
    Set res = Cmd.Execute()
    Set res = nothing
    Set cmd.ActiveConnection = nothing
    Set Cmd= nothing

    以上四种方法都可以帮助我们实现数据驱动,应该说数据驱动在自动化测试中运用的比较的广泛,才有必要拿出来探讨一下.

  • The second part of QC study

    2007-06-22 12:37:25

       今日打开论坛,和往常一样,直奔"查看新贴"而去,却在页面将要跳转之际,意外的在首页上看到了自己的名字,斑竹真是太眷顾我了,第一次写日志就被"挖"到了首页,这让我一界菜鸟,突然感到自信心都要膨胀了,哈哈。

      不说废话了,接着进行QC的学习。

      the second part of QC is the test plan:

       After you define your test requirements, you need to determine your testing goals. To do this, examine your application, environment, and testing process to outline the testing strategy for achieving your goals.  

      After you determine your goals, you build the test plan tree, which divides your application to subjects. For each subject you define test that contain steps. For each step, you specify the action that you to be performed on your application and the expected result.

      After you design your tests, you can decide which tests to automate. When you automate a test, you can generate a test scrīpt and then complete it using orther Mercury testing tools(QTP or Winrunner).

       In this lesson, you will learn about: developing a test plan tree; designing test steps; copying test steps; caling tests with parameters; creating and viewing requirement coverage; generating automated test scrīpts.

     

       the third part of QC is the test lab module:

       Runing tests is the core of the testing prosess. As your application changes, you run manual and automated tests in your project to locate defects and assess quality.

       You start by creating test sets and choosing which tests to include in each set. A test set is a group of tests in  a QC project designed to achieve specific testing goals. QC enables you to control the execution of tests in a test set by setting conditions and scheduling the date and time for executing your tests.

        After your define test sets, you can begin to execute your tests. When you run a test manually, you execute the test steps you defined in test planning. You pass or fail each step, depending on whether the actual results match the expectde output. When you run a test automatically, QC opens the selectde testing tool, runs the test, and exports the test results to QC.

        In this lesson, you will learn about:Defining test sets; Adding test to a test set; Scheduling test runs; Running tests manually; Running tests automatically.

        the forth part is adding and tracking defects:

        Locating and repairing defects is an essential phasd in application development. Defects can be detected and submitted by developers, testers, and end users in all stages of the testing processs. Using QC, you can submit defects detected in the application and track them until they are repaired.

       In this lesson, you will learn about: how to track defects; adding new defects; matching defects; uptadting defects; mailing defects; linking defects to tests; creating favorite views.

  • 开山之作——面试处女秀

    2007-06-21 01:13:52

       学习已经到第三阶段了,今天第一次去了一家公司面试,传说中很注重英文的公司,去看了一下,果然“名不虚传”,做的卷子大多是考察英文能力的。看到了久违的阅读理解,一点也不感觉亲切,读了大半了还没找到感觉。大体意思还是理解的,也不知道到底答的怎么样。

      面试更是试图将英文进行到底,当然你也可以不用,那样能在那里工作的几率嘛,当然是不用说的了。遇到一个题目,要用英文描述一下QC,我先答了有四个部分,各是什么,然后还想描述一下各个部分都是干吗的,就磕在那里说不出来了,回头想了想,不是不能用英文表达,而是用中文,我其实说不出什么东西来了。所以现在总结一下,还是基础知识掌握的不够的扎实,学过的东西,没再复习就忘记了。就像QC,学的那几天回家来装在电脑上,新鲜了两天,就再也没碰过了。

      所以,现在搬出QC的教程,再看一遍,争取下次在遇到同样的问题,能够肚子里有货,无论是中文还是英文的,都能对答如流!

      以下为今晚的学习笔记:

       Quality Center helps you organize and manage all phases of the application testing process, including special testing requirements, planing tests, executing tests, and tracking defects.(这是摘自QC教程上的,感觉我早上答的跟这个差不多嘛,呵呵)

      You can definite the requirements in QC by creating requirement tree. After you create the test in the Test Plan module, you can link requirements to test. Later, after begin to logging defects, you can link requirements to defects. In this way, you can keep track of your testing need at all the stages in your testing process. If a testing requirement changes, you can immediately identify which test cases and defects are affected, and who is reponsible for them.

       

数据统计

  • 访问量: 10987
  • 日志数: 10
  • 建立时间: 2007-05-18
  • 更新时间: 2007-07-12

RSS订阅