MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Hibernate 的确通过 PersistentEnum 接口提供了对标准化 的支持,这使得我们的域对象实现了一个与 ShippingCompany 对象非常类似的结构。然而,我们可能对将域对象与某个特定的持久化实现过于耦合持保守态度。如果我们计划长期使用 Hibernate ,这可能并不是一个太大的问题,但是请谨慎考虑这个决策。如果我们使用 ibatis ,那么我们就完全没那么幸运了;它完全不支持标准化。谢天谢地,如果我们的 ORM 导致过耦合或者完全没有这方面的支持,还有个解决方案——使用 JDBC

Spring 的支持,使用 JDBC 变得如此简单,我们不会再因为它的复杂性而将其的优先级打个折扣。可是,如果我们选择使用某个特定的 ORM 工具,那么我们就很难用基于 JDBC DAO 实现进行替换了——目前我们就是这样。当我们同时在一个类中包含了 JDBC hibernate 代码时,我们就无法使用 Spring 提供的支持。因为我们的 DAO 只能扩展 HibernateDaoSupport JdbcDaoSupport 二者之一。幸运的是,这里有一个优雅的解决方案,它允许我们将 Hibernate JDBC 代码封装在同一个类之内,而不会因此失去 Spring 的支持。这个方案的关键在于将 JDBC 代码封装在内部类中,之后将主体 DAO 的调用委托给这个内部类去完成。代码清单 11-6 提供了一个示例:

代码清单 11-16. 在一个单独的 DAO 中混合使用 Hibernate JDBC

package com.apress.prospring.ch11.canonicalization;

 

import org.springframework.jdbc.core.support.JdbcDaoSupport;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;

 

public class MyDao extends HibernateDaoSupport {

 

   private MyJdbcDao innerDao;

 

   public MyDao() {

      innerDao = new MyJdbcDao();

   }

 

   public void update(MyDomainObject obj) {

      // use Hibernate to persist the data

   }

 

   public MyDomainObject getById(int someId) {

      return innerDao.getBy(someId);

   }

 

   private static class MyJdbcDao extends JdbcDaoSupport {

 

      public MyDomainObject getBy(int someId) {

         // do some real processing

         return null;

      }

   }

}

 

尽管这只是一个简单的实现,我们也可以从中得到启发。所有的 JDBC 相关代码都被转移到一个内部类中,而此内部类扩展了 JdbcDaoSupport , 所有的 Hibernate 相关功能都留在外部,外部类仍然是 HibernateDaoSupport . 的子类。通过这个类,我们可以使用 Hibernate 完成域对象的持久化,但是我们可以将查询功能交给嵌入的 JDBC DAO 去完成。

在我们的应用中有效利用标准化 ,可以通过避免大量无谓对象的创建,从而极大提升内存使用效率。如果我们必须更新标准化对象相关的数据,同时我们在 DAO 中使用了 ORM 框架,那么我们就可以以 ORM 无关的形式引入一些 JDBC 代码来加入标准化 支持。


来源:Pro Spring中文版 http://book.csdn.net/bookfiles/48/100481407.shtml

http://hi.baidu.com/%D3%F4%C3%C6%BB%A8%C9%FA%BD%B4/blog/item/7768d41e8c06ceffe0fe0ba6.html

posted @ 2009-12-18 16:51 leekiang 阅读(978) | 评论 (0)编辑 收藏

“Hibernate与JDBC(iBATIS)  都使用 DataSourceTransactionManager 同样可以保证事务
原理就是保证了 connection 的唯一性。
jdbc我是调spring的jdbcTemplate来操作,
经过测试。在同一个数据源的情况下直接使用Hibernate的TxManager可以同步事务,问题解决。

Rod Johnson的话:
引用
It is possible--and sometimes useful--to have coordinated transactions for both. Your JDBC transactions will be managed by the HibernateTransactionManager if you work with the same JDBC DataSource in the same transaction. That is, create the SessionFactory using Spring's SessionFactoryBean using the same DataSource that your JdbcTemplates use.

The only issue to watch, of course, is that you may be invalidating your Hibernate cache by JDBC changes. Generally I find it best to use JDBC to update only tables that don't have Hibernate mappings.

Juergen Hoeller的话:
引用
As Rod said, simply keep using HibernateTransactionManager, which auto-detects the DataSource used by Hibernate and seamlessly exposes Hibernate transactions as JDBC transactions for that DataSource. JDBC code that accesses the same DataSource via Spring will automatically participate in such transactions.

Note that you must specify the DataSource for Hibernate via LocalSessionFactoryBean's "dataSource" property to allow HibernateTransactionManager to auto-detect it. Alternatively, you can explicitly pass the DataSource to HibernateTransactionManager's "dataSource" property.
http://www.fireflow.org/redirect.php?tid=498

Rod Johnson在spring 论坛中有一句话很好的总结了如何在测试中处理hibernate缓存:
Remember that you can clear the Hibernate session, removing objects already associated with it. This is often necessary before requerying in tests, and solves most (if not all) problems.
I typically use JDBC for verification. The pattern is
- do Hibernate operation
- flush Hibernate session
- issue JDBC query to verify results
That way I'm verifying what Hibernate did to the database in the same transaction.

posted @ 2009-12-11 00:14 leekiang 阅读(992) | 评论 (0)编辑 收藏

<jsp:include page=""/> 运行时插入 <%@ include file="" %> 编译时插入
这样后者引入的jap里的java变量可以在include标记后面使用。
见http://www.blogjava.net/Unmi/archive/2007/08/10/135913.html

posted @ 2009-12-03 22:07 leekiang 阅读(316) | 评论 (0)编辑 收藏

1,基本用法
http://blog.163.com/fxf_java/blog/static/59268637200822833715185/
2,JdbcTemplate的连接
http://www.javaeye.com/topic/89845
http://forum.springsource.org/showthread.php?t=63444
3,ConnectionCallback
http://blog.csdn.net/lin49940/archive/2009/10/22/4712883.aspx

public interface ConnectionCallback

Generic callback interface for code that operates on a JDBC Connection. Allows to execute any number of operations on a single Connection, using any type and number of Statements.

This is particularly useful for delegating to existing data access code that expects a Connection to work on and throws SQLException. For newly written code, it is strongly recommended to use JdbcTemplate's more specific operations, for example a query or updat variant.

doInConnection

ObjectdoInConnection(Connection con)
throws SQLException,
DataAccessException
Gets called by JdbcTemplate.execute with an active JDBC Connection. Does not need to care about activating or closing the Connection, or handling transactions.

If called without a thread-bound JDBC transaction (initiated by DataSourceTransactionManager), the code will simply get executed on the JDBC connection with its transactional semantics. If JdbcTemplate is configured to use a JTA-aware DataSource, the JDBC Connection and thus the callback code will be transactional if a JTA transaction is active.

Allows for returning a result object created within the callback, i.e. a domain object or a collection of domain objects. Note that there's special support for single step actions: see JdbcTemplate.queryForObject etc. A thrown RuntimeException is treated as application exception: it gets propagated to the caller of the template.

Parameters:
con - active JDBC Connection
Returns:
a result object, or null if none
Throws:
SQLException - if thrown by a JDBC method, to be auto-converted to a DataAccessException by a SQLExceptionTranslator
DataAccessException - in case of custom exceptions
See Also:
JdbcTemplate.queryForObject(String, Class), JdbcTemplate.queryForRowSet(String)


2,

posted @ 2009-11-30 04:46 leekiang 阅读(1487) | 评论 (0)编辑 收藏

NetReptile推荐 [2005-2-1]
出处:来自网上
作者:truely,bylsfboy等
 

truely眼中的设计定义:设计的过程就是将事务处理抽象成计算机模型的过程。
1. 首先要明白设计远比编程重要。
2. 平时注重训练自己的思维严谨性和从全局考虑问题的能力。建立冷静思考问题的处事态度。
3. 设计时(尤其是数据库设计时)不要完全被规矩约束,设计好比作诗,懂得韵律是对的,但完全被韵 律所束缚,就作不出好诗了。
4. 多做设计,经常总结自己的不足之处和成功之处,向他人请教。
5. 专门去找别人设计的漏洞和不足,也是提高自己设计水平的重要手段。
(记住:这个好方法不要顺便外传,自己知道就行了,嘻嘻-:)
6. 经验是重要的,但如果观念老化而不善于总结提高,所谓的经验就成为束缚自己进步的枷锁。
7. 学好数学特别是理论数学如数学分析、运筹学、数学模型等。多玩策略性经营游戏也是有益的。推荐 《帝国时代》和《模拟首都3000》以及《大富翁4》。(但不要沉陷在里面)
8. 根据项目情况和开发平台工具的特点确定最佳的设计方法。模块化设计方法和面向对象设计。两种设 计方法的结合使用。
9. 将复杂无序的过程用模块化的方法进行分解,但要注重事务间的联系,并且用开放的眼光去设计。
10. 设计时对严谨性、灵活性、开发效率、客户要求四个方面做衡量取舍。
11. 设计时还要根据整个工程的进度安排和客户对软件的要求而决定是否设计得足够灵活和严谨。
12. 复杂而无条理是最糟的设计,简单实用并不一定是最好的,但一定不是最坏的。(不要说我偷懒哟)
13. 训练自己良好的表达能力,能用清晰明确而且简单的描述表达出自己的基本思路。
14. 在一个项目中建立统一的系统分析模式和文档模板,同时,一个项目中必须至少有一个人对整个系统 设计进行检查和进行全局的考虑。


再谈如何成为一个好的系统分析员?

bylsfboy

系统分析员基本功:

好的系统分析员都是从优秀的程序员中产生的,坚实的编程功底、丰富的经验是今后做系统分析的基础。
没有对系统本身进行过透彻剖析过,很难领会到其中一些难以言述的精华。但并不等于好的程序员就能够 成为好的系统分析员。

合 理的知识结构。语言能力、文字表达能力、技术的全面性等是对系统分析员的基本要求。比如说c/s和3 层开发,如果仅仅对netscape公司的产品熟悉还不够,还需要了解比如微软等产品,并且要了解他们中产 生历史,发展思路,技术优劣,以应付各种穷追猛打的提问。但更重要的是,这是你为应用定制技术要求 的前提。

系统分析员思想:

全 局观念是系统分析员必须具备的观念。如果系统分析员设计时太注重细节,往往会陷入在某个问题上纠 缠不清的泥潭。(93年,我论文指导老师的一席话影响了我随后几年对软件开发的理解----今后计算机会 越来越快,多写几行代码少写代码无关紧要,最重要的是整体;一开始就错了,某个部份编得再好,也是 没有用的)

任务难度的预测能力

系 统分析员要具备快速的任务难度预测能力以及具备快速确定开发小组人员构成和任务划分的能力。(我 将这条归为思想,而不是能力)昆虫自然会长出翅膀,而思想却需要长期的浸润。要做到这点,需要大量 的思考、学习。设计远比编程重要。当今软件业的发展,各种开发工具的出现,编程已经不是什么问题, 程序员的工作某种程度上讲是将别人现成的东西拼凑堆砌起来。系统分析员要清楚的认识到,现在大多数 程序员没有学会怎么去整体的了解一个系统,有些甚至不了解编程(这不是说他们不会写代码)。可视化 的开发工具加五花八门的控件,程序员可以偷点懒了。(这可不是夸大,我好几年的管理工作,接触过大 量的程序员)基于技术,跳出框架。基于现有技术结合用户需求思考问题,设计时跳出框架。

系统分析员思想:

系统分析 员要有面向用户的思想。系统分析员应当有能力将自己扮演成用户,来了解要交付的项目看起来 想什么样式,感觉想什么,从而了解用户的想法并挑选出合理部份去开发。从这个意义上说,系统分析员 才能获得有意义的见解去引导他的开发组成员。系统分析员头脑中要对项目结局有一个清楚的认识,并保 证项目不偏离方向。系统分析员要有根植于技术,高于技术思考问题的思想。纯粹的程序员通常对最终结 果考虑的不是很多,当一种新的技术在市场上出现时,他们对能否按时交付的考虑就比较少,而强烈希望 他们的计划能够建立在新的技术之上。因此,系统分析员的想法和行动要象一个用户,又要能够站在技术 的高度,成为真正的用户、程序员之间的代言人。

系统分析员的关键

获得信任。系统分析员最重要的素质是获得信任,这是成为优秀系统分析员的关键。成熟最为关键。成熟 可以为整个项目组提供正确的支持,能够理解技术怎样才能解决用户的需求。

系统分析员的准备工作

统 一的各种文档模式,这其中包括今后软件变量、字段命名规则。我推荐用pb制定的规则做基础,通过改 造成为适合自身实用的标准。统一的文档管理。统一的分析软件。比如说rose(uml太规范,国内的软件 管理水平根本用不上,只不过尽量应用,你自己对系统分析的理解有好处) 方法是思想的放映,在具体方法上就不多说了。我托人从u$a弄到几本书,用于面向对象系统开发的使 用》、《面向对象的分析》、《项目管理》等都是很不错的,推荐大家看看。

我在拙作"在中国没有人懂计算机"里发了点牢骚,听说挨了部份人(习惯性的)骂。其实,bbs本来就是 发泄的地方,在这里从来就罕有有内容的文章。

自 从"维纳斯"登陆深圳后,大家更着眼于从宏观看中国的it业了。中国it这棵小树,说实在的,长到今天 实在是不容易。一些人提出了"反对微软霸权"的口号,不少人呼唤中国"硅谷"的出现。微软的成功不是技 术的成功,更多的是商业运作的成功。中国it这棵树能长多高,取决于他所植根于的土壤。而现在的事实是,这片土壤实在是太贫瘠了!如果按我们现在的思路和 搞法,是长不成大树,更别指望能结出"微 软","硅谷"这样丰硕的果实。如果说,我们的软件技术落后美国十年,我们的硬件制造技术则落后美国 二十年,我们的管理水平落后美国至少三十年。而最终决定发展速率的恰恰是我们的死穴──低劣的管理 水平。低劣的管理水平的形成的原因有着深厚的背景和多方面的原因。

系统分析工作是解决一个问题的工作,目标是将一个对计算机应用系统的需求转化成实际的物理实现,其中 复杂就复杂在实际的面太多.在系统分析过程之中注意问以下的问题,可能会所进行的系统分析设计工作有 帮助.

1)您所完成的系统目的是什么?注意不是功能要求,而是目的.也就是为什么要建设、为什么要现代建设。

2)您所完成的系统有哪些方面参与,各方面的初衷是什么?那些人可能在系统建设中起重要作用,他们 会采取什么样的态度?你对他们有多少影响力?

3)您的系统是否有一个明确的评价标准?最好从参与的各方面都进行考虑。

4)你的系统设计思想是什么?是否能够得到各方面的认可。

5)你对参与系统设计开发的人员了解吗?他们的特长在哪里,是否愿意与你合作,为什么?你对他们有 足够的影响力吗?

6)你的系统开发计划是否完善?你的计划表有明确的阶段吗?任何一阶段都应该怎样完成?如何对这一 阶段完成的情况进行评价?

7)你对所采用的系统开发方法以及工具是否熟悉?你的夥伴是否熟悉?

8)你所完成的系统是否有原型?计算机的或者物理的。

以上的几个问题都是在系统分析以及系统规划时涉及到的,供各位参考。

系统分析工作是解决一个问题的工作,目标是将一个对计算机应用系统的需求转化成实际的物理实现,其中 复杂就复杂在实际的面太多.在系统分析过程之中注意问以下的问题,可能会所进行的系统分析设计工作有帮助

1)您所完成的系统目的是什么?注意不是功能要求,而是目的.也就是为什么要建设、为什么要现代建设。在考虑系统目的时,我更多的侧重于系统的最终目标考虑,因为一个系统不可能一下子完美,为系统留些 余地。

2) 您所完成的系统有哪些方面参与,各方面的初衷是什么?那些人可能在系统建设中起重要作用,他们 会采取什么样的态度?你对他们有多少影响力?中国it行业的失败之一就是人"太年轻",一定要有领导的 支持,否则完蛋。不要认为自己对他们会有多少影响力,即便有,也要尽可能的认为是决策者再影响他 们。在中国,一个技术员,你算老几?说到这里我很悲哀。哪些人在系统中起重要作用并弄清楚他们的态 度,这点十分关键。

3)您的系统是否有一个明确的评价标准?最好从参与的各方面都进行考虑。不知道这样说对不对,在系 统建设之前,对你的程序员、对你的领导要有至少不同的两种评价。

4)你的系统设计思想是什么?是否能够得到各方面的认可。如果高明,对领导、对程序员都采用引导, 得到认可的最好办法,就是让他们认可他们自己的想法。(我力图这样做,但做得不好,系统分析员有一 点要学会韬光养晦,忍)

5)你对参与系统设计开发的人员了解吗?他们的特长在哪里,是否愿意与你合作,为什么?你对他们有 足够的影响力吗?软件发展到一定的程度,不是编程,不是数学,而是管理。

6)你的系统开发计划是否完善?你的计划表有明确的阶段吗?任何一阶段都应该怎样完成?如何对这一 阶段完成的情况进行评价?

7) 你对所采用的系统开发方法以及工具是否熟悉?你的夥伴是否熟悉?事实上,不是每种好的工具都要 使用,也并不一定都要他们熟练掌握。提醒诸位一句,当你将方案做得可以不依赖某个程序员,你在程序 员面前就无信任可言,因为从此程序员将受到更大的生存压力。我坚决不在公司使用rose。

8)你所完成的系统是否有原型?计算机的或者物理的。

以上的几个问题都是在系统分析以及系统规划时涉及到的,供各位参考。

这文章很好,我的话是:"需求分析实际应该是问题分析"。含义是系统要解决的是问题。而不是用户提出 的需求。经常发现系统完成后,客户说"我的问题还没有解决"。可是,需求分析稿上的目标都搞定了。

既然是问题分析,所以,熟悉目标系统的知识就是必要的。甚至,可以说,一个好的系统分析员也应该是 好的业务专家。

我 很高兴在这里遇到许多分析高手,可以交流分析中的问题。我赞同从来的观点。在中国作分析重要的是 人气,因为中国的企业级信息系统的建设在很大程度上可以说并非确有需求,而是迫于某种压力。用户在 很多时候考虑的不是系统的长远发展,而只是短期的成果,要求开发单位在很短的时间内完成一个很大的 系统的开发,没有时间对系统进行周密的分析,在这种情况下,很多开发商就会粗分析,粗设计,尽快进 入编码阶段,这样的系统的生命周期肯定不会很长。说了这么多,只是想说,系统分析员确实应是业务和 管理专家,并且需要有很好的语言组织能力,他需要根据问题域中存在的问题去尽力说服用户,引导用户 需求,毕竟,我们是专家,如果让用户牵着鼻子走,系统不会是成功的系统。(当然了,这要建立在用户 是可引导的前提下)本人拙见。

在理解和分析用户的需求时,应说服用户明白:建立计算机应用系统并不是简单地用计算机代替手工劳
作,它更应该是管理思想的一次革命,是现用户模式的一次升华和提高。如果系统不能高于现实,开发的系统将长期陷入需求的反复修改,其软件的生命周期也短了。

针对我对您的问题的理解,试着作如下一般性/理论性的回复:

需求分析(您可以采用usecasedriven的方法进行需求分析)在明确需求分析的基础上,确定需要采用的系统分析方法(结构化/面向对象/构件式)应用您的开发团队所确定采用的分析/设计方法,进行系统分析.根据您所采用的分析方法,依次或反复进行系统设计/建模.

http://www.sawin.cn/doc/SA/SATech/NetReptile14.htm

posted @ 2009-11-26 23:59 leekiang 阅读(295) | 评论 (0)编辑 收藏

作者:一详
来源:http://go5.163.com/ 

软件开发需要综合考虑系统模型,环境因素,软件工程,网络连接,用户界面,数据流和网络。 

开发即为写程序且写到非常熟练吗?程序设计也许是永远的基本技能和高度艺术,但今后决不是开发者的主业。 

真正需要的乃是搭积木式的系统构筑和维护,故必须对各个积木块进行深入了解。作为一个程序员不算是最辛苦,最辛苦的是系统分析员。最辛苦的不是设计和搭出 多少个系统,而是登山不止的知识获取和吸收。学习和研究已成为当今开发人员最为坚苦的一项工作, 系统的概念也已深如人心! 

这世界变化得真快,当我还在埋头查阅 NT4.0巨大的文档时,身旁有人很是令我心惊地说了一句," 别折腾了,留点儿体力给 NT5.0 吧 !"

老实说,每当面对这样的现实,我总是有一种气喘吁吁的感觉。自从我开始接触计算机,仿佛每一天都在不停地奔跑,都在卖力地追赶。但结果总是会落后,在我还没有完全从?? 找回感觉时,我在网上又发现了??的踪迹,顿时,我感觉自己没希望了。 

开发是一种思路,利用别人的成果才是最高的境界,在设计时应尽量多找一些已有的核心代码。在开发中积累的应该是对问题之分析能力,对出错情况之诊断能力, 对结构之设计能力, 而不仅仅是编写代码的能力。 打好基础,计算机课程设置的都是基础课。学习其他技术的基础没有过时不过时之说,现在一些新技术往往华而不实,不能告诉你本质的东西,对大家不会有质的提 高。 

一味讲用工具,顶多叫程序员,IT许多行业需要理解和融会贯通的理论及技术。开发工具只是辅助性的,掌握开发的思想和理论精华才是一名程序员向高层次发展的真正任务,否则只有一辈子当代码工人了! 说系统分析员编程弱恐怕有失偏颇。> 

可以说大多数好的系统分析员都是从优秀的程序成长起来的。很难想象一个对编程不甚了解的人可以划分好模块,更不要说较准确的估计出工作量和工作进度的了, 可以说系统分析是建立在程序编写上的一种学问。也 可以说是一种宏编程。我想我们不应该把做软工和做程序员对立起来。任何事物在不同的阶段都有它的表现形式。同样一个人,开始工作的一年他是程序员,一年后 他就是系统分析员了。干的活其实差别不大,只是把注意力和精力从细节转移到宏观上罢了。 我老是有一种比较天真的想法,那就是:软件工程是需要创造性思维的。 

换句话说,好的软件绝不仅仅是漂亮的代码。不论从纯计算机技术角度来说, 还是其他的角度也好,没有过人的想法都是不行的。写程序不应该只考虑到: 一段代码如何。思路宽广 是一个相当重要的素质。 但是,编程编得多了,往往会自己闭塞自己的思路,把自己限制在一个比较狭小的范围内。系统分析员也许写代码根本就很弱,但是思路宽广,统筹全局的能力一定 要有,一定要看到很多程序员考虑不到的地方。因为,用户在意的往往不是某些程序员孜孜以求的东西。比如,某个Button放的位置不好, 经常比较缓慢的执行速度等等会更令用户不满。
http://www.sawin.cn/doc/SA/SATech/sp2sa.htm

posted @ 2009-11-26 23:56 leekiang 阅读(276) | 评论 (0)编辑 收藏

出处:Java夜无眠
作者:蔡学镛

1、系统分析是什么?

  系统分析工作是解决一个问题的工作,目标是将一个对计算机应用系统的需求转化成实际的物理实现,其中复杂就复杂在实际的面太多.在系统分析过程之中注意问以下的问题,可能会所进行的系统分析设计工作有帮助。
  
  1)您所完成的系统目的是什么?注意不是功能要求,而是目的.也就是为什么要建设、为什么要现代建设。

  2)您所完成的系统有哪些方面参与,各方面的初衷是什么?那些人可能在系统建设中起重要作用,他们会采取什么样的态度?你对他们有多少影响力?

  3)您的系统是否有一个明确的评价标准?最好从参与的各方面都进行考虑。

  4)你的系统设计思想是什么?是否能够得到各方面的认可。

  5)你对参与系统设计开发的人员了解吗?他们的特长在哪里,是否愿意与你合作,为什么?你对他们有足够的影响力吗?

  6)你的系统开发计划是否完善?你的计划表有明确的阶段吗?任何一阶段都应该怎样完成?如何对这一阶段完成的情况进行评价?

  7)你对所采用的系统开发方法以及工具是否熟悉?你的伙伴是否熟悉?

  8)你所完成的系统是否有原型?计算机的或者物理的。

  以上的几个问题都是在系统分析以及系统规划时涉及到的,供各位参考。

  “需求分析实际应该是问题分析”。我们的软件系统要解决的是问题。而不是用户提出的需求。经常发现系统完成后,客户说“我的问题还没有解决“。可是,需求分析稿上的目标都搞定了。

  既然是问题分析,所以,熟悉目标系统的知识就是必要的。甚至,可以说,一个好的系统分析员也应该是好的业务专家。

  在中国作分析重要的是人气,因为中国的企业级信息系统的建设在很大程度上可以说并非确有需求,而是迫于某种压力。用户在很多时候考 虑的不是系统的长远发展,而只是短期的成果,要求开发单位在很短的时间内完成一个很大的系统的开发,没有时间对系统进行周密的分析,在这种情况下,很多开 发商就会粗分析,粗设计,尽快进入编码阶段,这样的系统的生命周期肯定不会很长。说了这么多,只是想说,系统分析员确实应是业务和管理专家,并且需要有很 好的语言组织能力,他需要根据问题域中存在的问题去尽力说服用户,引导用户需求,毕竟,我们是专家,如果让用户牵着鼻子走,系统不会是成功的系统。(当然 了,这要建立在用户是可引导的前提下)

 2、基本素质

  a、系统分析员基本功

  好的系统分析员都是从优秀的程序员中产生的,坚实的编程功底、丰富的经验是今后做系统分析的基础。

  没有对系统本身进行过透彻剖析过,很难领会到其中一些难以言述的精华。但并不等于好的程序员就能够成为好的系统分析员。

  合理的知识结构。语言能力、文字表达能力、技术的全面性等是对系统分析员的基本要求。比如说c/s和3层开发,如果仅仅对 netscape公司的产品熟悉还不够,还需要了解比如微软等产品,并且要了解他们中产生历史,发展思路,技术优劣,以应付各种穷追猛打的提问。但更重要 的是,这是你为应用定制技术要求的前提。
 
  b、任务难度的预测能力

  系统分析员要具备快速的任务难度预测能力以及具备快速确定开发小组人员构成和任务划分的能力。(我将这条归为思想,而不是能力)昆 虫自然会长出翅膀,而思想却需要长期的浸润。要做到这点,需要大量的思考、学习。设计远比编程重要。当今软件业的发展,各种开发工具的出现,编程已经不是 什么问题,

  程序员的工作某种程度上讲是将别人现成的东西拼凑堆砌起来。系统分析员要清楚的认识到,现在大多数程序员没有学会怎么去整体的了解 一个系统,有些甚至不了解编程(这不是说他们不会写代码)。可视化的开发工具加五花八门的控件,程序员可以偷点懒了。(这可不是夸大,我好几年的管理工 作,接触过大量的程序员)基于技术,跳出框架。基于现有技术结合用户需求思考问题,设计时跳出框架。 

  c、系统分析员思想

  系统分析员要有面向用户的思想。系统分析员应当有能力将自己扮演成用户,来了解要交付的项目看起来想什么样式,感觉想什么,从而了 解用户的想法并挑选出合理部份去开发。从这个意义上说,系统分析员才能获得有意义的见解去引导他的开发组成员。系统分析员头脑中要对项目结局有一个清楚的 认识,并保证项目不偏离方向。系统分析员要有根植于技术,高于技术思考问题的思想。纯粹的程序员通常对最终结果考虑的不是很多,当一种新的技术在市场上出 现时,他们对能否按时交付的考虑就比较少,而强烈希望他们的计划能够建立在新的技术之上。因此,系统分析员的想法和行动要象一个用户,又要能够站在技术的 高度,成为真正的用户、程序员之间的代言人。
  
  d、系统分析员的关键

  获得信任。系统分析员最重要的素质是获得信任,这是成为优秀系统分析员的关键。成熟最为关键。成熟可以为整个项目组提供正确的支持,能够理解技术怎样才能解决用户的需求。

3、葵花宝典

  设计的过程就是将事务处理抽象成计算机模型的过程

  1. 首先要明白设计远比编程重要。

  2. 平时注重训练自己的思维严谨性和从全局考虑问题的能力。建立冷静思考问题的处事态度。

  3. 设计时(尤其是数据库设计时)不要完全被规矩约束,设计好比作诗,懂得韵律是对的,但完全被韵律所束缚,就作不出好诗了。

  4. 多做设计,经常总结自己的不足之处和成功之处,向他人请教。

  5. 专门去找别人设计的漏洞和不足,也是提高自己设计水平的重要手段。

  6. 经验是重要的,但如果观念老化而不善于总结提高,所谓的经验就成为束缚自己进步的枷锁。

  7. 学好数学特别是理论数学如数学分析、运筹学、数学模型等。多玩策略性经营游戏也是有益的。推荐《帝国时代》和《模拟首都3000》以及《大富翁》。(但不要沉陷在里面)

  8. 根据项目情况和开发平台工具的特点确定最佳的设计方法。模块化设计方法和面向对象设计。两种设计方法的结合使用。

  9. 将复杂无序的过程用模块化的方法进行分解,但要注重事务间的联系,并且用开放的眼光去设计。

  10. 设计时对严谨性、灵活性、开发效率、客户要求四个方面做衡量取舍。

  11. 设计时还要根据整个工程的进度安排和客户对软件的要求而决定是否设计得足够灵活和严谨。

  12. 复杂而无条理是最糟的设计,简单实用并不一定是最好的,但一定不是最坏的。

  13. 训练自己良好的表达能力,能用清晰明确而且简单的描述表达出自己的基本思路。

  14. 在一个项目中建立统一的系统分析模式和文档模板,这其中包括今后软件变量、字段命名规则等。同时,一个项目中必须至少有一个人对整个系统设计进行检查和进行全局的考虑。

http://www.sawin.cn/doc/SA/SATech/blueski1178.htm

posted @ 2009-11-26 23:52 leekiang 阅读(259) | 评论 (0)编辑 收藏

1,OS_WFENTRY表其实放的是流程实例.就三个字段,ID是实例ID,主键;name是流程名;state表示流程的内置状态。CREATED = 0;ACTIVATED = 1;SUSPENDED = 2;KILLED = 3;COMPLETED = 4;UNKNOWN = -1

2,OS_PROPERTYENTRY(GLOBAL_KEY, ITEM_KEY联合主键)存储propertyset的值。
GLOBAL_KEY这个值是在JDBCWorkflowStore类的public PropertySet getPropertySet(long entryId) {
   HashMap args = new HashMap(1);
   args.put("globalKey", "osff_" + entryId);
   return PropertySetManager.getInstance("jdbc", args);
  }赋值的。
  规则如上面代码。Osff+entryid。
  ITEM_KEY即在每一个entry的Key值,propertyset(“即为key”,……
详见osworkflow 自带表结构分析

posted @ 2009-11-17 18:48 leekiang 阅读(262) | 评论 (0)编辑 收藏

使用ORACLE数据库的游标错误( maximum open cursors exceeded )
最近开发第一次遇到“ maximum open cursors exceeded”这个错误。表示已经达到一个进程打开的最大游标数
游标:当返回一个含有多条记录的结果集时,游标就像指向结果集中当前记录的指针,通过游标我们可以处理结果集中的每一条记录。
对于出现ORA-01000 maximum open cursors exceeded错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。 而且,绝大部分情况下,open_cursors只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。

从网上查了一下这个错误的原因,主要还是代码问题引起的。

这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行 conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当于在数据库中打开了一个 cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。

一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这 些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集 (ResultSet)的数据,就马上将Statment关闭。

我就是在循环里调用con.prepareStatement(sql)导致的这个错误。
修改方法,
在遍历完ResutSet后关闭rs和stmt就可以了。

转自http://ltc603.javaeye.com/blog/71540


一般来说是游标不够用了。
只需在initSID.ora文件中加上一行
open_cursors = ****
但是,很可能是由于你的程序或数据库的结构存在着一些潜伏的问题,如jlandzpa所说,没有关闭游标等。

我的程序有一阵一直在报这个错误,把OPEN_CURSOR加大到了300甚至1000还在出错,后来发现是表的STORAGE设置有问题。

建议你查一下自己的程序。
昨天说的有些错误,应该是physical_attributes_clause语句。

我们系统的数据量比较大,近200张表,有些表一天要插入1000000条左右的数据。

表是使用ER/STDIO设计的,然后直接生成建表的脚本,由于没有设置physical_attributes_clause语

句中的建表参数,因此使用了默认的参数。好像是INITIAL 10K NEXT 10K PCTFREE 20 PCTUSED 50

由于表的存储空间太小,在很短的时间内就会装满,因此ORACLE就需要不停为30多张表(数据量较大的)申请空间。于是在程序运行了一段时间后,开始出现ORA-01000: maximum open cursors exceeded的错误。 我将游标大小改到了300,还是出现错误,改到1000以后开始出现了ORA-01001:invalid cursors。再怎么加大open_cursors的数量都无济于事。

使用select * from v$open_cursors查询,发现有几百条的INSERT语句游标没有释放。

开始怀疑是程序调用的问题,仔细检查程序没有发现问题。但是发现对某张表进行TRUNCATE操作后,对此表进行插入的游标全部释放,于是开始怀疑是表结构本身的问题。

重新设置了建表参数,将数据量最大的表的INITIAL和NEXT均设置为50M。

至今未再出现同样的错误。

再次提问ORA-01000: maximum open cursors exceeded问题

这个问题yangtingkun讲的非常详细,使我茅塞顿开,但我还有一些问题向诸位高人请教。
我这里出的问题也是ORA-01000: maximum open cursors exceeded ,我将游标数由300提高到500仍然不能解决这个问题。看了这篇帖子我非常高兴,但有一些问题不明白。
我使用了select * from v$open_cursor进行查询后看不出来哪些游标未被释放。一共有近4000条记录,hash_value字段象特殊点,值从几万到几百万都有,请问怎样判定哪些游标未被释放,有多少。
另外请教一下,怎样重新设置了建表参数,能指点一下所需命令吗。数据库里表数量极大,怎样找到数据量最大的表啊。
我是菜鸟,请不要见笑。不吝赐教。

首先通过v$open_cursor中的SQL_TEXT字段可以查出没有释放的SQL是大致是什么语句。

由于建表参数设置不当,会有很多的INSERT语句无法释放。

SELECT * FROM V$OPEN_CURSOR WHERE SQL_TEXT LIKE 'INSERT%‘

找一找哪些表的INSERT语句没有释放的游标比较多。
从ALL_TABLES里查看该表的建表参数是否合适。

ALTER TABLE tablename STORAGE( NEXT N);

建议加入精华区,我也碰到同样的问题。也是调整的存储结构,另外调整了一些索引和程序,一直不知道是存储结构的问题,调整的东西多,就不知道是什么原因了

原帖由 becochow 于 2009-3-25 18:56 发表
我也出现这样的问题,我现在数据库在运行,可能是存储过程中未关闭游标,

我如何手动关闭呢?查询v$open_cursor 有几千条

今天我也碰到了这个错误,我这么关闭的:
查询v$open_cursor,看哪些是由于"存储过程中未关闭游标"引起的会话,找到SID,SERIAL#,然后KILL掉就可以了.
以上来源于http://www.itpub.net/viewthread.php?tid=24806



我昨天犯的错误就是把创建statement放到了循环之内,结果导致cursor猛增,到达了数据库设置的最大数。
虽然解决了问题,也清楚了游标是何时创建的,但还有几个问题比较迷糊。
1、通过查询,JDBC是将所有的查询结果一次性放到ResultSet中,还是一次只放一定数目的记录?例如,查询结果为2000条数据,JDBC是一次性将2000条数据放到结果集中,还是分批放置呢?

2、当通过ResultSet.next(),移动结果集指针时,此时是否还与数据库发生交互?


首先结果集resultset在你的java程序处。其中有个fetchsize设置,这个表示每次从数据库处取多少条记录到resultset.
当通过ResultSet.next(),移动结果集指针时,此时是否还与数据库发生交互?

不发生交互,数据库执行完查询后,已经把查询结果交给ResultSet了,以后的操作,和数据库无关。
交互,如果1个查询有10000条记录,resultset中只有fetchsize条,当next时还会在一定时机去交互
不是将查询结果一次性放到ResultSet中, 而是分批放入ResultSet中,一般情况下是每次10条记录.
当通过ResultSet.next(),移动结果集指针时,此时还会与数据库发生交互.

导致maximum open cursors exceeded这个问题一般是代码本身的问题.
比如执行一个查询没有关闭游标,或是在存储过程中打开了游标而没有关闭.
特别是出现异常情况是没有关闭游标.严重时会导致系统崩掉
啊~!~`我刚也犯了这种错误!!``看到这里的贴子,小妹又明白了:"哦!``原来conn.createStatement()和 conn.prepareStatement()的时候实际上都是相当与在数据库中打开了一个cursor。!!"明白了这点过后,我就在循环里新建一个 prepareStatement对象,操作完一次,成功过后就马上关掉!这样,循环里每次一个insert都新new 一个prepareStatement 操作成功完成之后再马上关闭.嘎嘎.~这样,cursor就不会溢出拉.
http://www.blogjava.net/snoopy/archive/2005/01/27/744.html

posted @ 2009-11-13 18:16 leekiang 阅读(1155) | 评论 (0)编辑 收藏

在weblogic环境下要对字符集进行显式的说明,否则weblogic平台不识别,方法如下:  
           SAXParserFactory  sf    =  SAXParserFactory.newInstance();  
           SAXParser  sp  =  sf.newSAXParser();  
           ParseClass  reader  =  new  ParseClass();  
           FileInputStream  inputStream  =  new  FileInputStream(file);  
           Charset  charset  =  Charset.forName("GBK");    //  在此处声明GBK方式  
           Reader  r  =  new  InputStreamReader(inputStream,  charset);  
           InputSource  source  =  new  InputSource(r);  
           sp.parse(source,reader); 

posted @ 2009-11-11 20:19 leekiang 阅读(317) | 评论 (0)编辑 收藏

仅列出标题
共54页: First 上一页 19 20 21 22 23 24 25 26 27 下一页 Last