posts - 40,  comments - 11,  trackbacks - 0
     摘要: MVC和Command模式的一个结合,用于完成小型的Web控制  阅读全文
posted @ 2008-01-09 17:30 Paul Lin 阅读(937) | 评论 (3)编辑 收藏
     摘要: CSDN原博客部分文章的链接地址  阅读全文
posted @ 2008-01-02 22:43 Paul Lin 阅读(57) | 评论 (0)编辑 收藏

【1】pfile:初始化参数文件

包含了init.ora文件,该文件定义了几个非常重要的参数:

·db_domain:数据库域名
·db_name:数据库名
·control_files:控制文件的路径,通常有3个文件
·shared_pool_size=共享池的大小
·background_dump_dest=后台进程日志、跟踪文件路径
·core_dump_dest=操作系统崩溃的日志、跟踪文件路径
·user_dump_dest=用户进程的跟踪文件路径

【2】budmp:存放由后台进程所生成的数据库Alert日志文件和跟踪文件

典型的包含了一个.log文件和一个.trc文件。

打开.log文件我们可以看到里面有很多后台进程的启动及运行信息,其中最关键的就是加载init.ora文件和起点后台进程的日志了


Starting up ORACLE RDBMS Version: 9.2.0.1.0.
System parameters with non-default values:
  processes                = 150
  timed_statistics         = TRUE
  shared_pool_size         = 50331648
  large_pool_size          = 8388608
  java_pool_size           = 33554432
  control_files            = C:\oracle\oradata\paullin\control01.ctl, C:\oracle\oradata\paullin\control02.ctl, C:\oracle\oradata\paullin\control03.ctl
  db_block_size            = 8192
  db_cache_size            = 25165824
  compatible               = 9.2.0.0.0
  db_file_multiblock_read_count= 16
  fast_start_mttr_target   = 300
  undo_management          = AUTO
  undo_tablespace          = UNDOTBS1
  undo_retention           = 10800
  remote_login_passwordfile= EXCLUSIVE
  db_domain                =
  instance_name            = paullin
  dispatchers              = (PROTOCOL=TCP)
  job_queue_processes      = 10
  hash_join_enabled        = TRUE
  background_dump_dest     = C:\oracle\admin\paullin\bdump
  user_dump_dest           = C:\oracle\admin\paullin\udump
  core_dump_dest           = C:\oracle\admin\paullin\cdump
  sort_area_size           = 524288
  db_name                  = paullin
  open_cursors             = 300
  star_transformation_enabled= FALSE
  query_rewrite_enabled    = FALSE
  pga_aggregate_target     = 25165824
  aq_tm_processes          = 1
PMON started with pid=2
DBW0 started with pid=3
LGWR started with pid=4
CKPT started with pid=5
SMON started with pid=6
RECO started with pid=7
CJQ0 started with pid=8
QMN0 started with pid=9

而.trc文件里面则保存了当前会话的ID


【3】cdump:存放发生崩溃的操作系统的系统进程信息

【4】create:存储创建数据库的SQL脚本

【5】udmp:存储用户进程所生成的跟踪文件
posted @ 2008-05-04 17:41 Paul Lin 阅读(25) | 评论 (0)编辑 收藏

1.关于单元测试:

单元测试中的Test Case在设计时,有两点要注意的:

a. 测试的方法最好短小精悍,每个test case只测试一个关注的功能,假如一个方法的处理逻辑里面包含了对几种可能情况的处理,那么测试案例最好分成几个来测试,举例如下
  
   方法: public void convertStringToDate(String string)
 
   在实际应用过程中,传入参数string的值可能有下面几种情况:
  
   1). Null
   2). 空格
   3). 非空但格式错误
   4). 非空且格式正确,但值错误(如:2008-02-31 23:59:59)
   5). 非空且格式、值均正确

   那么如果我们在同一个测试方法中: public void testConvertStringToDate()测试所有的可能情况,会有下面两个问题:

   1). 代码量增多
   2). 不利于修改,假如由于业务方法中某个处理逻辑改变了,此时重新测试时必须测试所有其它的方法
   3). 可能造成测试案例的顺序依赖,比如其中某个方法会抛出异常,之后的测试案例可能不会被执行到

如果我们按照上面可能出现的情况来分的话,那么就有五个测试案例,从数量上看是多了,但是后果就是每个方法都非常短小(不超过6行),简单明了,一目了然,即便测试案   例错了,我也能马上看出来。其次一个测试案例的修改不会影响到其它的测试案例。

b.测试方法是否抛出异常,可以参考下面的代码结构:
 
  try{
      调用被测试代码 // 此处的代码必须是明确会抛出异常的,因为这是我们要测试的目的
      fail("Error: Must throw an exception here.");
  } catch(Exception e){
      assertTrue(true);
  }


2.关于使用DateFormat及其子类进行字符串和日期转换的注意点:

使用DateFormat将字符串转换成Date对象时,必须注意在转换前,先调用:setLinient(false);否则的话即使实际的日期数值有问题,例如2008-04-32 23:59:59,只要格式正确,也能够被转换成功,但这在实际的应用中是没有意义的。

posted @ 2008-04-28 00:37 Paul Lin 阅读(30) | 评论 (0)编辑 收藏
     摘要: 最近在使用Oracle9i数据库进行数据插入、查询、导入/出,有时会出现乱码的情况,具体的情形有以下两种:

1.首次插入/显示乱码

2.首次插入/显示正常、但把数据用工具导出为本地文件(例如TXT)文件,再在另一个客户端中打开该文件并执行时
再次插入的数据显示为乱码。

遂在本地创建两个数据库,一个为AL32UTF8字符集,一个为ZHS16GBK字符集,配合客户端NLS_LANG的不同设置,测
试乱码的情况及进行原因分析。

希望本文能够对仍处于Oracle字符集泥潭的同仁一点帮助  阅读全文
posted @ 2008-04-23 14:59 Paul Lin 阅读(684) | 评论 (0)编辑 收藏
<project name="autobuildtest" default="test">    
    
<target name="setProperties">

        
<property name="src.dir" value="src"/>
        
<property name="classes.dir" value="classes"/>
       
</target>
    
    
<target name="prepareDir" depends="setProperties">
        
<delete dir="${classes.dir}"/>
        
<mkdir dir="${classes.dir}"/>
    
</target>
    
    
    
<target name="compile" depends="prepareDir">
        
<javac srcdir="./src" destdir="${classes.dir}"/>     
    
</target>

    
    
<target name="test" depends="compile">
        
<junit printsummary="yes">
            
<test name="onlyfun.caterpillar.test.MathToolTest"/>
          
<classpath>
              <pathelement location="${classes.dir}"/>
          </classpath>
        
</junit>
    
</target> 
</project>
 

上面XML文件高亮处描述了Ant如何与JUnit结合进行自动化测试,name属性是你要测试的TestCase,classpath元素指明了TestCase的路径,printsummary说明了要将测试的结果简单的显示出来。

如何吧JUnit测试的详细信息显示出来呢?我们可以采用<formatter>元素,如下所示:

<junit printsummary="yes">

    
<formatter type="plain" usefile="false"/>

    
<test name="onlyfun.caterpillar.test.MathToolTest"/>
      
<classpath>
        
<pathelement location="${classes.dir}"/>
      
</classpath>         
</junit>

当usefile属性设定为true时,会自动帮您将产生的结果储存在档案中,预设是TEST-*.txt,其中*是您的测试案例类别名称。除此之外,我们也可用采用XML的格式来保存测试结果。如下所示:

<formatter type="xml"/>

也可以将测试结果所产生的XML文件转换为HTML文件,使用Ant可以直接帮您完成这个工作,<junitreport>标签使用 XSLT将XML文件转换为HTML文件

<project name="autobuildtest" default="report">

    
<target name="setProperties">
        
<property name="src.dir" value="src"/>
        
<property name="classes.dir" value="classes"/>
        
<property name="report.dir" value="report"/>    
    
</target>
    
    
<target name="prepareDir" depends="setProperties">
        
<delete dir="${report.dir}"/>
        
<delete dir="${classes.dir}"/>
        
<mkdir dir="${report.dir}"/>
        
<mkdir dir="${classes.dir}"/>
    
</target>

    
<target name="compile" depends="prepareDir">
        
<javac srcdir="./src" destdir="${classes.dir}"/>
    
</target>
    
    
<target name="test" depends="compile">
        
<junit printsummary="yes">
            
<formatter type="xml"/>
            
<test name="onlyfun.caterpillar.test.MathToolTest"
                    todir="${report.dir}"
/>
            
<classpath>
                
<pathelement location="${classes.dir}"/>
            
</classpath>
        
</junit>
    
</target>

    
<target name="report" depends="test">
        
<junitreport todir="${report.dir}">
        
<fileset dir="${report.dir}">
            
<include name="TEST-*.xml"/>
        
</fileset>
        
<report format="frames" todir="${report.dir}/html"/>
    </junitreport>
    
</target> 
</project>

上面的例子,首先定义了一个property,用于指向保存测试结果的目录,接着在<test>元素中通过<todir>将结果指向该目录。然后report目标首先在todir属性指定的目录下查找名称包含:TESTd的XML文件,找到之后通过XSL转换成带frame的HTML页面,存放到子目录html下面

最终的结果可能如下:


posted @ 2008-04-21 15:21 Paul Lin 阅读(32) | 评论 (0)编辑 收藏

【1】path和location属性的区别:
 
<classpath>
    <pathelement path="${classpath}"/>
     <pathelement location="lib/helper.jar"/>
</classpath>
 
原文:The location attribute specifies a single file or directory relative to the project's base directory (or an absolute filename), while the path attribute accepts colon- or semicolon-separated lists of locations. The path attribute is intended to be used with predefined paths - in any other case, multiple
elements with location attributes should be preferred.
 
从中我们可以看出path可以用于指向存在多个文件的位置,而location只能指向单个的文件或目录。另外path可以被设定id,供其它的path或classpath引用。如:<path id="main-classpath">,而classpath则没有

【2】综合示例:
In addition, DirSets, FileSets, and FileLists can be specified via nested <dirset>, <fileset>, and <filelist> elements, respectively. Note: The order in which the files building up a FileSet are added to the path-like structure is not defined.
 
    <classpath>
      <pathelement path="${classpath}"/方式① :引用特定的变量

      <fileset dir="lib"方式② :指向特定的文件集
        <include name="**/*.jar"/>
      </fileset>

      <pathelement location="classes"/方式③:指向单个目录

      <dirset dir="${build.dir}"方式④:指向特定目录集
        <include name="apps/**/classes"/>
        <exclude name="apps/**/*Test*"/>
      </dirset>

      <filelist refid="third-party_jars"/> 方式⑤:引用指定文件列表
    </classpath>
 
This builds a path that holds the value of ${classpath}, followed by all jar files in the lib directory, the classes directory, all directories named classes under the apps subdirectory of ${build.dir}, except those that have the text Test in their name, and the files specified in the referenced FileList.

posted @ 2008-04-21 14:28 Paul Lin 阅读(695) | 评论 (0)编辑 收藏
     摘要: Visitor模式的一个优点体现在对集合元素的访问中:由于集合中的可访问元素都实现了Visitable接口,所以在迭代集合的过程中,我们可以将每个元素都看成是接口类型。

其次由于JAVA语言的多态性,虽然每个元素都是接口类型(Visitable),但每个元素的实现类不同,所以在调用accept方法时,虚拟机“知道”应该调起那个正确的方法(例如:集合中的一个String元素,会调用StringElement的accept方法)  阅读全文
posted @ 2008-04-15 17:38 Paul Lin 阅读(817) | 评论 (0)编辑 收藏
     摘要: 策略操作定义了策略的输入和输出,而把策略的实现工作留给了各个类。这些类以不同的方案来实现同一操作,它们为用户提供统一的接口,因而这些类可以相互替换。

Strategy模式允许多种策略共存,而代码不会混乱。策略模式也可以实现模式选择逻辑和策略本身相分离。

Strategy模式的意图在于把可选的策略或方案封装在不同的类中,并在这些类中实现一个共同的操作。  阅读全文
posted @ 2008-04-08 11:52 Paul Lin 阅读(819) | 评论 (1)编辑 收藏
     摘要: 使用状态模式后,客户端外界可以直接使用事件Event实现,根本不必关心该事件导致如何状态变化,这些是由状态机等内部实现。这是一种Event-condition-State,状态模式封装了condition-State部分。

每个状态形成一个子类,每个状态只关心它的下一个可能状态,从而无形中形成了状态转换的规则。如果新的状态加入,只涉及它的前一个状态修改和定义。  阅读全文
posted @ 2008-04-07 18:02 Paul Lin 阅读(833) | 评论 (0)编辑 收藏
     摘要: 让方法运行最常见的方式是调用之,但是在很多情况下,我们不能控制和提供方法执行的上下文和时机。这种情况下,可以把方法封装在对象中。通过在对象中存储调用方法所需的信息,就可以让客户端或者服务决定何时调用这个方法。

Command模式的意图是把请求封装在对象中。

--摘自《Java设计模式》第24章:Command(命令)模式
  阅读全文
posted @ 2008-04-07 15:13 Paul Lin 阅读(810) | 评论 (0)编辑 收藏
摘自中国通信网之《通信基础学习之3G无线基本知识》

 



·WLAN提供了高带宽,但却是在有限的覆盖区域内(建筑物内以及户外的短距离)。

·3G网络支持跨广域网络的移动性,但是数据吞吐速度明显低于WLAN。

·3G网络是建立在蜂窝架构上的,最适于支持移动环境中的数据服务。蜂窝架构支持不同蜂窝之间的信号切换,从而向用户提供了全网络覆盖的移动性,这种移动性常常通过不同
   网络运营商之间的漫游协议进行扩展。当然,可供移动用户使用的带宽是有限的。
·WLAN无线局域网提供了大量的带宽,但是它覆盖区域有限(室内最多100米)。它所支持的应用经常通过像笔记本电脑这类便携式以数据为中心的设备访问,而非通过以电话为中
   心的设备进行访问。

·语音和数据信号在许多重要的方面不同:语音信号可以错误但不能容忍时延;数据信号能够允许时延但不能容忍错误。因此,为数据而优化的网络不适合于传送语音信号。反之,
   为语音而优化的网络也不适于数据信号。WLAN主要用于支持数据信号,与此形成对比的是,3G网络被设计用于同时支持语音和数据信号。

WLAN是一种共享频带的技术。在共享频带技术中,可用的频带带宽被用户瓜分。换句话说,无线局域网可以提供11Mbps带宽容量的事实并不意味着10个用户同时都使用11Mbps容量。 虽然3G网络也受到容量的限制,但分组交换的蜂窝技术使它们可以以高容量支持更多数量的用户。并且由于WLAN在无需许可的频带上运行,因此它们也更易受到其他运行在同一频带的技术(如蓝牙)的干扰。

posted @ 2008-04-02 10:52 Paul Lin 阅读(38) | 评论 (0)编辑 收藏
仅列出标题  下一页
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(2)

随笔分类

随笔档案

相册

BlogJava牛人博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行