You are browsing the archive for 2008 十一月.

面试故事一则:Ajax提高扩展性

十一月 6, 2008 in 生活点滴/Enjoy Life

 

 

那天一位同学来应聘,大谈特谈他在他的Web系统中应用了Ajax技术,于是下面的故事发生了。

 

问:既然你说你系统中大量应用了Ajax技术,请描述一下Ajax的原理是什么?

答:这个啊,Ajax技术大家都知道的,具体我也不好说…………,反正我的系统大量使用了Ajax技术!!!

评:同学,讲故事还是小点声的好

 

问:既然大量使用了Ajax技术,那你能够描述一下Ajax带来最主要的好处是什么呢?

答:最大的好处是提高了扩展性

评:同学,没有说错吧?

 

问:这是最大的好处?

答:是的,最大的好处就是扩展性

评:同学,难道你的字典和我的不一样?还是不甘心,再问问

 

问:请问你所说的扩展性是什么意思?

答:扩展性就是说系统实现之后,方便程序的修改,功能的添加

评:这么一说,我又要学习新技术了,555~~~~~~~~~~~~~

 

 

 

亲身经历一件郁闷的事

十一月 6, 2008 in 生活点滴/Enjoy Life

 

 

和很多朋友和同事讲述了这个亲身经历的最郁闷的事,最后还是决定将它写下来,以后就不用再一次次的重复了,希望能够达到亲口传授的效果!

 

那天4S店做完保养后,正往公司赶,刚好一个路口红灯,红灯时间比较长。

 

正在等红灯时,突然看到有东西掉到驾驶位正前方的发动机盖上面,在没有看清楚是什么东西的时候,下意识的想到难道上面有天桥,

是哪个家伙乱扔东西呢?,往上面看,没有天桥啊,空旷旷的,旁边也没有其它建筑物,难道是天上刚飞过一只鸟?

再看了看那摊东西,大小差不多有小笼包那么大小,这么大的鸟屎,那得有多大的鸟啊,以前在乡下我怎么从来也没有看到过这么大的鸟屎,

再看了看它的颜色,应该和感冒时的那种很粘稠的鼻涕差不多。

 

生活经验告诉我这不是鸟屎,应该是谁吐的痰,但是怎么会这么大一唾呢?

 

这时我往左边一看,有一辆公交车也在我的左手边等红灯,目光往车上扫了一遍,眼光在和我驾驶位差不多平行的位子停留了一下,一个大约6, 70岁的大爷

向我挥了挥手,感觉在向我致歉的意思,我即刻明白发生了什么事情。

 

我心里在想“大爷,请不要乱扔东西,咂到花花草草的可不好啊,况且你这个东西扔出来把人给吓坏了!!!”。

 

那一刻我有一种想大骂人的冲动,但从小党教育我们要尊老爱幼嘛,这能怎么办呢,只能对着老大爷笑笑!!!

再说了老大爷能弄出这么大一唾东西也挺不容易的!!!

 

但是当我再次将眼光转向那摊东西,顿时感觉全身不适,有一种说不出的难受。

 

怎么处理它呢?一时被弄的想不出好办法了,而且开了一小段路,发现那个东西根本不变形,心想“大爷,你太厉害了,吐出的痰居然还不变形啊”,刚好它又在我驾驶位的正前方,感觉怎么也受不了。

“要不用大把的餐巾纸将其弄走,还是找一个洗车的地方将其洗掉?”,但是看了看附近也没有洗车的地方,再忍受继续往前找洗车店,但是开了几公里也没有,感觉已经没有办法忍受了。

路边停下,抽起了N多张餐巾纸,那一刻我屏住了呼吸,将那摊东西包住弄走。

 

事后每每我将这个故事描述给朋友和同事的时候,都弄得很多人吃不下,那段时间每每想起这件事情,都感觉心里挺不是滋味的。

 

 

通过Accessor来取得相关的实体

十一月 6, 2008 in Oracle 融合中间件

 

 

下面创建一个方法通过Accessor来取得相关的实体,无需而外的SQL代码.

 

1..N 的主-从实体关系中,我们可以通过编写一个辅助的方法来取得:

 

  1. 通过主实体取得多个从实体
  2. 通过从实体取得对应的主实体

 

如我们Departments和Employees实体关系中通过员工取得对应的部门和通过部门取得部门下的所有员工

 

取得相关实体的步骤如下:

 

1,查找关联的实体对象

我们可以使用前面编写好的通过Primary Key查找实体的辅助类来取得实体对象.

 

2,使用Accessor属性来取得被关联的实体对象

创建实体对象的时候,生成了实体对象的实现类之后,会根据实体关系生成关联实体方法来取得被关联的实体对象,

如在Departments的实现类DepartmentsImpl中会生成getEmployees方法返回部门下的员工实体集合;

在Employees的实现类EmployeesImpl中会生成getDepartments方法来返回员工所属的部门实体.

 

3,返回实体或相关的数据

 

 

通过员工取得部门名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public String findEmpDepartment(long employeeId) {
        EmployeesImpl employee = retrieveEmployeeById(employeeId);
        if (employee != null) {
            DepartmentsImpl department = employee.getDepartments();
            if (department != null) {
                return department.getDepartmentName();
            } else {
                return "Unassigned";
            }
        } else {
            return null;
        }
 
    }

 

 

通过部门取得部门下的员工数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    /* Access an associated Employees entity from the Department entity */
    public int findDeptEmployees(long departmentId) {
        DepartmentsImpl department = retrieveDepartmentById(departmentId);
        if (department != null) {
            RowIterator employees = department.getEmployees();
            return (employees.getRowCount());
            //            Row row ;
            //            while((row = employees.next())!= null){
            //                EmployeesImpl emp = (EmployeesImpl)row;
            //                System.out.println(emp.getFirstName() + " " + emp.getLastName());
            //            }
        } else {
            return 0;
        }
    }

 

 

 

 

通过Primary Key查找实体对象

十一月 5, 2008 in Oracle 融合中间件

 

 

最近在学习Oracle ADF11g,记录学习的点滴。

 

本文使用HR模式下的Departments和Employees两个数据库表,在进行练习之前需要先创建相关的应用模块和实体对象。

下面是创建的业务组建图:

 

entity_relation

 

 

am_objects

 

 

 

一般在程序开发过程中,很多情况下希望通过关键值来取得实体对象的行以及相关信息。为了访问实体对象的行,需要使用一个相关的对象叫做实体定义(entity definition)。

在运行的时候,每一个实体对象都会对应一个实体定义对象来描述实体的结构和管理实体的实例。

 

findByPrimaryKey()方法确保先查询缓冲区中给定的主键相匹配的实体对象,然后查找数据库,它从数据库中找到的记录实例化实体对象后会将整个实体对象放入内存,

而不只是主键,因此它并不是一个轻量级的。

 

创建应用模块(Application Module)之后,启用应用模块的实现类,在实现类中可以创建取得实体对象行的方法。下面创建一个retrieveDepartmentById()方法通过部门标示来查找部门信息来演示相关的步骤:

 

1,取得实体定义的对象

定义实体对象的时候,生成实体对象的实现类,会生成相关的方法。导入实体对象Departments的实现类DepartmentsImpl到应用模块实现类来取得实体定义,通过实体定义的getDefinitionObject()方法来取得实体对象的定义,

这个方法是从oracle.jbo.server.EntityDefImpl类继承来的,在DepartmentsImpl类中通过oracle.job.server.EntityDefImpl.findDefObject方法取得实体对象定义的对象

 

2,构造一个Key对象

构造一个Key对象的数组,根据关键值查找出实体行,数组中包括想查找关键字的值,后面的例子创建包含一个单一departmentId值的key

 

3,使用Key来查找实体对象

使用实体对象的findByPrimaryKey()方法通过关键值来查找实体对象,给方法传入当前数据库事务处理对象,应用模块的实现类中通过getDBTransaction()方法来获得,

实体对象行的具体实现类为:oracle.jbo.server.EntityImpl

 

4,返回实体行对象或其它数据

 

下面是在应用模块中实现的一个通过上面介绍的步骤取得实体行的示例代码:

1
2
3
4
5
6
/* Helper method to return an Department by Id */
private DepartmentsImpl retrieveDepartmentById(long departmentId){
  EntityDefImpl departmentDef = DepartmentsImpl.getDefinitionObject();
  Key departmentKey = DepartmentsImpl.createPrimaryKey(new Number(departmentId));
  return (DepartmentsImpl)departmentDef.findByPrimaryKey(getDBTransaction(),departmentKey);
}

 

 

程序故事一则:IF语句抛异常

十一月 4, 2008 in 生活点滴/Enjoy Life

 

 

本人从事Oracle EBS二次开发,但近几年较多参与新人的招聘和培训工作,和同事们在招聘过程中总会发生一些趣事。

这不今天又遇到一个让我们几个面试官爆汗而又很无奈的程序故事。

 

一位同学讲解他在学校期间基于Java Servlet开发的一个Web系统,其中涉及到一段连接数据库的Java代码(伪代码):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ConnectionManager{
   private Connection _instance ;   
   public static Connection getDatabaseInstance(){
     if (_instance == null ){
       try{
         Class.forName("");
         Connection _instance = DriverManager.getConnection();
       }catch(Exception e){
         System.err.println(e.getMessage());  
       }
     }
     return _instance ;
   }
}

 

问:第四行的_instance如果不为空请问会发生什么情况?

答:会抛出异常,执行第9行的代码。

再问:你确定会这样吗?

答:肯定,就是这样的

评:这位同学,这是Java新版中IF语句的新特性吗?