Oracle ADF(Application Developement Framework)是一套快速开发企业级J2EE的MVC框架. Oracle在Model层和业务服务层上提供的缺省实现对开发基于数据库的应用提供了极大的便利,尤其是它的ADF BC(Business components),这个微型的MVC框架提供了直接映射数据库表的能力,结合View端的展现(Oracle 提供了桌面端Swing/JClient和Web端UIX的实现),开发起来就如同用Borland的数据感知控件一样。
Spring目前是J2EE社区一个比较火的框架,应用的比较广,那如何进行二者的有机结合呢?
我们已经习惯了Spring的IOC框架,方便的使用getBean()方法来获得我们想要的对象,因此,如果能通过Spring来生成需要的对象,然后把这个对象注册为Data Control(Oracle中数据感知组件),这样就可以利用ADF BC的威力来快速构建一个数据库应用。问题的关键就在于ADF为每一个data control指定了一个工厂类属性,而这个工厂类属性的实例值需要我们用Spring来生成,就OK了。举一个实际的例子:
在Spring中,我们定义了如下的接口:
package nl.amis.spring.hrm;
import java.util.List;
public interface HrmService {
public void setEmployeeDao(EmpDAO employeeDAO);
public List getAllEmployees();
public long getSalarySum();
}
配置文件为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourceDBDirect"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
<bean id="employeeDAO" class="nl.amis.spring.jdbc.EmployeeJdbcDAO">
<property name="dataSource">
<ref local="dataSourceDBDirect"/>
</property>
</bean>
<bean id="hrmService" class="nl.amis.spring.hrm.HrmServiceImpl">
<property name="employeeDao">
<ref local="employeeDAO"/>
</property>
</bean>
</beans>
在Oracle JDeveloper开发环境下,我们找到
nl.amis.spring.hrmServiceImp这个类,然后用菜单命令把它注册为一个Data control组件。这个新生成的Data control缺省名字是:HrmServiceImplDataControl,查看它的属性,有一个Factory class属性,找到这个属性所指的类,修改如下源码:
Object bean = oracle.jbo.common.JBOClass.forName(beanClass).newInstance();上面的代码就是生成HrmServiceImpl对象的代码,把它改为:
ApplicationContext springCtx = new ClassPathXmlApplicationContext("SpringConfig.xml");
Object bean = springCtx.getBean("hrmService");这样主要工作就OK啦,剩下的就是修改一下Data Control的配置文件(在注册成为Data Control后生成的同名.xml文件),修改
<content>中的<AccessorAtribute>部分,把id改为:allEmployees; BeanClass 改为nl.amis.spring.hrm.Employee; IsCollection="true"; Type改为java.Util.List.
以上修改表明我们需要的是通过employeeDao获得的Employee的集合,把这个结合作为结果集应用到ADF BC中。
英文原文出自:
http://technology.amis.nl/blog/index.php?p=765