Transaction Management
ACID-Atomic,Consistent,Isolated,Durable
Only way to handle transaction is hold on to the same connection –only way of doing it.
JTA – not good , scalability becomes difficult .
Ex: EBay – develop undo behaviour –compensatory action – 3rd part its the only option- for every method need a undo method.
Can use any datasource – no need to tieing it to spring jdbc datasource
Lots of transaction management – datatSourceTransactionMgr,HibernateTransactionMgr,Jps…,Jta..
Connection pool – use apache DBCP or c3p0
<tx:annotation driven> - registering for annotations
<bean id=”transactionManager” class=”…:> … datasource as property </>
transactionManager – should be the name – else have to explicitly mention in the <tx:annotation ……transaction manger=””.>
@Transactional at class level – all public method(because proxy sees only public method) will be transactional
Can have timeout – default is 60 secs
Datasource , transaction – better use xmls – infrastructure components (Aspects annotation are better)
Xml based approach - define transaction mgr, then define transaction interceptor- <tx:advice… > define pointcut
Tx:advice – is just used for overiding , not required
Xml approach advantage - can take these point cut definition from property files.
Set isolation levels – else though not committed , one thread can see the other
For recursive methods with @transaction – the same transaction context will be used.
Transaction Propagation – Propagation.REQUIRES_New – new one transaction context will be created per transaction.
So for iterative ones – if inner @Transaction is marked for required_new ,inner one will be committed irrespective of the other.
Can avoid rollback –with noRollBack option
Annotations
---------------
@Autowired –field level ,method level and constructor level
<context:annotation-config/>
@Autowired default by Type .-for all auto wired injections including and filed injections.
@Autowired
Test x; though x is name of any bean it will look for type Test.
@Autowired for field injection – Doesnt require setters.
Multiple types or no types will give error.
@Autowired not only for setter – for any method,field,constructor
Autowired for collections – List<Types> - all these types will be autowired into the list.
@Autowired(required=false) – does not fail when no type is found
@Qualifier – filtering when injecting by type – properties have to be mentioned in the bean
[default is name – when no name for bean is mentioned it is taken as id- That is why we say ctx.getBeanByName() and still use id it works]
@Resource –JSR 250 – injection by name – equivalent to ref in xml – not specific to Spring its in JSR 250
@Resource – also for JNDI references
@Component - alternative for writing bean definition in xml can be use with @Scope
@Component can also have bean name-else classname will be taken as bean name with first letter as small letter
<context:component scope> is required to identify components. – no need for annotation config as this is a superset of it.
<context:component scope> - can have filters – includes , excludes etc – without this Component will not work
Component scanner is above annotation processor. – so need to register annotation processor when using component scanner.
@value annotation will work with spring 3.0 – no support in spring 2.5
Both xml and annotation beans - if they have same name xml will override annotations , if the bean names are different 2 instances will be created.
Testing
-----------
Junit 4 – has annotations
Test runner - @Runwith (SpringJunit4ClassRunner.class)
@ContextConfiguration - with location of appContext.xml
Follow naming convention to avoid giving location - <testcasename>-context.xml
In case we need access to applicationCtx beans write private field and write @Autowired over it.
Name of bean if annotated with @Component –same as class name with first letter as small letter
With map it will put key as bean name when autowired.
@autowire with qualifier is very useful
Stubs and Mocks are different
Mock libraries - EasyMock,Jmock ,Mokito
Mockito: http://mockito.org/
Example with mockito – works by proxy- how to ensure method is called n number of times
During db tests – data inserted is automatically deleted , default can override if required.
SpringWeb
------------------
Web Layer should be very thin layer speaking to the backend service layer.
Spring Web Flow - Same url will be used , server maintains a state based on which flow will continue.
ContextLoadListener in web.xml - Root ApplicatonContext
WebApplicationContextLoader - register in servletContext – For WebApplicationContext
Using DispatcherServlet
2 contexts , RootApplicationContext and WebApplicationContext.
Web (DispatcherServlet) context can rootContext but not the other way round.
Spring MVC – annotation suited
WebApplicationContextUtils – static helper for accessing spring beans in web context.
Processing Flow -> Request -> Dispatcher Servlet -> Handler (Controller) -> Result View(send to DispatcherServlet) -> View
@Controller- equivalent to struts actions classes but can have multiple mapping for different url’s per method inside it.
@RequestMapping -for mapng urls
@RequestParam – mapping fields from HttpRequest.
Controller returns View name – default is path to jsp page
If controller returns null – then default view based on request url.
DispatcherServlet delegates to viewResolver to map returned view names to view implementations.
Default View resolver treats view name as Web –App relative path.
View Resolver – can take prefix and suffix as params.
If returned as string from handler – its taken as a view name
Saturday, November 7, 2009
Spring Training -Day 3
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment