Statement标准关闭方法

在O/R Mapper的代码中,Statement的关闭模式:

clearup的实现:

/**

 * Close database resource.

 *

 * @param conn

 * @param pstmt

 */

protected void clearup(Connection conn, PreparedStatement pstmt)

{

    if (pstmt != null)

    {

        try

        {

            pstmt.close();

        }

        catch (SQLException se)

        {

            se.printStackTrace();

        }

        pstmt = null;

    }



    if (conn != null)

    {

        try

        {

            conn.close();

        }

        catch (SQLException se)

        {

            se.printStackTrace();

        }

        conn = null;

    }

}

1.一般模式

    Connection conn = null;

PreparedStatement pstmt = null;

try

{

    conn = getConnection();

    pstmt = conn.prepareStatement(SQL);

    pstmt.setString(1, id);

    pstmt.setString(2, type);

    pstmt.executeUpdate();          

} catch (SQLException se)

{         

throw new ApplicationException(se);

} finally

{

    clearup(conn, pstmt);//有效的close了Connection;只有一个pstmt,相当于只打开了一个光标,在这里有效的close了pstmt.

}

1.在使用jdbc进行批处理的时候,注意每一次创建一个Statement,一旦无须使用,立刻关闭,因为每一次都是打开了Oracle的一个cursor.(Oracle默认最大一次打开300个,最多也

只支持1000多个)

Connection conn = null;

PreparedStatement pstmt = null;



try

{

    conn = getConnection();

    pstmt = conn.prepareStatement(SQL1);

    pstmt.setString(1, id);

    pstmt.setString(2, type);

    pstmt.executeUpdate();

    pstmt.close(); // 请立刻close当前pstmt的光标。

    pstmt = null;  // 必须使用



    pstmt = conn.propareStatement(SQL2);

   pstmt.setString(1, id);

    pstmt.setString(2, type);

    pstmt.executeUpdate();

    pstmt.close(); // 请立刻close当前pstmt的光标。


    pstmt = null;  // 必须使用

  … …

} catch (SQLException se)

{         

throw new ApplicationException(se);

   } finally

   {

       clearup(conn, pstmt); //有效的close了Connection;只有出现exception才能有效close pstmt;

}

Java编程之log4j日志

一直以来,如何去写日志都萦绕我胸怀已久;直到最近又要开始新的project,关于系统中日志如何设计又一次让我踌躇,发散了思绪,化成了淡淡的笔迹,拿出来给自己,也给大家分享。

在系统中分为两种日志:一种是流程日志,要包含用户最关心的信息,便于问题查找和跟踪;包含系统运行的状态信息和当前步骤;。。。。。。另外一种是调试信息,这有包含系统release debug信息和代码开发测试debug信息两种,release debug信息是希望在系统运行中可能运用到的日至类别;develop&test debug message是在系统开发测试阶段实用,而在code release之后,这些部分需要被删除的(代码冗余,性能考虑,代码净化)。

可以说是三种类型的日志,在code开发过程中都需要在代码中实现的,但是可能在release版本中会有所处理的;这就联系到处理机制。

java一般使用apache的log4j来写日志,可能我们会在log4j的基础之上构建我们系统的日志服务组件,姑且不论哪一种.顺便可以提及log4j的一些feature:日志级别,日志patterns

流程日志是系统运行的必须日志,因此它的级别至少是info级别的。eg:
if(log.isInfoEnabled()){
log.info(“ Message! “);
}
或者
{
log.info(“ Message! “);
}

在这个日志信息中要包含:系统流程信息(有必要输入的),用户关心的信息(以优先级最高或者较高的为主),我们有必要在日志输出中关心的消息(以优先级最高为主);。。。。。。(欢迎补充)

该日志输入对于记录系统运行状态(定时查看系统是否运行良好,可能是一个守护进程),记录流程运行阶段性的信息(当前阶段系统中各个关注点的情况,比方用户的一些信息,或者用户关心的一些信息,以便于系统出现异常是问题跟踪使用,系统维护必须的一些信息)。。。。。。这些日志在系统任何时段都能够准确的输出,因此没有必要对他何种情况输入等进行考虑和限制。对于log.info级别的日志最好能对于条件进行以下判断会更好。

系统release debug日志,是为了便于系统真正运行起来以后,可能进行debug的时候才需要进行日志输入,之所以对他们进行限制,主要是出于性能等方面的考虑。对日志输入的条件进行严格的限制,
if(log.isDebugEnabled()){
log.debug(“ Message! “);
}

尽管程序员是对代码充满自信(证明足够的健壮性),我们还需要在一些不确定,或者可能出现的,对于明天的事情做一些预测,今天对于问题进行防卫,(这些都是软件工程所反对的),我们都需要处理 跟踪 校验 排查等的区域,通过日志预先放置一些”监听器”.这种日志和系统的可维护性息息相关。这里面的很多日志信息都是“流程日志”的强大备份,也是系统通过test以后日志仍然需要变动的地方。也是和develop debug很难区分的一个区域。

前两种日志都是可能会对系统的性能构成影响,或者产生冗余或者日志不完全。尽管编码没有什么难度,但是都需要一些清晰的规范支持(至少是team一级的),主要是日志的可读性,覆盖的面积,可维护性。

develop log基本上上适用于代码调试阶段和单元测试阶段使用的log信息。根据程序员个人喜好和习惯来定制,但是这些log message在正式版本release以前都是要被删除的。需要一些灵活的机制和pattern实现等来支持。eg:
DebugManager{
public static boolean debug = true;
}

if(DebugManager.debug){
    if(log.isDebugEnabled()){
        log.debug(" Message! ");
    }
}

在编译期间中对于这种情况进行优化。

Web开发起始篇

首先说一些题外话,做web页面开发,也是j2ee吧。

现在学习mvc,应用struts的兄弟姐妹们多多,最近struts也release了1.2.2版本了。

最近一个同事问我如何让一个新人快速进入到struts的开发中去。我理了理头绪,“往事一幕幕”。

从个人职业规划来看,主要有几个思想的方向。前几天谈论理论与实践的距离和有效性,作为coder,我们是实践者,我们也是工作人,我们需要一些方法论来指导我们的思想,我们通过我们思想的脉络来把握技术的发展。

主要有两个方向:一个是project management;一个是developer.

每一个程序员都有把握整个项目的欲望和冲动;动力之后是方法论了。

想到今天我也对别人怎么去coding指手画脚,:)。

1.了解java的代码规范.刚开始是十分重要的。就像人生的第一步似的。

3.了解一下jdk的版本,和在项目中jdk的控制。

2.开发环境ide的版本,eclipse等,如果是eclipse,还有plugins的了解。(怎么配置代码的style.)

3.对于tomcat的了解和配置;读读tomcat的源码也是不错的野味呢./sun one

4.了解mvc的结构和发展。

5.了解测试驱动开发和junit.

6.了解jdbc,更好能了解一些关于数据连接的封装。

7.了解presentation—business—persistence等layer结构;有时间了解framework更好。

8.了解一些java pattern。

9.有时间了解spring的bean管理想法,顺便就学到了依赖注入的思想了,看看martin fowler的文章,了解各个注入方法的特点。

10.了解jsp的语法。

11.了解javascript的语法。

12.了解struts自带的taglib(JSTL)。apache有一个专门的taglib项目,我们所需要的所有的taglib在里面都有。通过我接触的一些开源的项目,taglib使用的十分广泛。http://jakarta.apache.org/taglibs/index.html 一个tagunit网站http://www.tagunit.org/tagunit/index.jsp

13.有时间可以读struts的源码,我还没有读过,有点儿遗憾,如果能看一下servlet跟好了。

14.了解servlet,filter,listener的用法。特别是filter,链职责模式也可以学到了。

15.了解commons-logging,log4j.如何写log,什么时候写log. http://logging.apache.org

16.servlet api javadoc: http://java.sun.com/products/servlet/2.2/javadoc/

17.apache struts: http://struts.apache.org/ http://struts.apache.org/api/index.html struts已经release了1.2.2版本,应该有不少新特性。

18.junit site: http://www.junit.org/junit/javadoc/index.htm

19.我们一般画图用的open source 的api也是apache的POI: http://jakarta.apache.org/poi http://jakarta.apache.org/poi/apidocs/index.html

如果一开始,我们还是自己写jdbc比较好吧,慢慢的可以接触or mapping的东西。

1.jdbc怎么写可以看 java核心技术.里面还有怎么用java写存储过程的例子。

2.过一段时间可以看看or mapping的东西(Object Relation Mapping);现在比较热的开源的是:ibatis和hibernate.

在学习过程中,xml和uml都会跑进来的。enjoy it!

关于presentation layer,更多的涉及到jsp,javascript和struts.

1.struts taglib的运用。

2.struts里面有一个validation.xml和validator-rules.xml两个需要理解。

3.struts的formbean的机制,执行顺序。

4.actionmapping的原理。

5.struts-config.xml的配置。(建议:在项目中将struts-config.xml分离,team中每一个成员维护自己的。)

6.中文化的一些问题。unicode的编写。建议使用java提供的命令行:native2ascii -encoding gb2312 sourceFile.properties destFile.properties

7.说明:在struts中,有一个c—control的概念,在我们应用层编码,是看不见它的存在的。它体现在struts中应该是一个org.apache.struts.action.RequestProcessor的类,我也记得不太清楚。

8.了解struts开发中一个baseform的模式。(只有一个baseform的模式)

9.在jpetstore4.0.5中,采取了只使用一个action的模式,这样做是为了将business和action分离,在action层进行了一个公用提取,利于business logic的公用和维护,也提高了可测试性。。。。。。

10.那就看看jpetstore的源代码吧。注:jpetstore4.0.5版使用了ibatis的sql mapping和dao framework。

有时间可以了解一下project management的一些工具,学习写ant和maven的脚本,这都是很重要的。

  1. 学习cvs,了解版本控制。

  2. 了解exception机制,原理和发展始末以及方向。

  3. 学习xp开发方式。

4.开始学习分析设计了,掌握uml了,了解各个层次的pattern的时机到来了。

还有一些书要看了。经常上网看别人对于现在的开发方向的讨论。。。