Oracle ADF(Application Developement Framework)是一套快速開發(fā)企業(yè)級J2EE的MVC框架. Oracle在Model層和業(yè)務服務層上提供的缺省實現(xiàn)對開發(fā)基于數(shù)據(jù)庫的應用提供了極大的便利,尤其是它的ADF BC(Business components),這個微型的MVC框架提供了直接映射數(shù)據(jù)庫表的能力,結合View端的展現(xiàn)(Oracle 提供了桌面端Swing/JClient和Web端UIX的實現(xiàn)),開發(fā)起來就如同用Borland的數(shù)據(jù)感知控件一樣。
Spring目前是J2EE社區(qū)一個比較火的框架,應用的比較廣,那如何進行二者的有機結合呢?
我們已經習慣了Spring的IOC框架,方便的使用getBean()方法來獲得我們想要的對象,因此,如果能通過Spring來生成需要的對象,然后把這個對象注冊為Data Control(Oracle中數(shù)據(jù)感知組件),這樣就可以利用ADF BC的威力來快速構建一個數(shù)據(jù)庫應用。問題的關鍵就在于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開發(fā)環(huán)境下,我們找到
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