Oracle 7Up Workshop - Day One
Download
Report
Transcript Oracle 7Up Workshop - Day One
Spring – Power to the POJO
Introductie tot het Spring Framework
Lucas Jellema
Oracle Consulting –
Java Professional Community,
maandag 29 augustus 2005
Oracle Consulting – Java Professional Community – 29 augustus 2005
1
Agenda
Introductie Spring – History, Background
Hoe kom je aan nieuwe objecten
BeanFactory en Inversion of Control + Dependency Injection
Hoe laat je bestaande objecten naar je pijpen dansen?
Aspect Oriented Programming (AOP)
Business Tier & Architectuur
Test Driven Development
Spring Persistence & Spring DAO
Spring Remoting
Losse eindjes, conclusies, discussie
Workshop
Oracle Consulting – Java Professional Community – 29 augustus 2005
2
Where we’ve come from
EJB as we know it…
Resembles the original JavaBeans specification in name only.
Heavyweight:
•
•
•
Requires application server
Difficult to unit-test
Intrusive (must implement EJB interfaces)
Complex
•
•
Home/Remote/Local/LocalHome interfaces
Deployment descriptors
Non-intuitive
Oracle Consulting – Java Professional Community – 29 augustus 2005
3
The future of EJB…
Spilling the beans…
EJB 3.0 will embrace simplicity
Based on POJO/POJI (? Well, maybe)
Employ dependency injection instead of LDAP
Declarative services (transactions, security) will be
aspects
Entity beans will be POJOs, persisted via Hibernatelike framework
Oracle Consulting – Java Professional Community – 29 augustus 2005
4
The future is NOW!
Spring is a lightweight container framework
Build applications based on POJO/POJI.
Wire beans together using dependency injection.
Declaratively apply transactions and security using
aspect.
Integrates cleanly with Hibernate for persistence.
EJB 3.0=Spring + Hibernate + Metadata
Oracle Consulting – Java Professional Community – 29 augustus 2005
5
Spring History
J2EE Design and Development – by Rod
Johnson, 2002
Introducing the i21 framework
First release of Spring: Spring 2004
Spring 1.2.4: August 2005
Open Source
Interface21 – small company with
most core committers
Contributions from Oracle and other
parties
Spawned many sub-projects
Oracle Consulting – Java Professional Community – 29 augustus 2005
6
Power to the POJO
IoC (Dependency Injection)
Oracle Consulting – Java Professional Community – 29 augustus 2005
7
Spring’s modules
Oracle Consulting – Java Professional Community – 29 augustus 2005
8
What’s more…
Remoting support via RMI, JAX-RPC, and
Hessian/Burlap
Metadata (ala, JSR-175 or Commons Attributes)
Persistence via TopLink, Hibernate, JDO, or iBatis
support
E-mail support
EJB support
JMX Support (Spring 1.1)
JMS support
Spring Rich Client Platform (Spring 1.1)
Spring .Net
Oracle Consulting – Java Professional Community – 29 augustus 2005
9
Spring is HOT!
Oracle Consulting – Java Professional Community – 29 augustus 2005
10
Many books available
J2EE without EJB
The starting point
Spring Live
Pro Spring
Spring in Action
Professional Spring Development
By The Team
Oracle Consulting – Java Professional Community – 29 augustus 2005
11
Spring Home:
http://www.springframework.org
Oracle Consulting – Java Professional Community – 29 augustus 2005
12
Core Spring
Inversion of Control & Dependency Injection
Oracle Consulting – Java Professional Community – 29 augustus 2005
13
Coupling
Highly coupled code is…
Hard to test
Hard to maintain
Exhibits “whack-a-mole” style bugs
•
Here one pops up, when you solve it, another one appears
Uncoupled code is…
Code that doesn’t do anything
Coupling is somewhat necessary…
…but should be controlled
Oracle Consulting – Java Professional Community – 29 augustus 2005
14
Dependency Injection
The “Hollywood Principle”: Don’t call me, I’ll call
you.
Collaborators aren’t asked for…they’re received.
Also known as “Dependency Injection”, thanks to
Martin Fowler.
Oracle Consulting – Java Professional Community – 29 augustus 2005
15
Benefits of IoC
Objects are more cohesive because they are no
longer responsible for obtaining their own
collaborators.
When used with interfaces, code is very loosely
coupled.
Oracle Consulting – Java Professional Community – 29 augustus 2005
16
Elements of a Spring app
Beans
Not EJBs. Actually, not necessarily JavaBeans. Just
POJOs
Bean wiring
Typically an XML file.
A bootstrap class
A class with a main() method.
A servlet.
The bootstrap class uses a BeanFactory (or IoC
Container) to retrieve POJOs
That have been ‘wired’ and ‘dependency injected’
Oracle Consulting – Java Professional Community – 29 augustus 2005
17
IoC Container in Action
Application Class needs POJOs
POJO 2
POJO 1
xml
IoC Container
POJO 3
pojo 1
pojo 2
getBean(“POJO1”)
pojo 3
Application
Oracle Consulting – Java Professional Community – 29 augustus 2005
18
IoC Container in Action
Application Class needs POJOs
HrmService
xml
HrmServiceImpl
IoC Container
employeeDao
getBean(“hrmService”)
EmpDAO
hrmService
EmployeeJdbcDAO
dataSourceDBDirect
DriverManagerDataSource
Oracle Consulting – Java Professional Community – 29 augustus 2005
DataSource
HrmClient
19
Wiring beans in XML
Root elements is <beans>
Contains one or more <bean> elements
id (or name) attribute to identify bean
class attribute to specify class
The bean’s ID
<beans>
<bean id=“foo”
class=“com.habuma.foobar.Foo”>
<!-- Properties defined here -->
</bean>
</beans>
Oracle Consulting – Java Professional Community – 29 augustus 2005
The bean’s fullyqualified classname
20
Wiring a property
Use <property> element
name attribute specifies name of property
<beans>
<bean id=“foo”
class=“com.habuma.foobar.Foo”>
Maps to a setBar() call
<property name=“bar”>
<!-- Property value goes here -->
</property>
</bean>
</beans>
Oracle Consulting – Java Professional Community – 29 augustus 2005
21
Property values
Strings and numbers:
<property name=“bar”><value>42</value></property>
<property name=“bar”><value>Hello</value></property>
Null
<property name=“bar”><null/></property>
Lists and arrays:
<property name=“bar”>
<list>
<value>ABC</value>
<value>123</value>
</list>
</property>
Oracle Consulting – Java Professional Community – 29 augustus 2005
22
Property values
Sets:
<property name=“bar”>
<set>
<value>ABC</value>
<value>123</value>
</set>
</property>
Maps:
<property name=“bar”>
<map>
<entry key=“key1”><value>ABC</value></entry>
<entry key=“key2”><value>123</value></entry>
</set>
</property>
Oracle Consulting – Java Professional Community – 29 augustus 2005
23
Property values
Property sets:
<property name=“bar”>
<props>
<prop key=“prop1”>ABC</prop>
<prop key=“prop2”>123</prop>
</set>
</property>
Other beans:
<property name=“bar”>
<ref bean=“bar”/>
</property>
Oracle Consulting – Java Professional Community – 29 augustus 2005
24
Auto-wiring
You can auto-wire…
“byName”: Property names are matched to bean
names
“byType”: Property names are matched to bean types
“constructor”: Pico-like constructor wiring. Like
“byType” except using constructor.
“autodetect”: Uses reflection to decide whether to
use “byType” or “constructor”
Oracle Consulting – Java Professional Community – 29 augustus 2005
25
Auto-wiring
<bean id=“foo”
class=“com.habuma.foobar.Foo”
autowire=“byName”/>
<bean id=“foo”
class=“com.habuma.foobar.Foo”
autowire=“byName”>
<property name=“bar”><value>bar</value></property>
</bean>
<beans default-autowire=“byType”>
<!-- Bean definitions go here -->
</beans>
Oracle Consulting – Java Professional Community – 29 augustus 2005
26
BeanFactory vs. ApplicationContext
A BeanFactory is the Spring container.
Loads beans and wires beans together.
Dispenses beans as requested.
XmlBeanFactory is the most commonly used.
An ApplicationContext is a BeanFactory, but adds
“framework” features such as:
I18N messages
Event notification
Oracle Consulting – Java Professional Community – 29 augustus 2005
27
IoC Examples
Oracle Consulting – Java Professional Community – 29 augustus 2005
28
Example of a IoC based programming
Oracle Consulting – Java Professional Community – 29 augustus 2005
29
Core Spring
Aspect Oriented Programming
AOP – a programming technique that promotes
separation of concerns within a software system
Recurring – often infrastructural – concerns can easily be
duplicated
in many objects
Security
Transaction
Management
Logging
Profiling
AOP suggests
separation
Concerns are applied
at compile or run-time
Oracle Consulting – Java Professional Community – 29 augustus 2005
32
AOP in a nutshell
Aspect: A modularization of a cross-cutting concern. Implemented in
Spring as Advisors or interceptors
Joinpoint: Point during the execution of execution.
Advice: Action taken at a particular joinpoint.
Pointcut: A set of joinpoints specifying where advice should be
applied.
Advisor: Fully represents an aspect, including both advice and a
pointcut.
Introduction: Adding methods or fields to an advised class.
Weaving: Assembling aspects into advised objects.
Oracle Consulting – Java Professional Community – 29 augustus 2005
33
Without AOP
Oracle Consulting – Java Professional Community – 29 augustus 2005
34
With AOP
Oracle Consulting – Java Professional Community – 29 augustus 2005
35
Implementing AOP
Compile time – modify the source code during compilation
Requires a customized Java Compiler
For example AspectJ; Spring does not do compile time AOP
Run time – byte injection
Change the class when loaded, generating a subclass that
contains the aspects
Uses CGLib library
Run time – using the JDK 1.3 Dynamic Proxy
Instead of getting an object instance, the application receives a
proxy object
The proxy implements the same interface
•
•
And maybe something else as well
Besides, it can intercept and wrap method calls
Oracle Consulting – Java Professional Community – 29 augustus 2005
36
IoC Container hides AOP implementation
from POJO consumer
Aspect A
Proxy
invoke()
xml
target=
pojo1Impl
pojo1 =
proxy
Target
intercept
orNames
=>
AspectA,
AspectB
Aspect B
target
Pojo1Impl
before()
implements
IoC Container
implements
POJO 1
(interface)
getBean(“POJO1”)
Application
AspectA
AspectB
Oracle Consulting – Java Professional Community – 29 augustus 2005
37
Different types of Advice
Before advice
Calls to advised methods are intercepted before the method is called.
After returning advice
Calls to advised methods are intercepted after a successful return.
After throws advice
Calls to advised methods are intercepted after an exception is thrown.
Around advice/interception
Calls to advised methods are intercepted. Call must be explicitly made to target
method.
Introduction advice
Allows a class (or rather its proxy) to implement additional interfaces
Calls to methods are intercepted…even when the target bean doesn’t have the
method!
•
Actually, just a special case of around advice
Oracle Consulting – Java Professional Community – 29 augustus 2005
38
Creating Advise
Create a class that implements one or more of
the Spring AOP interfaces
MethodInterceptor
BeforeAdvice
AfterReturningAdvice
ThrowsAdvice
Implement the interface method
before (Method method, Object[] args)
afterReturning(Object returnValue, Method method,
Object[] args)
invoke(MethodInvocation invocation)
Oracle Consulting – Java Professional Community – 29 augustus 2005
39
Defining Pointcuts in Spring
(specify where to apply which Advice)
Programmatically
No BeanFactory required
Can be used independently of the rest of Spring
Declaratively
In the bean container configuration file
(applicationContext.xml)
Oracle Consulting – Java Professional Community – 29 augustus 2005
40
Applications of AOP by Spring itself
always in conjunction with IoC/DI
Remoting Support
Proxy references a remote object
Transaction Management
Service method is wrapped in around advice that
opens and closes the transaction
Security
JMX
Proxy implements the MBean interfaces for its target
object
Mock Testing
Tested objects are injected with Mock objects that are
dynamically created (made up)
Oracle Consulting – Java Professional Community – 29 augustus 2005
41
Future of AOP – according to Rod Johnson
Programming Aspects and composing an
Application from Aspects will become widely
accepted
Various orthogonal concerns can be dealt with in
parallel
Maintaining a single – cross application concern – is
done by maintaining a single aspect
Tool and Runtime support for AOP will further increase
Development of IBM WebSphere & WSAD is
heavily done in an AOP fashion
Oracle Consulting – Java Professional Community – 29 augustus 2005
45
Spring’s recommended
Application Guidelines and Architecture
Program against interfaces
For example Service Interface, DAO Interfaces
Typically no interfaces for Domain Classes
No configuration “plumbing” in your classes
Have configuration details injected
Domain Classes are used through all tiers
No Struts ActionForms to wrap domain classes
Controllers use Business Service methods to create or
manipulate Domain Objects
Practice “Test driven development”
Oracle Consulting – Java Professional Community – 29 augustus 2005
46
Spring’s recommended architecture
Presentation Tier
View Components
Generate HTML or PDF
Remote Service Exporters
Web Tier Actions
Using SOAP, RMI, JAX-RPC etc.
(Controllers)
Business Tier
Business Services Layer
Interfaces and Container Managed
Implementations
Data Tier
DAO Interface Layer
Interfaces, independent of
implementing DAO Technology
DAO Implementation layer
Retrieves, saves entities using ORM tool or JDBC
JDBC
Oracle Consulting – Java Professional Community – 29 augustus 2005
RDBMS
JDBC
O/R Mapping Layer
Persistent
Domain
Objects
47
Spring and Test Driven Development
Agile Software Engineering methods, such as XP
First design and develop a test based on
interfaces
Before implementing the interfaces
Before starting to resolve a bug
Automated Unit Testing for every class in the
application
At every stage of development, the test can be rerun!
Unit Testing usually based on JUnit
Great integration in Eclipse and JDeveloper 10.1.3
(10.1.2 is somewhat sparse)
Oracle Consulting – Java Professional Community – 29 augustus 2005
48
Spring and Test Driven Development
Challenges include
Container Dependencies (HttpServlet object)
Dependencies on external objects (not a unit test)
•
Especially objects that are hard to configure, e.g. DAO Impl
Dependencies on objects that have not yet been
implemented
Oracle Consulting – Java Professional Community – 29 augustus 2005
49
Spring support for Test Driven Development
When all objects (Service and DAO Impl) are
Spring Beans
They get dependency injected by the container
During a test, instead of injecting them with real
objects
We can inject them with Mock Objects, that will return
the values we specify when called
The real objects do not need to exist
•
even when they do exist, using mock objects ensures we are
performing a true UNIT test
Oracle Consulting – Java Professional Community – 29 augustus 2005
50
Unit Testing HrmServiceImpl
using Mock objects
Unit Test
HrmServiceTest
(JUnit TestCase)
MockEmployeeDAOImpl
Business Tier
HrmServiceImpl
Data Tier
EmployeeDAO
Interfaces, independent of
implementing DAO Technology
EmployeeDAOImpl
(does not yet exist)
Oracle Consulting – Java Professional Community – 29 augustus 2005
Persistent
Domain
Objects
51
Testen en MockObjects
public class TestEmployeeDao
extends AbstractDependencyInjectionSpringContextTests
{
private EmployeeDao employeeDAO;
public void setEmployeeDAO(EmployeeDao employeeDAO)
{
this.employeeDAO = employeeDAO;
}
protected String[] getConfigLocations() {
return new String[]
{"nl/amis/demo/dao/jdbc/applicationContext-jdbc.xml"};
}
public void testFindEmployeeById ()
{
Employee emp = employeeDAO.getEmployeeById(7839);
assertEquals("KING", emp.getName());
assertEquals("PRESIDENT", emp.getJob());
// ...
}
<bean id="employee7839"
class="nl.amis.demo.domain.Employee">
<property name="name" value="KING" />
<property name="employeeNumber" value="7839" />
<property name="job" value="PRESIDENT" />
</bean>
}
<bean id="employeeMockDAO"
class="nl.amis.demo.dao.EmployeeMockDao">
<property name="emp">
<ref local="employee7839" />
</property>
</bean>
Oracle Consulting – Java Professional Community – 29 augustus 2005
52
Properly implementing those Mock DAO
objects
Spring JDBC and Spring DAO
Oracle Consulting – Java Professional Community – 29 augustus 2005
53
Doelen van Spring JDBC
Database acties
SQL (Select en Manipulatie)
Procedural (stored procedure calls)
Flexibel
Externe configuratie van data source
Geen Checked Exceptions
Out of container testen
Database onafhankelijk
Gecontroleerd
Exception handling
Connection leaking/connection pooling
Productief
Geen herhaling van code (tcftc)
Vereenvoudigen van Transaction Management
Oracle Consulting – Java Professional Community – 29 augustus 2005
54
Architectuur
Domain
Object
Domain
Object
Domain
Object
JNDI
Service
DAO
Oracle Consulting – Java Professional Community – 29 augustus 2005
55
Example
import java.sql.*;
import javax.sql.*;
public class EmpDao {
public List getAllEmployees() {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List emps = new ArrayList();
try {
con = getConnection();
pstmt = con.prepareStatement
("select * from emp");
rs = pstmt.executeQuery();
while (rs.next()) {
Employee e = new Employee();
e.setId
(rs.getLong(1));
e.setName (rs.getString(2));
// ...
emps.add(e);
}
} catch (SQLException e) {
// handle exception
} finally {
try {
rs.close();
pstmt.close();
con.close();
} catch (SQLException e1) {
// no action needed
}
}
return emps;
}
}
private Connection getConnection() throws SQLException
{
try {
Context ic = new InitialContext();
DataSource ds =
(DataSource) ic.lookup
("java:comp/env/jdbc/myDatabase");
return ds.getConnection();
}
catch (NamingException e) {
// handle exception
return null;
}
}
Oracle Consulting – Java Professional Community – 29 augustus 2005
private Connection getConnection() throws SQLException
{
try {
DriverManager.registerDriver
(new oracle.jdbc.driver.OracleDriver());
return DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl“
,"scott", "tiger");
} catch (SQLException sqle) {
// handle exception
return null;
}
}
56
Template Pattern
Operation largely follows a standard algorithm
At certain steps, specialization or customization is
required
Several implementations
Abstract ‘hook’ methods that sub-class may override
Parametrize behaviour and have invoker provide the
details
•
Such as the SQL Query
Spring JDBC Templates
Implement all JDBC wiring
Parametrize the query and the result-handling
Oracle Consulting – Java Professional Community – 29 augustus 2005
57
Example of Spring JDBC Template
public interface empDao {
public List getAllEmployees ();
}
public class EmployeeJdbcDao extends JdbcDaoSupport implements EmpDao {
public List getAllEmployees() {
JdbcTemplate jt = getJdbcTemplate();
return jt.queryForList (“select * from emp”);
}
}
<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:BAARSJES1" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</bean>
<bean id="employeeDAO" class="nl.amis.demo.dao.jdbc.EmployeeJdbcDao" >
<property name="dataSource">
<ref local="dataSourceDBDirect" />
</property>
</bean>
Oracle Consulting – Java Professional Community – 29 augustus 2005
58
jdbc helper classes
JdbcTemplate
query, queryForList, queryForInt, queryFor..
ArrayList (per row) of HashMaps (column name as
key)
RowMapper
PreparedStatementCreator/Callback
MappingSQLQuery
...
Oracle Consulting – Java Professional Community – 29 augustus 2005
59
How can Spring help?
Make life easier:
DAO Support
JDBC, Hibernate, Toplink, iBatis, JDO,
javax.persistence (“EJB 3.0”) , ...
Dependency Injection
Jdbc helper classes
Exception Handling
MockObjects
Transaction Management
Oracle Consulting – Java Professional Community – 29 augustus 2005
60
Spring Architectuur
Domain
Object
Domain
Object
Domain
Object
DAO
Interface
XXDAO
Support
JdbcDaoSupport
HibernateDaoSupport
TopLinkDaoSupport
...
Service
DAO
ApplicationContext-jdbc
Oracle Consulting – Java Professional Community – 29 augustus 2005
61
Exception Handling
RuntimeException ipv checked SQLException
DataAccessException
SQLException Translation
DataIntegrityViolationException
DataRetrievalFailureException
CannotGetJdbcConnectionException
...
Oracle Consulting – Java Professional Community – 29 augustus 2005
62
Spring and Web Applications
Struts and other Controller Frameworks
Struts support
Auto-Load WebContext (== BeanFactory) in session
Make Action Classes Spring aware and have them
reference the WebContext
Proxy Action Classes
and Dependency
Inject them
•
Register Actions
as Spring Beans
Similar support for
WebWork
Tapestry
Oracle Consulting – Java Professional Community – 29 augustus 2005
63
Spring and Web Applications
Java Server Faces
Java Server Faces
JSF has managed-beans
Very similar to Spring Beans
Though no support for AOP
And: do you want low level, persistency related
configuration details in the faces-config.xml
JSF-Spring project offers a JSF variable resolver
It takes bean references in faces-config.xml and tries
to resolve them in Spring context files
Oracle Consulting – Java Professional Community – 29 augustus 2005
64
Spring and Web Applications
Spring MVC Controller Framework
Positioned to replace Struts
Better, more intuitive, modern architecture
Full benefits from IoC and AOP
Works with (these are all Spring Beans)
Controllers – that process the request, update and prepare the
Model; they also return a result, a symbolic indication of the
ModelView to proceed to
ViewResolvers –
that decide which
View to let render
ViewBeans – that
wrap View Components
such as JSP, Velocity
Template, FreeMarker
page
Oracle Consulting – Java Professional Community – 29 augustus 2005
65
Spring MVC Controller Framework
Support for various View technologies
JSP – using the Spring tag-library (very small,
primarily use JSTL)
FreeMarker
Velocity
Tiles
File Download
Excel – using Apache POI
PDF – using iText
XSL-T
JasperReports
Oracle Consulting – Java Professional Community – 29 augustus 2005
66
Spring Remote
Support for distributed applications
Spring’s number one concept concerning remote,
distributed objects (take from Martin Fowler):
Do NOT distribute!!!
However, in certain circumstances you probably
have to
Cross organizational boundaries
Rich Clients
Remote process
accessing
back-end server
Oracle Consulting – Java Professional Community – 29 augustus 2005
67
Spring’s Remote Façade Philosphy
Remote access
for example supporting remote clients over RMI or
publishing a WebService
should be regarded as an alternative presentation
layer
no different from an standard Browser oriented HTML
interface
On well-defined middle tier service interfaces
that are blissfully unaware that they are exposed and
consumed remotely
Remoting infrastructure – for example Data
Transfer Objects – should be added on top of the
well defined, OO, fully POJO based service
Oracle Consulting – Java Professional Community – 29 augustus 2005
68
Spring support for “remoting”
Spring will
Declaratively expose Service interfaces for remote
clients
Declaratively expose remote Service interfaces for
local clients
Support for these protocols:
RMI
Caucho’s Hessian and Burlap
Spring’s own HttpInvoker
EJB
SOAP (based on JAX-RPC, using AXIS or XFire)
Oracle Consulting – Java Professional Community – 29 augustus 2005
69
Exposing Service to remote clients
ClientCode
Proxy for Service
(generated by BeanFactory)
Service Interface
Spring Exporter
Service
Implementation
Oracle Consulting – Java Professional Community – 29 augustus 2005
70
Spring Exporters
Declaratively set up in the configuration file
Using a specific protocol
Spring Service Exporter
defines an End Point where the Service can be
invoked
•
typically linked to a port
translates incoming remote calls to local calls
•
•
unmarshalling parameter values
marshalling return values and exceptions
Spring Exporter often works with Spring Remote
Client
Oracle Consulting – Java Professional Community – 29 augustus 2005
71
Details from Server and Client side
BeanConfiguration files
Server Side – HttpInvoker Protocol Exporter
Client Side – HttpInvoker Protocol proxy creator
Oracle Consulting – Java Professional Community – 29 augustus 2005
72
Extra Features
JMX – proxy Spring Beans to register them as
MBeans
JMS
Email
JNDI
Scheduling (Quartz)
Transaction Management
Oracle Consulting – Java Professional Community – 29 augustus 2005
73
Spring and the Oracle Java Technology Stack
Spring DAO has TopLink support
Since Spring 2005, contributed by Oracle
Spring based POJO business service can be registered
with ADF Binding Framework
Ideally we can have the registration mechanism honor the
ApplicationContext origin of the Service Object
Question: how does ADF currently instantiate its Business
Services?
Spring DAO for ADF BC seems pointless
ADF BC is already pretty much wrapped – the API is already fairly
high level
The Configurations (bc4j.xcfg) provide a level of decoupling and
dependency injection
Spring DAO focuses on POJO – ADF BC does not
Oracle Consulting – Java Professional Community – 29 augustus 2005
74
Spring and the Oracle Java Technology Stack
Spring MVC on ADF BC Business Service could be done
though a lot of the natural benefits are lost
UIX could be used with Spring MVC as View technology
losing the Struts ADF LifeCyle management
Shortly ADF Faces can be used with Spring MVC as well
Spring Remoting can be used to publish and consume
Somewhat overlapping with JDeveloper WebServices support
Spring AOP could be applied to ADF BC objects
If we can find the right hook – does not seem easy!
Oracle Consulting – Java Professional Community – 29 augustus 2005
75
Sub Projects and initiatives around Spring
Spring Security
Spring IDE (for Eclipse)
Spring Rich Client
Spring Modules & Spring WebFlow
Spring BeanDoc
Spring .NET – by Rod Johnson et. al.
Focus on C#
JSF-Spring
XDoclet – Spring Bean Configuration generator
Aurora MVC Framework
More support for Persistency OO/R Frameworks
EJB 3.0…
Oracle Consulting – Java Professional Community – 29 augustus 2005
76
Discussion
Ik lust
eigenlijk nu
ook wel een
kop koffie…
Oracle Consulting – Java Professional Community – 29 augustus 2005
77