qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

内存测试工具memtester

 Memtester是用户态工具,用于测试内存子系统的故障。非常方便,支持32位 或64位Unix-like系统。对于硬件开发开发者来说,memtester可以定位到物理地址。

  1. 安装

  下载地址http://pyropus.ca/software/memtester/

  获取memtester-4.2.2.tar.gz源码包。

#tar –zxvf memtester-4.2.2.tar.gz
#make
#make install

  2.测试

  ./memtester [-p physaddrbase] <mem>[B|K|M|G] [loops]

  其中:

  Physaddrbase: 需要测试的物理地址;

  <mem>[B|K|M|G]:测试内存的大小;

  [loops]:测试次数

  案例:

[root@RedHat memtester-4.2.2]# ./memtester -p 0x0a0000 4k 1
memtester version 4.2.2 (32-bit)
Copyright (C) 2010 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).
pagesize is 4096
pagesizemask is 0xfffff000
want 0MB (4096 bytes)
Loop 1/1:
Stuck Address       : testing   0FAILURE: possible bad address line at physical address 0x000a0000.
Skipping to next test...
Random Value        : ok
Compare XOR         : ok
Compare SUB         : ok
Compare MUL         : ok
Compare DIV         : ok
Compare OR          : ok
Compare AND         : ok
Sequential Increment: ok
Solid Bits          : ok
Block Sequential    : ok
Checkerboard        : ok
Bit Spread          : ok
Bit Flip            : ok
Walking Ones        : ok
Walking Zeroes      : ok
8-bit Writes        : ok
16-bit Writes       : ok
Done.
[root@RedHat memtester-4.2.2]#

posted @ 2013-08-06 10:34 顺其自然EVO 阅读(458) | 评论 (0)编辑 收藏

java 常用设计模式(1)

     摘要: 设计模式;  一个程序员对设计模式的理解:  “不懂”为什么要把很简单的东西搞得那么复杂。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“...  阅读全文

posted @ 2013-08-06 10:22 顺其自然EVO 阅读(286) | 评论 (0)编辑 收藏

怎样配置Tomcat6.0的数据库连接池详解

 Tomcat自带数据库连接池,但是需要进行相应的配置才能使用Tomcat的数据库连接池。此文只针对Tomcat6.0进行配置。

  1.在自己的项目下的META-INF(注意:不是WEB-INF,我看网上很多人都弄错了)下面新建一个context.xml文件,文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>   //监听资源
<Resource
name="myoracle"                //给资源随便起一个名字,用于在程序中调用。
auth="Container"                                  //
type="javax.sql.DataSource"       //资源类型
driverClassName="oracle.jdbc.OracleDriver" //加载驱动,每种数据库的方式不同,自己参考资料。
url="jdbc:oracle:thin:@localhost:1521:ICSS" //连接字符串,相信大家不陌生。
username="jsp"            //访问数据库用户名
password="jsp"                          //访问数据库的密码
maxActive="200"                      //最大可以有200名用户连接数据源
maxIdle="10"                              //如果没有用户连接,空出10个连接等待用户连接
maxWait="5000"/> //如果已连接用户5000秒内没有再次连接数据源,则放弃此连接
</Context>

  2.如果不是用的myeclipse自带的tomcat,则要到那个tomcat下面conf\Catalina\localhost删除host-manager.xml和manager.xml。

  3.然后就在servlet里面调用了,调用方法:

  需要用到的引用:

import javax.sql.DataSource;
import javax.naming.InitialContext;
import java.sql.Connection;

InitialContext initCtx = new InitialContext();  //
//下面的” java:comp/env”是固定的,”myoracle”是在context.xml中指定的name。
DataSource ds = (DataSource)initCtx.lookup("java:comp/env/myoracle");
Connection conn = ds.getConnection();  //获取连接。


  附加:

  1.Sql server 的context.xml配置:

<Resource
name="名字"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="5000"
username="用户名"
password="密码"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=数据库名"
/

 2.oracle的context.xml配置:(已经在上面展示过了)

  3.mysql的context.xml配置:

<Resource name="名字" 
auth="Container" 
type="javax.sql.DataSource" //资源类型 
driverClassName="org.gjt.mm.mysql.Driver" 
url="jdbc:mysql://localhost/数据库名"  
username="用户名" 
password="密码" 
maxActive="100" //最大连结数 
maxIdle="30" //最大空闲时间,0为无限制 
maxWait="10000"/> //建立连接的的最大等待时间

  ---------------------以下已经实现过----------------------------------------

  以下是我工程中用到的一个实例(sql2005):

  context.xml内容:

<?xml version="1.0" encoding="GBK"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!--2000:driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"-->
<!--2000:url="jdbc:microsoft:sqlserver://192.168.0.15:1433;DatabaseName=XR-2000" -->
<!--2005:driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"-->
<!--2005:url="jdbc:sqlserver://localhost:1433;DatabaseName=XR-2000" -->
<Resource
name="jdbc/sql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=XR-2000"
username="sa"
password="123456"
maxActive="200"
maxIdle="50"
maxWait="-1"/>
</Context>

  调用:

Context ctx = null;
try {
ctx = new InitialContext();
} catch (NamingException e1) {
}

DataSource ds = null;
try {
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/sql");
} catch (NamingException e2) {
}

Connection conn = null;
try {
conn = ds.getConnection();
} catch (SQLException e3) {
}

Statement stmt = null;
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);//红色部分这样定义就可以使用rs.last()方法了
} catch (SQLException e) {
}



posted @ 2013-08-06 10:18 顺其自然EVO 阅读(255) | 评论 (0)编辑 收藏

软件测试实验学习笔记系列1

 Part 1 Management

  Softwareengeering = Technology + Management

  现代软件测试思想:全生命周期的测试思想.

  软件系统的规模的急剧增大--->国际协作模式,联合开发,

  软件测试管理:softwaretest 团队组织管理,软件测试计划管理,软件缺陷跟踪管理,软件测试资源管理。

  软件缺陷是软件与生具来的特征,是影响软件质量的重要和关键的因素之一,发现和排除缺陷是软件生命周期重要的工作之一。缺陷的密度是靠经验来估计的。

  缺陷管理工具:

  开源Bug追踪管理的工具:Bugzilla(Mozilla出品),BugOnline,Bugzero,Bugtracker,BugFree(借鉴微软的研发流程和Bug管理理念,PHP+MySQL)

  软件测试管理工具:TestManager,TestDirector,TestRunner(与Bugzilla集成的一款管理工具),TestLink—优秀的开源测试管理软件,可以和更多缺陷管理软件进行集成(Bugzilla,Mattis)。Sourceforge的开源项目之一

  TestLink应用环境:LAMP(Linux+Apache+MySQL+PHP)

  Part2 静态分析篇

  程序的静态分析是在不执行程序的情况下地其进行分析的技术,简称静态分析。静态分析的输入:程序源代码,目标代码。

  静态分析工具扫描测试程序的正文,对程序的数据流和控制流进行分析,然后给出分析报告。通常采用以下方法进行源程序的静态分析。

  1.生成各种引用表

  直接从表中查出说明/使用错误等,如循环层次表,变量交叉引用表,标号交叉引用表等。

  为用户提供辅助信息,如子程序(宏,函数)引用表,等价(变量)表,常熟表等。

  2.编程规范检查

  检查分析程序中违反编程标准的错误,如模块大小,模块结构,注释的约定,某些语句形式的使用,以及文档编制的约定等。

  3.静态错误分析

  静态错误分析主要用于确定源程序中是否存在某类错误或”危险”结构。

  类型和单位分析

  引用分析:使用最广泛的静态错误分析方法就是发现引用异常---异常探测工具

  表达式分析:对表达式进行分析,以发现并纠正表达式中出现的错误

  接口分析:接口的静态错误分析—检查过程及函数过程之间接口的一致性。检查形参和实参在类,数量,维度,顺序,使用上的一致性,全局变量和公共数据区在使用上的一致性

  4.静态特性的统计功能

  程序的统计信息,各种类型的语句出现的次数等等

  错误预测和程序复杂度计算

  静态分析工具可以保证代码的质量,发现并警告潜在的Bug。

  独立的静态分析工具C的lint,Smalltalk的lint

  程序理解工具

  程序理解是人们将程序及其环境---面向人的概念知识过程中,是软件开发过程中的重要的活动,软件的测试&维护,逆向工程--源代码理解。

  软件规模的增大--->通过计算机来完成软件系统分析和理解的程序辅助工具的需求变地越來越迫切。

  1.程序理解概述

  大型软件系统---分析和理解的困难性---系统维护和演化任务艰巨---成本高,

  1.1程序理解的概念

  程序理解就是从计算机程序中获取知识信息的过程,程序排错,程序增强,程序重用以及文档整理。程序理解的目标是从不同抽象层次,多视角,多方面综合表达并展示程序理解的结果。

  程序理解是软件工程领域的一个重要的部分。软件工程---如何提高软件开发效率和软件产品质量。程序理解在维护,逆向工程中起到举足轻重的地位。

  程序理解的目标:理解软件系统以使性能提高,纠错,再设计和使用另一种语言冲新编写。

  系统的概念建模,数据抽取,系统抽象---依赖于通过分析程序源代码来抽取程序和控制流信息。

  1.2程序理解的任务和内容

  任务:在不同抽象级别上建立基本程序的思维模型,从问题领域到程序设计领域的映射集。代码本身的模型,基本应用领域的模型。四个抽象层次:

  实现层:程序设计语言进行理解,检查程序结构,程序的AST,符号表或普通源文件。技术涉及程序扫描,语法提取,语义检查,静态分析,动态模拟运行等过程。

  结构层:在程序设计语言基础上,检查程序构造过程中的结构,对程序中出现的实体以及他们之间的关系的分析,数据调用,控制流程图,程序调用图。结构层包括:逆向工程信息提取,信息抽象,结构模型匹配...

  功能层:从不同的模块的功能来推断他们之间逻辑关系。功能层包括:设计恢复,语义和行为模式匹配

  领域层:检查特定于应用领域的概念,进一步从功能上推断此软件在其领域的作用,智能软件理解,格局设别,概念赋值和推理

  从抽象层从低(源代码)到高(领域问题).

  主要介绍结构层次的技术.

  程序理解的几个方面:结构信息,数据流,控制流,程序操作,面向对象的理解

  1.3程序理解的技术

  结构层的理解技术有语句分析,表示程序单元之间的调用关系和被调用关系,与程序内部结构相关的程序控制流图和数据流图.

  1.语句分析技术:程序的词法模式和语法模型

  2.程序流分析:数据流和控制流---首要任务发现控制结构,分析方法(必经点分析和区间分析)。数据流分析是为了计算被分析程序在生成数据方面的行为,通常用于程序优化。

  3.软件结构图:程序调用关系图(函数调用关系图)和系统结构图。程序调用关系图:对源程序中函数关系的一种静态描述;系统结构图反映的是系统中模块的调用关系和层次关系,谁调用谁,时序关系。

  1.4程序理解工具

  阅读源代码是程序理解的一项重要的活动。常见的程序开发工具:程序切分器,静态分析工具(有效工具,splint,Olink),动态分析工具。

  2Olink程序理解工具

  Olink是一个开源的C/C++工具,基础或核心部分。

  Olink的源码包:smbase(c++的包和字符串库,替代C++标准库中相应的库),ast(生成AST的工具包),elkhound(用于管理GLR语法分析器,和bison功能相似,可以用来反分析任何上下文无关语法),elsa(在elkhound语法分析的基础上,将C\C++程序生成为相应的AST,可以对程序进行部分类检查,主要是与),libregion(基于区域的c语言内存管理库),libqual(可序列化的多太的类型修饰符推理接口),platformmodel(C/C++标准库的静态模型)。

  书本上提供的网址Olink的网址是: http://www.cubewano.org/oink/downloads/2006-08-31/。然后打开后发现不知道导向了什么网站。

  看了一堆理论,听作者吹了老久,感觉这个Oink工具好牛逼的说,原本想实践一下了,结果却是这样的.很不高兴.

  下一篇是关于splint的,因为内容比较多,就不放在一起了

  参考文献:

  [1]软件测试实验指导教程/蔡建平, 清华大学出版社, 2009.11

相关文章:

软件测试实验学习笔记系列2 -- lint,splint的使用

posted @ 2013-08-05 10:23 顺其自然EVO 阅读(604) | 评论 (0)编辑 收藏

dynaTrace Ajax:前端性能分析利器

 随着 jQuery、Dojo、YUI 等框架的兴起让构建 Web2.0 应用更加容易,但随之带来的定位等应用问题也越来越难,尤其是与性能相关的。dynaTrace Ajax Edition 是一个强大的底层追踪、前端性能分析工具,该工具不仅能够记录浏览器的请求在网络中的传输时间、前端页面的渲染时间、DOM 方法执行时间以及 JavaScript 代码的解析和执行时间,还可以跟踪 JavaScript 从执行开始,经过本地的 XMLHttpRequest、发送网络请求、再到请求返回的全过程。

  dynaTrace Ajax 目前有两个版本,免费版和商业版,它们之间的区别可查看 版本比较,本文主要是针对免费版本的介绍。在 3.0 之前的版本只支持运行在 IE 浏览器下,包括 IE6、IE7、IE8, 在 3.0 Beta 版之后可同时支持在 IE 和 Firefox 浏览器上的性能跟踪。

  --------------------------------------------------------------------------------

  Trace A和使用

  下载 DynaTrace 最新的版本 , 双击安装文件,点击“下一步”便可完成安装,安装好的操作界面如图 1 所示:

  图 1. 安装好的操作界面

  点击中间齿轮状的图标可对工具的属性进行配置,如下图 2 所示:

  图 2.Preferences( 属性配置 )

  从上图的:

  “General ”面板:可设置服务端口,网络代理设置以及浏览器的启动路径等;

  “Agent ”面板:可设置获取参数的配置,例如可配置是否获取 DOM 的访问或方法参数和返回值等,默认会选择所有选项。

  可以通过两种方式启动 DTA 跟踪您的页面:

  直接通过工具启动,如图 1 所示,点击浏览器旁边的下拉按钮进入 “Manage Run Configurations” 或直接点击 “New Run Configuration” 添加所要跟踪的 URL。由于它可以运行在多页面的工作流之下,可以先输入起始网址,然后导航到其他网页,dynaTrace 会在后台监视一切。

  图 3.Manage Run Configurations( 管理运行配置 )

  从浏览器启动 dynaTrace: 先打开浏览器,进入需要跟踪的界面,再点击浏览器工具栏的按钮,如下图所示(使用前在浏览器插件中 Enable 该工具 ),Connected/not Connected 用以表示当前的追踪状态

  图 4. 浏览器启动

  在关闭浏览器之前,可以快速看一下 dynaTrace 软件界面,会看到在“Browsers ”下面有一个节点,那就是当前正在从浏览器中收集的信息。我们可以在运行浏览器的同时分析这些数据,也可以关闭浏览器,再从 Sessions 中分析捕获的信息。

  此外,在实际的操作过程当中,可能会需要跟踪打开页面后的一系列操作(例如点击某个按钮触发的事件等), 免费版的 dynaTrace 跟踪的信息不能按照 Page 或者 Action 自动进行分离,这种情况下,我们可以通过在操作过程中通过添加标记 (Insert Mark ) 的方式从 PurePath 视图中来区分每个 Action 行为的时间分割。即在操作前添加一个标记,操作完成后再添加一个标记,再从 PurePath 视图中分析所添加标记之间的比较耗时的请求。如下图 5 所示:

  图 5. 添加标记 (PurePath 视图 )

  此外,它还具有导入导出的的功能即将收集到的数据导出为 session 文件再导入到 DynaTrace 里面进行分析。具体操作可通过在 Cockpit 面板中 Sessions 文件夹下选择要导出的 Session,右键或者从工具条里的点击 Export Session 按钮即能完成导出操作,导入文件的操作与此类似。

背景知识

  在讨论 dynaTrace 工具之前,先简单了解一下在 Web2.0 下经常会碰到的一些客户端的性能问题,这些话题虽然不是本文的主题,但是和本文密切相关,因为您知道了大致存在的问题,再使用相应的工具去发现这些问题就会简单很多。

  在 Web2.0 应用程序中,JavaScript 的执行常常会阻碍浏览器端资源的下载和增加页面的 Loading 的时间,导致这个问题的因素主要有:

  浏览器本身的因素,例如在 IE 浏览器下 ,CSS Selectors 的查找速度相比其他浏览器如 Firefox 相对会慢很多

  CSS 对相同对象的查询次数太多

  存在太多 Ajax 的 XMLHttpRequest 请求

  JS、CSS、图片数量过多,增加了网络传输开销

  DOM 的尺寸太大,一方面会增加内存的占用,另一方也会影响页面的性能,例如 CSS 的查询操作

  丰富的 DOM 操作,例如创建新的 DOM 元素或是作为 HTML 形式添加新的元素等

  过多的事件处理绑定(Event Handler Bindings)等

  下面将结合实际工作中碰到的案例,介绍如何使用 dynaTrace 来跟踪和分析客户端的性能问题。

  --------------------------------------------------------------------------------

  应用案例分析

  下面记录的结果是以我们目前正开发的一个实际项目(IBM Docs)中的一个案例 - 在 Web 中打开一个 PPT 文档,根据 dynaTrace 收集的信息来分析存在的性能问题。

  Performance Report( 性能报告视图 )

  从 Cockpit 面板中打开 Performance Report 视图,如图 6 所示:

  图 6. 性能报告

  性能报告视图中记录了所有访问的网页的详细信息,从这个视图当中我们可以得到以下信息:

  载入页面所消耗的时间 :OnLoad Time[ms] 显示从页面开始载入到浏览器派发 onload 事件所经历的时间;Total Load Time[ms] 显示页面全部 load 完总共消耗的时间

  JavaScript 执行时间 :On Client[ms] 通过 JS API 或库执行的所有 JavaScript 函数所消耗的总时间

  网络请求花了多长时间: 从 Remark 中可看到总共有多少请求数,其中有多少 XHR 请求等信息

  服务器端所消耗时间: On Server[ms] 指客户端发出的所有请求在服务器过了多长时间开始响应所消耗的总时间

  从右下方的各个面板中可以得到总体的性能分析报告(更详细的信息可查看 Cockpit 面板中的相应节点),例如:

  NetWork 中可看出有多少资源是从浏览器缓存中读取的,有多少的 HTTP 转发请求消耗了不必要的网络传输时间;合并同一个 domain 中的 CSS、JS 的请求可节省多长网络传输时间。

  TimeLine 中显示了页面的生命周期:该图反映了页面进程中网络资源下载,JavaScript 执行,页面发生渲染,CPU 使用情况,以及发生了哪些事件,例如:Load 事件、XMLHttpRequest 等信息。

  在我的例子中,以下内容引起了我的注意:

  网络耗时较长,请求数目太多:总共有 896 网络请求,其中有 300+ 个 request 是对图片的请求,300+ 个是从 cache 中对相同图片的读取。

  JavaScript 执行时间总耗时 22 秒: 从右下方的 JavaScript/Ajax(A) 报告中可看出有一个 OnLoad 的事件就消耗了总共 13 秒 的时间,双击可从右边窗口看出它的前后调用栈信息。

  Server 端处理总共花了 20 秒 的时间 : 这说明 Server 端也可能存在性能问题,可推荐大家使用 Performance Inspector工具去分析 Server 端的性能问题,这里不再详述。

  Remark 栏还显示了页面总共发出了 23 个 XMLHttpRequest 请求: 这可以从时间轴的 event 行中找出发生的时间点。下一节将会针对这些问题进行更详细的讨论。

  Timeline( 时间轴视图) - 页面生命周期

  时间轴视图可以通过双击 Cockpit 面板中的 TimeLine 节点打开或者在 Performance Report 中通过在某个 URL 上点击右键,选择“DrillDown-TimeLine ”打开。根据 性能报告视图 打开耗时比较长的 URL 的 TimeLine, 通过工具栏或右键菜单,可以打开更多选项,比如内容类型和 JavaScript 触发器的颜色值,或者显示更多事件,比如鼠标移动、点击和键盘事件。打开本案例的时间轴视图,如图 7 所示:

  图 7. 时间轴

  在此视图下,我们可观测到:

  CPU 占用率可显示 JavaScript 的执行导致浏览器占用 CPU 的时间

  JavaScript 执行所占用的时间:从上图中观察到右边蓝色块的那一段耗时比较长,鼠标悬停在这段上可以看到是由于 load event on 触发的,耗时将近 13 秒 的时间

  浏览器 Rendering,悬停上去可发现大部分是由于在计算 layout 所需要的时间,一般在 IE 上面执行相对会比较明显

  网络请求并行下载耗时,一方面来自请求的数目太多,其中一个比较明显的就是有一个 XMLHttpRequest 花在 Server 的处理耗时将近 7 秒的时间

  Event 轴显示了鼠标点击事件,XMLHttpRequest 事件和 OnLoad 事件

  放大右边网络请求时间比较长的部分(在我的例子中,从 16s 到 29s 时间片 ), 通过在开始处点击鼠标左键拖拽到结束位置松开鼠标拖拽,视图将放大到下面截图中显示的时间片上,如下图 8 所示 :

  图 8. 放大时间轴

  通过放大的时间片右键选择“Drill Down to Timeframe e”进入 PurePath 视图,显示当前所放大的时间片上所有的活动。

 PurePath( 路径视图 ) - JavaScript、DOM 和 Ajax 问题的详细说明

  可以通过双击 Cockpit 面板中的 PurePath 节点打开也可以选中时间轴上的一段右键选择“Drill Down to Timeframe ”来到 PurePath 视图,进一步进入每个动作去观察哪些事件触发执行了 JavaScript 和哪些函数的执行耗时比较长。

  这里接着上节所述进入 PurePath 视图 , 如下图所示:

  图 9.PurePath 视图

  鼠标点击上图中的第二个时间片即 JS 占用 14 秒的,面板同时会更新当前所选活的信息,显示 JavaScript 代码执行过程,包括每个方法的执行时间和调用的参数及返回值。我们不仅可以看到 JavaScript 方法,也能看到 DOM 访问和 Ajax 请求。

  从详细信息栏我们可观察到

  Start : 一个活动的开始时间

  Duration[ms] : 活动的持续时间,包含子树的活动时间

  JS[ms] :JavaScript 执行总的耗时,包括异步的子树执行时间但不包括等待时间

  Total[ms] :活动本身从开始到结束的持续时间 , 不包含子活动的执行时间

  Exec[ms] :活动本身执行时间,不包括其子活动的需要的时间

  Size : 树中总的节点数,包含所有子活动的节点数。

  鼠标点击上面任何一列可进行排序操作,根据 JS 执行时间长短通过鼠标点击展开也可以通过右键点击“扩展子树”展开层次图找到是哪个方法的调用导致执行了这么长的时间。从上图调用栈中可看出 contentDomHandle 来自应用程序的 JavaScript API 的调用总耗时最长,从它的子树中可观察到 JavaScript 执行的时间分布:

  addContextMenu<div> 方法执行次数比较多,虽然方法本身的执行时间 150ms,但调用次数比较多的话就会导致总的执行时间比较长。

  SimulateSlideClick耗时2.5 秒

  concord.util.events.publish耗时3 秒

  为了更方便发现这些函数的性能问题,可以右键 contentDomHandle 方法,选择“Drill Down->Hot Spots ”进入 HotSpots 视图 。

  另外,PurePath 视图提供了多种分析方法,您可以通过直接键入您要查找的内容来筛选或查找您需要的数据项,也通过右键菜单或工具栏按钮添加过滤规则可以让软件只显示特定信息。

  HotSpot( 热点视图 ) - 哪些地方降低了性能

  综上所述,可以从 PurePath-->Drill Down 进入该视图,也可以从面板中直接打开 HotSpot 视图来分析浏览中访问过的所有 JavaScript、DOM 和页面渲染操作。

  接着上一节的 contentDomHandle () 方法调用为例,如下图所示:

  图 10.Hotspot 案例视图

  从上图中可以看到每个方法的调用次数,JS 的执行时间以及总的执行时间等信息:

  Back Traces 栏显示了由谁调用了这个函数,调用了几次,从上图可看到该方法被 Dojo 的 <return-closure> 调用了 2 次,而方法本身调用的执行时间很短只有 3ms(Exec[ms])

  Forward Traces 栏显示了这个方法又调用了哪些函数,Invocations 表示该方法总共被调用了几次;活动总耗时 12.7s(Total[ms]),Exec[ms] 表示方法本身执行所需要的时间,JS[ms] 总的 JavaScript 的执行时间。

  界面底部显示了在 Back Traces 树或 Forward Traces 树中选中的 JavaScript 的源码

  从我的例子中,就会很明显的发现如下性能问题:

  addContexMenu(<div>) 被调用了 30 次,JavaScript 执行消耗了将近 7 秒。根据了解这个方法的作用就是为每个 Slide 添加右键菜单,也就是说文件包含 30 页就会被调用 30 次,这样不仅会增加浏览器的执行时间,也会占用比较多的内存。

  对于其他两个比较耗时的方法,simulateSlideClick 和 events.publish 方法各调用了将近 3 秒和 2.5 秒的时间,调用次数也不多,这就需要扩展 Trace 去看是否存在性能问题或还有可以改进的地方;

  到这里我们基本可以找出从时间轴视图中耗时 13 秒的 JavaScript 具体是被哪些函数的调用占用了,也发现了一些比较明显的性能问题。再回到 HotSpot 总的页面看是否还有其他性能问题 ( 从 Cockpit 面板中双击 HotSpot 节点 ),如下图所示:

  图 11.HotSpot 视图

若使用的是免费版,通过配置环境变量来实现自动化。就是设置在浏览器启动时自动连接 dynaTrace,这样在 Selenium 的脚本开始执行启动浏览器时就会自动连接上 dynaTrace,让 dynaTrace 自动收集数据。对于自动添加 Mark 可在 Selenium 的脚本中插入如下代码:

void addMark(String marker) {
defaultSelenium.runScript("try
Unknown macro: { _dt_addMark('" + marker + "') }
catch(e) { }");
}

  --------------------------------------------------------------------------------

  结束语

  dynaTrace Ajax 是前端的软件开发工程师和性能分析师的非常有用且重要的工具。通过该工具的不断更新,功能的不断强大,所支持的浏览器的不断增加以及与持续集成工具相结合,这样就可以更容易、更早、更频繁地发现应用程序在不同浏览器上的性能问题。

  参考资料

  学习

  《dynaTrace Ajax 版使用指南》:参考如何使用 DynaTrace Ajax。
  《在 Web2.0 中的十大客户端性能问题》:分析在 WEB2.0 中导致客户端的十大性能问题和案例分析。
  《 How to include dynaTrace in your Selenium Tests 》:教您如何在 Selenium 测试中加入 dynaTrace,自动化收集数据。
  《 Automation with dynaTrace Ajax Edition 》 :自动化参数环境变量配置详解。
  dynaTrace 主页:查看 DynaTrace 的各类文档。
  《 Automation with dynaTrace Ajax Edition 》 :自动化参数环境变量配置详解。
  developerWorks Web development 专区:通过专门关于 Web 技术的文章和教程,扩展您在网站开发方面的技能。
  developerWorks Ajax 资源中心:这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何 Ajax 的新信息都能在这里找到。
  developerWorks Web 2.0 资源中心,这是有关 Web 2.0 相关信息的一站式中心,包括大量 Web 2.0 技术文章、教程、下载和相关技术资源。您还可以通过 Web 2.0 新手入门 栏目,迅速了解 Web 2.0 的相关概念。
  查看 HTML5 专题,了解更多和 HTML5 相关的知识和动向。

  关于作者

  谢菊,IBM 中国软件开发中心(CDL)Lotus 部门的软件性能分析工程师,具有多个产品的性能测试经验,如IBM Portal Accelerator 和IBM Docs。目前正在从事IBM Docs 产品服务器端以及客户端的性能测试。

posted @ 2013-08-05 10:21 顺其自然EVO 阅读(372) | 评论 (0)编辑 收藏

数据库日志无法归档,超出了恢复文件数的限制解决方案

 SQL> connsys/***@orclas sysdba

  ERROR:

  ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

  SQL> connsys/***@orclas sysdba

  已连接。

  SQL> grant create table to scott;

  grant create table to scott

  *

  第 1 行出现错误:

  ORA-01109: 数据库未打开

  SQL> startup

  ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它

  SQL> shutdown immediate

  ORA-01109: 数据库未打开

  已经卸载数据库。

  ORACLE 例程已经关闭。

  SQL> startup

  ORACLE 例程已经启动。

Total System Global Area  373293056 bytes
Fixed Size                  1249056 bytes
Variable Size              88080608 bytes
Database Buffers          276824064 bytes
Redo Buffers                7139328 bytes

  数据库装载完毕。

  ORA-16038: 日志 3 序列号 36 无法归档

  ORA-19809: 超出了恢复文件数的限制

  ORA-00312: 联机日志 3 线程 1: 'E:\DEV\DATABASE\ORACLE\ORADATA\ORCL\REDO03.LOG' //判断问题为闪回区设置得太小,日志无法归档

  SQL> select reason,object_type,suggested_action from dba_outstanding_alerts; //因为无法打开数据库所以无法查询闪回区域使用情况

  select reason,object_type,suggested_action from dba_outstanding_alerts

  *

  第 1 行出现错误:

  ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

  SQL> select status from V$instance; //查到当前数据库处于mounted状态 无法open

STATUS
------------------------
MOUNTED
SQL> alter system set log_archive_dest = 'E:\Dev\Database\Oracle\oradata\flashba
ck';
alter system set log_archive_dest = 'E:\Dev\Database\Oracle\oradata\flashback'
*

  第 1 行出现错误:

  ORA-02097: 无法修改参数, 因为指定的值无效

  ORA-16018: 无法将 LOG_ARCHIVE_DEST 与 LOG_ARCHIVE_DEST_n 或

  DB_RECOVERY_FILE_DEST 一起使用

  SQL> alter database clear unarchived logfile 'E:\DEV\DATABASE\ORACLE\ORADATA\ORC //清空损坏(无法归档)的日志文件

  L\REDO03.LOG';

  数据库已更改。

  SQL> alter database open; //成功启动数据库

  数据库已更改。

  SQL> ALTER SYSTEM SET db_recovery_file_dest_size=1g scope=both; //成功修改闪回区(归档日志的地方)的大小 解决问题

  系统已更改。

  SQL>

posted @ 2013-08-05 10:17 顺其自然EVO 阅读(437) | 评论 (0)编辑 收藏

操作系统(一)概论

 1、在OS中有以下重要概念:

  内存管理机制、进程线程调度、信号、内核对象、系统调用、协议栈的实现等,以及理解如何寻址内存、

  如何管理虚拟存储、如何实现中断等,深刻理解和掌握这些是很重要的。

  2、操作系统层是最靠近硬件的软件层,负责管理和控制计算机硬件并对其作首次扩充和改造,主要做好资源的调度和分配、信息的存取与保护、并发活动的协调与控制工作,把上层的支撑软件和应用软件与计算机硬件隔离开来,为其运行提供良好的基础和强有力的支撑。

  3、OS有权分配资源,而其他程序只能使用资源。OS实现资源管理机制,运行应用程序提供资源管理策略。

  4、OS的资源管理技术:资源管理、资源虚化、资源抽象、组合使用抽象和虚化技术。

  5、OS中的基础抽象:进程、虚存、文件。

  计算机系统的物理资源分为两大类:计算类、存储及接口类。

  (1)进程抽象——进程是对于进入贮存的当前运行程序在处理器上操作的状态集的一个抽象,他是并发和并行操作的基础。每个进程都是一个自治执行单元,执行时需要使用计算机资源,至少需要处理器(包括程序计数器、通用寄存器、堆栈指针寄存器和其他寄存器)和主存。

  (2)虚拟抽象——物理主存被抽象成虚拟主存,给每个进程造成一种假象,认为它正在独占和使用整个主存。

  进程可以获得一个偌大的来内需地址空间,其中存放着可执行程序和数据,可以使用虚拟地址来引用物理主存单元。而虚拟存储器是通过结合对主存和磁盘的管理来实现的。

  (3)文件抽象——文件是磁盘等设备的抽象,通过将文件中的字节映射到存储设备的物理块中来实现文件抽象。程序员通过创建打开读写和关闭操作类控制文件,而磁盘的所有I/O操作细节都对用户隐藏起来。

  OS有两项基本任务:防止硬件资源被失控的应用程序滥用;屏蔽复杂的硬件操作细节。

  以上三种抽象存在一种包含关系,文件是对设备的抽象,虚寸是对主存和设备的抽象,进程是对处理器、主存和设备的抽象。

  而进程是相对独立的自治单元,进程之间仅能通过内核锁提供的有限数目的原语或系统调用进行交互。

  每一个应用程序运行在自己的虚拟机上,在一台虚拟机上运行的程序称为“进程”。

  6、虚拟计算机——虚拟机是有操作系统通过共享硬件资源的方式来实现的,它定义进程运行的逻辑计算环境。

  (1)虚处理器没有中断。

  (2)每个进程都有自己的虚处理器,用以实现多进程的并发执行。

  (3)OS禁止某些特权指令在虚处理器上执行。

  进程通过使用系统调用可以做到:创建新进程(虚拟机),与其他进程(虚拟机)进行通信,申请资源,操作文件,执行I/O操作等。

  7、OS的作用:作为用户接口和服务提供者。

  作为扩展机和虚拟机。

  作为资源的管理者和控制者。

 8、处理器管理:对处理器的管理最终归结为对进程和线程的管理和调度,包括:

  进程控制和管理、进程同步和互斥、进程通信、进程死锁、线程控制和管理、处理器调度(又分为高中低级调度)

  9、存储器管理功能:主存分配、地址转换与存储保护、主存共享、存储扩充。

  10、设备管理功能:通过设备中断处理、提供缓冲区管理、提供设备独立性实现逻辑设备到物理设备之间的映射、设备的分配和回收、实现共享型设备的驱动调度、实现虚拟设备。

  11、文件管理任务:提供文件的逻辑组织和物理组织方法、提供文件的存取和使用方法、实现文件的目录管理、实现文件的共享和安全控制、实现文件的存储空间管理。

  12、OS的主要特性

  (1)并发性——是指两个或两个以上的活动或事件在同一时间间隔内发生。当一个程序正在等待执行I/O操作时,就要求它让出CPU,调度另一个程序占有CPU运行。

  并行活动一定是并发的,反之并发活动文未必是并行的,并行性是并发性的特例,而并发性是并行性的扩展。

  (2)共享性——指计算机系统中的资源可以被多个并发执行的程序共同使用,而不是被某个程序独占。

  主要有三方面:

  透明资源共享:必须妥善处理资源隔离和授权访问。存储器隔离机制允许两个应用程序同时加载到主存的不同区域,但是任何虚拟机都不能访问其他虚拟机的主存块;处理器隔离机制强制虚拟机串行地共享物理处理器。

  显式资源共享:一个程序在使用某种资源时,其他欲访问此资源的程序必须等待,仅当占有者访问完毕并释放资源后,才允许资源呗再次分配。

  异步性:又称随机性,并发程序是以异步方式运行的。OS必须保证只要运行环境相同,多次运行同一程序,都会获得完全相同的计算结果。

  13、程序接口与系统调用

  (1)系统调用:内核提供一系列具备预定功能的内核函数,通过一组称为系统调用的接口呈现给用户。内核的主体是系统调用的集合,可以将内核看成特殊的公共子程序。

  程序的运行空间分为内核空间和用户空间。应用程序不能直接访问内核数据,也无法直接调用内核函数,它们只能在用户空间操纵用户数据,调用用户空间函数。系统调用是一种中介角色把用户和硬件隔离开来,应用程序只有通过系统调用才能请求系统服务并使用系统资源。

  (2)API、库函数和系统调用:一个库函数(封装函数)就是一种API,它介于应用程序和操作系统之间。API是一个函数定义,说明如何获得给定的服务。Windows操作系统不会公开系统调用,仅提供以库函数形式定义的API,称为Win32 API。库函数属于应用程序,在用户态运行,系统调用属于系统程序,在核心态运行。

  (系统调用的实现要点)一是编写系统调用服务函数,二是设计系统调用的入口地址表,三是陷阱处理机制。

  14、内核——是一组程序模块,通常驻留在内核空间,运行与核心态,具有访问硬件设备和所有主存空间的权限,

  是仅有的能够执行特权指令的程序。内核可以控制所有进程。

  (1)内核的功能:资源抽象、资源分配、资源共享。

  (2)属性:内核是由中断驱动的,是不可抢占的,内核部分程序在屏蔽中断状态下执行,内核可使用特权指令。

  15、进程线程——进程是系统进行保护和资源分配的单位,线程则是进程中的一条执行路径,允许每个进程中有多个    线程,而线程是系统调度的独立单位。

  16、管程——是管理共享资源的一种同步机制,对管程的调用表示对共享资源的请求与释放,管程可被多个进程或管程嵌套调用,但是它们只能互斥地访问管程。

  17、类程——用于管理私有资源,可以看成是子程序概念的一种扩充。

  18、实时OS——由4部分组成:数据采集、加工处理、操作控制、反馈处理。三种典型:过程控制系统、信息查询系统、事务处理系统。

相关文章:

操作系统(二)处理器管理


posted @ 2013-08-05 10:15 顺其自然EVO 阅读(150) | 评论 (0)编辑 收藏

Android:单元测试Junit的配置

 在实际开发中,开发android软件的过程需要不断地进行测试。而使用Junit测试框架,侧是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性..........

  第一步:首先在AndroidManifest.xml中加入下面代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=http://schemas.android.com/apk/res/android
package="hb.learn.junit"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">

<!-- 在本应用中导入需要使用的包,放在application里面activity外面 -->
<uses-library android:name="android.test.runner" />

<activity android:name=".JunitTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>

<!-- 记住这个一要放在application外面,不然会出现配置错误 信息 -->
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="hb.learn.junit" android:label="Tests for My App" />
</manifest>

  上面targetPackage指定的包要和应用的package相同。就是这个测试类所在的包名;

  第二步:编写单元测试代码(选择要测试的方法,右键点击“Run As”--“Android Junit Test” ):

import android.test.AndroidTestCase;
import android.util.Log;
public class XMLTest extends AndroidTestCase {
public void testSomething() throws Throwable {
Assert.assertTrue(1 + 1 == 3);
}
}


 在实际开发中,开发android软件的过程需要不断地进行测试。而使用Junit测试框架,侧是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性..........

  第一步:首先在AndroidManifest.xml中加入下面代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=http://schemas.android.com/apk/res/android
package="hb.learn.junit"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">

<!-- 在本应用中导入需要使用的包,放在application里面activity外面 -->
<uses-library android:name="android.test.runner" />

<activity android:name=".JunitTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>

<!-- 记住这个一要放在application外面,不然会出现配置错误 信息 -->
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="hb.learn.junit" android:label="Tests for My App" />
</manifest>

  上面targetPackage指定的包要和应用的package相同。就是这个测试类所在的包名;

  第二步:编写单元测试代码(选择要测试的方法,右键点击“Run As”--“Android Junit Test” ):

import android.test.AndroidTestCase;
import android.util.Log;
public class XMLTest extends AndroidTestCase {
public void testSomething() throws Throwable {
Assert.assertTrue(1 + 1 == 3);
}
}

posted @ 2013-08-02 11:46 顺其自然EVO 阅读(240) | 评论 (0)编辑 收藏

网络测试工具netperf

 Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。

  Netperf工具以client/server方式工作server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。

  一、安装

  下载( http://www.netperf.org)获取netperf-2.5.0.tar.bz2源码包;

  安装

[root@RedHat netperf-2.5.0]# tar -jxvf netperf-2.5.0.tar.bz2
[root@RedHat netperf-2.5.0]# make
[root@RedHat netperf-2.5.0]#make install

  二、使用方法

  首先在服务器运行

  [root@RedHat netperf-2.5.0]# netserver

  在客户端运行

  [root@RedHat netperf-2.5.0]#netperf-H host -l testlen -t testname

  netperf的命令行参数:

  -H host :指定远端运行netserver的server IP地址。

  -l testlen:指定测试的时间长度(秒)

  -t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR

  三、网络性能介绍

  1. TCP网络性能

  由于TCP协议能够提供端到端的可靠传输,因此被大量的网络应用程序使用。但是,可靠性的建立是要付出代价的。TCP协议保证可靠性的措施,如建立并维护连接、控制数据有序的传递等都会消耗一定的网络带宽。

  Netperf可以模拟三种不同的TCP流量模式:

  1) 单个TCP连接,批量(bulk)传输大量数据。

  2) 单个TCP连接,client请求/server应答的交易(transaction)方式。

  3) 多个TCP连接,每个连接中一对请求/应答的交易方式。

  2. UDP网络性能

  UDP没有建立连接的负担,但是UDP不能保证传输的可靠性,所以使用UDP的应用程序需要自行跟踪每个发出的分组,并重发丢失的分组Netperf可以模拟两种UDP的流量模式:

  1) 从client到server的单向批量传输。

  2) 请求/应答的交易方式。

  由于UDP传输的不可靠性,在使用netperf时要确保发送的缓冲区大小不大于接收缓冲区大小,否则数据会丢失,netperf将给出错误的结果。因此,对于接收到分组的统计不一定准确,需要结合发送分组的统计综合得出结论。

 四、测试案例

  服务器端执行

[root@RedHat netperf-2.5.0]# netserver

  在客户端运行

[root@RedHat netperf-2.5.0]# netperf -H 192.168.56.102 -l 60
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.56.102 (192.168.56.102) port 0 AF_INET
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec
87380  16384  16384    60.01     248.26
[root@RedHat netperf-2.5.0]#

  从netperf的结果输出中,我们可以知道以下的一些信息:

  1) 远端系统(即server)使用大小为87380字节的socket接收缓冲;

  2) 本地系统(即client)使用大小为16384字节的socket发送缓冲;

  3) 向远端系统发送的测试分组大小为16384字节;

  4) 测试经历的时间为60秒。

  5) 吞吐量的测试结果为248.26*10^6bits/秒。

  在缺省情况下,netperf向发送的测试分组大小设置为本地系统所使用的socket发送缓冲大小。

  TCP_STREAM方式下与测试相关的局部参数如下表所示:

  -s size:设置本地系统的socket发送与接收缓冲大小;

  -S size:设置远端系统的socket发送与接收缓冲大小;

  -m size:设置本地系统发送测试分组的大小;

  -M size:设置远端系统接收测试分组的大小;

  -D:对本地与远端系统的socket设置TCP_NODELAY选项I/O测试。

  其它的网络性能测试工具,如dbs, iperf, pathrate, nettest, netlogger, tcptrace, ntop等。

posted @ 2013-08-02 11:45 顺其自然EVO 阅读(275) | 评论 (0)编辑 收藏

Java邮件开发-----javaMail

  前面介绍了电子邮件系统的基本知识,那篇博客知识对基础理论知识做一些简要介绍,并不妨碍我们做邮件开发。现在开始Java邮件开发。

  一、JavaMail简介

  JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。JavaMail API是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如:SMTP、POP3、IMAP。开发人员使用JavaMail API编写邮件处理软件时,无须考虑邮件协议底层的实现细节,只要调用JavaMail开发包中相应的API类就可以了。

  二、JavaMail开发环境

  在进行JavaMail开发之前必须要导入相应的jar包。该jar包可以到oracle的官网上面下载:http://www.oracle.com/technetwork/java/javamail/index.html。

  下载完成后解压可以得到如下一个目录:

  其中mail.jar:就是开发javamail程序所必须要用到的核心开发包。

  demo子目录:示例程序。

  demo子目录:示例程序。

  lib子目录:该目录下包含5个独立的邮件开发包:smtp.jar、pop3.jar、imap.jar和mailapi.jar,这5个jar文件是对mail.jar文件的分类包装。其中mailapi.jar封装了创建邮件内容和面向普通开发人员调用邮件发送和接收的API类,其它三个jar文件则是封装了它们名称相对应协议的服务实现程序。。在编译Java邮件程序时,只需要mailapi.jar文件即可,但是,在运行时必须要有相应邮件协议的底层服务实现程序。如果应用程序中只需要使用到邮件发送功能,则可以只安装smtp.jar和mailapi.jar这两个文件,如果应用程序只需要使用邮件的接收功能,则可以只安装pop3.jar或imap.jar和mailapi.jar这两个jar文件,而不用安装整个mail.jar文件。

  Lib目录如下:

  三、JavaMail API的介绍

  JavaMail API按其功能划分通常分为如下三大类“:

  1、创建和解析邮件内容的API。Message类是创建和解析邮件的核心API。它的实例对象代表了一封电子邮件。

  2、发送邮件的API。Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,如SMTP协议。

  3、接收邮件的API。Store类是接收邮件的核心API类,它的实例对象代表了实现某个邮件接收协议的邮件接收对象,例如POP3协议。

  JavaMail的工作流程如下:

  在这个工作流程中,Message、Session、Transport、Store四个对象紧密相连的完成一封电子邮件的发送和接收。我们只需要了解这个四个核心API的功能和作用,知道他们的工作关系和电子邮件的工作流程,就能够很容易的编写出JavaMail来了。对于JavaMail的辅助类而言,当我们需要他们的时候可以顺藤摸瓜,查看文档来解决。 核心API的介绍:

  Message

  Message 类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。在客户端发送邮件时,先穿件邮件的API,将创建的邮件的数据封装到Message对象中,然后把这个对象传递给邮件发送API发送出去。在客户端接收到邮件时,邮件接收API把接收的油价数据装在Message的实例对象中,客户端在使用邮件解析API从这个对象中解析出来接收到的邮件数据。

  Session

  Session 类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些会话信息构建邮件收发的Store和Transport对象,以及为客户端创建Message对象提供信息支持。

  Transport

  Transport 类是发送邮件的核心API类,它的实例对象,代表实现了某个邮件发送协议的邮件发送对象,例如SMTP 协议。客户端程序创建好Message对象后,只需要使用邮件发送API得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调用它的发送方法,就可以把邮件发送给指定的SMTP服务器。

  Store

  Store 类是接收邮件的核心API类,它的实例对象代表实现某个邮件接收协议的邮件接收对象,例如POP3和IMAP协议。客户端程序接收邮件时,只需要使用邮件接收API得到Store对象,然后调用Store对象的接收方法,就可以从指定的 POP3服务器中获得邮件数据,并把这些邮件数据封装到表示邮件的Message对象中。

  四、实例

public class JavaMail_01 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");

Session session = Session.getInstance(props);
session.setDebug(true);

Message msg = new MimeMessage(session);
msg.setSubject("这是一个测试程序....");
msg.setText("你好!这是我的第一个javamail程序---陈明");
msg.setFrom(new InternetAddress(******@163.com));

Transport transport = session.getTransport();
transport.connect("smtp.163.com", 25, "*******", "********");
transport.sendMessage(msg,new Address[]{new InternetAddress(chenssy995812509@sina.cn)});

System.out.println("邮件发送成功...");
transport.close();
}
}

posted @ 2013-08-02 11:44 顺其自然EVO 阅读(255) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 220 221 222 223 224 225 226 227 228 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜