|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchestraScope
org.apache.myfaces.orchestra.viewController.spring.SpringViewControllerScope
public class SpringViewControllerScope
This hooks into the Spring2.x scope-handling mechanism to provide a dummy scope type which will place a bean configured for it into the same conversation that the current viewController lives in.
To use this, in the spring config file add an element with id=N that defines a spring scope with this class as its controller. Then define managed beans with scope="N". When code references such a bean, then the current "view controller" bean is located (ie the bean handling lifecycle events for the current view), and the instance of the target bean from the same conversation is returned. If no such instance currently exists, then one is created and added to that conversation (even when an instance already exists in a different scope).
Note that this means a bean configured with a scope of this type will actually have a separate instance per conversation.
In particular, this works well with spring aop-proxy, where the proxy looks up the bean on each method call, and so always returns the instance in the conversation associated with the current view.
One use for this is implementing custom JSF converters or validators that access persistent objects. When accessing the database they need to use the same PersistenceContext that the beans handing this view use. Defining the converter using this scope type ensures that this happens.
It is an error (ie an exception is thrown) if a bean of this scope is referenced but there is no "view controller" bean associated with the current view.
Constructor Summary | |
---|---|
SpringViewControllerScope()
|
Method Summary | |
---|---|
protected void |
assertSameScope(String beanName,
Conversation conversation)
Verify that the specified conversation was created by this scope object. |
Conversation |
createConversation(ConversationContext context,
String conversationName)
|
String |
getConversationNameForBean(String beanName)
Find the conversation-controller bean for the current view, then return the conversation that is configured for that controller bean. |
Methods inherited from class org.apache.myfaces.orchestra.conversation.spring.AbstractSpringOrchestraScope |
---|
buildBeanName, defineBeanPostProcessors, get, getAdvices, getApplicationContext, getConversationForBean, getConversationId, getExplicitConversationName, getProxy, getRealBean, notifyAccessConversation, registerDestructionCallback, remove, setAdvices, setApplicationContext, setAutoProxy, setBeanFactory |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public SpringViewControllerScope()
Method Detail |
---|
public Conversation createConversation(ConversationContext context, String conversationName)
protected void assertSameScope(String beanName, Conversation conversation)
AbstractSpringOrchestraScope
assertSameScope
in class AbstractSpringOrchestraScope
beanName
- is just used when generating an error message on failure.conversation
- is the conversation to validate.public String getConversationNameForBean(String beanName)
The parameter is completely ignored; the conversation-name returned is that associated with the controller bean, not the specified bean at all.
getConversationNameForBean
in class AbstractSpringOrchestraScope
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |