在路上

路上有惊慌,路上有理想

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  28 Posts :: 1 Stories :: 10 Comments :: 0 Trackbacks

#

首先:websphere server处于启动状态,jndi已在服务器下配置,名称为  mail/wfewcs/wfewcs_mailservice

1.在需要脱离container(app未部署至websphere)进行JNDI lookup查找时,

可以使用如下代码(以mail session的jndi为例):

Properties properties = new Properties();
 properties.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
        properties.put(Context.PROVIDER_URL, "iiop://localhost:2809/");
     Context ctx=new InitialContext(properties);
     Session mail_session= (Session)ctx.lookup("mail/wfewcs/wfewcs_mailservice");

JAR要求:wssec.jar, naming.jar, namingclient.jar, sas.jar and ecutils.jar,如果IDE为IBM RAD,则只需添加websphere运行时库以及namingclient.jar包即可(此jar不在websphere运行时库中)。

2.在container中(app已部署至websphere)进行jndi lookup查找:

比较简单:

 Context ctx=new InitialContext();
     Session mail_session= (Session)ctx.lookup("
mail/wfewcs/wfewcs_mailservice");


posted @ 2010-02-27 15:38 阮步兵 阅读(877) | 评论 (0)编辑 收藏

用例模板

  

UC01:  XXXXXXXXXX
Description

      XXXXXXXXXXXXXXXXXXXXXXXX
Interacting Actors

·    XXXXXXX
Related Use Cases
    XXXXXXX
Preconditions/Assumptions for all Flows

·         XXXXXXXXXXXXXXXXXXXXXXXX
Main Flow of Events
Main Flow Description

XXXXXXXXXXXXXXXXXXXXXXXX
Main Flow Preconditions/Assumptions

·         None
Main Flow Description

1.       XXXXXXXXXXXXXXXXXXXXXXXX

2    XXXXXXXXXXXXXXXXXXXXXXXX
Main Flow Postconditions

·         XXXXXXXXXXXXXXXXXXXXXXXX
Main Flow Notes

·         None.
Alternate Flow of Events #1
XXXXXXXXXXXXXXXXXXXXXXXX
Alternate Flow Description

XXXXXXXXXXXXXXXXXXXXXXXX
Alternate Flow Preconditions/Assumptions

XXXXXXXXXXXXXXXXXXXXXXXX
Alternate Flow Description

1.      XXXXXXXXXXXXXXXXXXXXXXXX
Alternate Flow Postconditions

·         XXXXXXXXXXXXXXXXXXXXXXXX
Alternate Flow Notes

·         None.
Postconditions for all Flows

·         None
Exceptions for all Flows

XXXXXXXXXXXXXXXXXXXXXXXX
Business Rules for all Flows

   XXXXXXXXXXXXXXXXXXXXXXXX
Design Notes for all Flows

·  XXXXXXXXXXXXXXXXXXXXXXXX
Issues/Comments for all Flows

·         None.
posted @ 2010-02-27 15:38 阮步兵 阅读(219) | 评论 (0)编辑 收藏

目标层次的划分:

       在对系统的设计范围进行确认后,下一阶段的工作便是划分每个业务目标的层次结构

    目标层次的划分如下图:

  

 

  水平面以上的为概要目标,对相似功能业务的一种概括。对于属于概要目标范围的用例说明,用例序号之后做(*)号以作区分

  水平面上的为用户目标,也就是业务功能点。

  水平面一下的为子功能点,包含于用户目标之中。对于属于子功能范围的用例说明,最好在用例序号之后做(+)号以作区分

   执行者与场景:

      用例目标层次划分后,该到用户目标用例的定义,这里面最主要的概念就是执行者与场景

      a.收集一个用户目标的所有场景,定义主成功场景。其他场景为扩展。

         主执行者完成了目标,所有系统相关者的需求都被满足,这个场景就是主成功场景。

         其他的成功场景和所有的错误处理场景,都会在主成功场景的扩展中进行描述

      b.场景主体的描述

          两个执行者之间的交互过程——客户输入地址等

          保护系统客户需求的确认过程——系统确认PIN密码等

          满足系统客户需求的内部变化——系统扣除某个产品的库存等

posted @ 2010-02-27 15:38 阮步兵 阅读(220) | 评论 (0)编辑 收藏

用例技术是很多项目中都会应用到的。usecase文档的编写可以说是入门简单,人人都能写,但是难于深入,写好了不容易。这主要在于语言文字的运 用。凡是涉及到文字的东西,都是长于严谨,短语直观。下面就谈一谈编写用例个人的感想。

      编写用例文档的准则

      1. 使用简单的语法

         句子不宜过长,句子结构不要过于复杂。平铺直叙,简明扼要。重复解释一个问题,有时不失为一种必要。

      2. usecase步骤的描述尽量不要过多

         10步以内。太长不易于理解。让读者看起来很繁琐。

      3.增加直观性,辅以图形化的手段来阐释:UML 的usecase图。图形唯一的缺点在于维护,一点改变,就可以让所有的图重画。

     确定系统边界:

          1.in-out list

        

         Topic,为系统需求点。以in 标志为系统内部需求,以out标志系统外部需求。系统内的属于工作内容,系统外的属于考虑范畴。内外表法不只可以用在用例编写阶段,也可以用在需求分析阶 段。

       2 actor-goal list

        

 

posted @ 2010-02-27 15:38 阮步兵 阅读(222) | 评论 (0)编辑 收藏

在需求采集结束后,就进入了一个相对重要的环节:问题分析。

   1.问题与客户达成共识

      这个共识有签字式的——协议,也有非签字式的——确认。

     记住,所有的共识都基于双方的理解。文字的东西往往会引起歧义,电话确认又往往失于严肃。图形化的方法可以弥补这些缺憾。个人经验,文字的描述比较适用于 早起的问题收集,或者是简单的问题确认。复杂的问题需要交给图形化来解决,wireframe——虚拟界面,是个不错的选择。它除了可以收集输入输出数据 项,还可以给客户一个比较直观的感觉。当然,这个也相对费时一些。但对于需求的确认至关重要,可以减少客户与软件人员的误解。

   2.找出问题背后的发生原因

      韦伯说过,社会行为是行动者赋予主观意义的人类行为。任何人(团体、组织)的活动在社会中都会牵涉到另一个人(团体、组织)。任何行为本身都具有意义,如 无意义,则无行为。

     扯远了,还是谈谈需求问题。客户问题的提出,是为了解决问题。要想解决问题,就必需知道问题是如何产生的。也就是说,要想找到蛋,就必需先找到下蛋的鸡, 研究它的活动轨迹,最后定位鸡蛋的位置——解决问题。在社会学里,找到了行为的意义,也就掌握了行为本身。记住,无意义就无行为,有行为则必有意义。

    3.确定系统用户

      包括用户的角色和权限。这是系统能够运行起来的基本条件。如果不能引起足够的重视,对于系统将是严重的灾难。笔者曾做过一个office resource management系统,从初始的一个角色对应一个office,到一个role对应多个office,一个人一个角色,到一个人多个角色。修改之多, 之繁重,不能与人言。

    4.确定系统边界

      在实践过程中,个人引入了"内外表"来定义系统边界。这个在稍后的usecase中具体描述

    5.划分子系统的三个原则:

       a.职责不同的功能划归不同子系统:将一类包含统一职责的功能划分为一个子系统。如权限管理系统与业务系统分离。(企业系统需要统一的权限管理:安全认证 以及系统授权),再如社会保障信息系统按业务类别的划分:养老,医疗,工伤,失业,生育。按照业务规则划分又可以分为:公共业务(单位,个人),待遇,报 表

       b.需要不同开发技能的单元划归不同子系统:如报表系统与数据仓库的独立开发。

       C.软件工程管理的划分:

          1)兼顾工作量的相对均衡,进一步切分太大的子系统。交给不同的team进行并行开发。

          2)同一类公用\复用模块划分为一个子系统:如规则引擎,简单报表,css theme管理,数据同步\交换,基础平台的二次开发(统一弹出式查询,输入校验,页面组件)等等。

posted @ 2010-02-27 15:38 阮步兵 阅读(217) | 评论 (0)编辑 收藏

题解:做了多个系统的需求分析之后,有做总结的必要了。

      在需求分析阶段,甚至是整个软件开发阶段,需求的变化是唯一不变的东西。项目中最难做的也是如何去控制需求。这个有点复杂,放到后续文章去说,先说说如何 将客户的问题信息转化为需求:

1.分清客户的问题是“需要”还是一个“需求”

   需要,指问题已明确。需求则表示问题未明确

2.分清最好有与必须有。

   必须有,这个是硬性需求;最好有,非硬性需求。根据项目的实际情况,如成本,时间(计划),范围的约束来综合评定。

3.客户对问题的描述是为了说明问题还是提供一种解决方案

   在收集和分析客户需求时,一定要搞清楚客户是在描述问题本身还是问题的解决方案

4 有哪些人使用这个系统

   俗语说,有什么样的客户,就有什么样的系统。客户的能力以及偏好,包括理解力,对系统的设计至关重要。

5.有那些人不喜欢这个系统

   是办公室政治?是易用性?是稳定性?maybe something else

6.挖掘潜在问题,形成问题链

   客户大都没有系统训练,他们对问题的描述往往比较零散和随意。如何将问题窜成链,挖掘更深层次的问题是需求分析人员需要帮助他们完成的。记住是帮助,不是 强迫他们按照你的思维思考问题。这里面最难的部分属于如果从软件专业人员的角度提出建议。同时又要让自己的的建议不干扰到客户的原始需求。

   根据个人的经验,需求阶段最大的悲哀在于你出于最好的目的却造成了最坏的结果——建议客户如何如何,建议有时会掩盖客户的真实想法。客户信任我们的建议, 他们误以为我们的建议可以解决他们的问题,然而有时事与愿违。所以,我们应该多听客户的想法,延迟你的建议与引导。

7.非功能性需求的采集

  易用性,扩展性,交互性,性能,安全性等等。

posted @ 2010-02-27 15:38 阮步兵 阅读(283) | 评论 (0)编辑 收藏

1.使用静态工厂方法构造对象
2.Boolean.valueOf() 即是1的实现,类似的还有collection集合的实例化,所有的集合实现类都是通过collection的静态工厂方法构造的。
3.静态工厂 方法比构造函数的好处:可以构建原类型的子类.不一定每次都创建新的对象。缺点:静态/如果工厂方法不是公有则不能被子类继承
4.注意销毁过期的 对象.array=null
5.对于函数里需要构建复杂的对象时需要注意,是否可以放到类的成员变量,这样就不必每次调用该函数都创建新的复杂对 象
6.避免创建重复的对象strng a=new String("a"); ---> String a="a";
7.当你改写 equals时,总是要改写hashcode方法:相等的对象必须具有相同的散列码,这样在此对象与map合用的时候才不会出错
8.复写 equals原则:自反性,对称性,传递性,一致性
9.equals方法的参数一定要说object,方法内不要依赖不可靠资源
10. 提供对象的toString方法
11.实现Cloneable接口提供克隆机制:深层克隆
12.接口优于抽象类
13.组合优于继 承
14.compareTo,Comparable接口比较
15.注意方法的参数检查
posted @ 2010-02-27 15:38 阮步兵 阅读(319) | 评论 (0)编辑 收藏

 

先下载couchdb安装文件:版本为0.9.1

http://couchdb.apache.org/downloads.html

1开始安装依赖包

sudo apt-get build-dep couchdb

sudo apt-get install libmozjs-dev libicu-dev libcurl4-gnutls-dev libtool

2.解压缩

tar -zxvf apache-couchdb-0.9.1.tar.gz

3.开始安装

cd apache-couchdb-0.9.1

./configure

make

sudo make install

4.启动couchdb

sudo couchdb

5.访问:http://127.0.0.1:5984/_utils/

启动报错:

$ bin/couchdb







Apache CouchDB 0.9.0a691361-incubating (LogLevel=info) is starting.



{"init terminating in do_boot",{{badmatch,{error,shutdown}},[{couch_server_sup,start_server,1},



{erl_eval,do_apply,5},{erl_eval,exprs,5},{init,start_it,1},{init,start_em,1}]}}



Crash dump was written to: erl_crash.dump



init terminating in do_boot ()



查了一下官方wiki:



原来是安装文件夹的权限问题







解决办法:



sudo adduser couchdb



chown -R couchdb:couchdb /usr/local/etc/couchdb



chown -R couchdb:couchdb /usr/local/var/lib/couchdb



chown -R couchdb:couchdb /usr/local/var/log/couchdb



chown -R couchdb:couchdb /usr/local/var/run



chmod -R 0770 /usr/local/etc/couchdb



chmod -R 0770 /usr/local/var/lib/couchdb



chmod -R 0770 /usr/local/var/log/couchdb



chmod -R 0770 /usr/local/var/run







再此启动,看到欢迎界面,所有的testsuite run success,大功告成!


文章来源:http://guming.blogbus.com/logs/45898514.html
posted @ 2010-02-27 15:38 阮步兵 阅读(757) | 评论 (0)编辑 收藏


begin try
 BEGIN TRANSACTION

    insert---

  commit
end try

begin catch
   print 'error: id='+@id;
    if @@Trancount>0
   begin
   rollback TRANSACTION

--如果有cursor,别忘记关闭cursor
    CLOSE cursor_distinfo
    DEALLOCATE cursor_distinfo
   end
end catch



文章来源:http://guming.blogbus.com/logs/23611743.html
posted @ 2010-02-27 15:38 阮步兵 阅读(311) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3