onsdag 23 mars 2011

Hotswappa sessioncontext i en ejb2-böna med spring.

Eftersom jag för andra gången glömde bort hur man sätter upp en fin liten hotswappable target source för att swappa in sessionskontextet i en gammal böna tänkte jag att jag lägger upp en liten komihåg på det nu.

Först tar vi och lägger till ett target i sessionsbönan vi ska swappa den från:

public class Bean extends AbstractStatelessSessionBean implements SessionBean {
private HotSwappableTargetSource sessionContextTarget;
protected void onEjbCreate() throws CreateException {
BeanFactory beanFactory = getBeanFactory();
sessionContextTarget = = (HotSwappableTargetSource) beanFactory.getBean("hotswappableSessionContext");
}
}

samt att vi lägger till själva swappen i set-metoden:
@Override
public void setSessionContext(SessionContext sessionContext) {
super.setSessionContext(sessionContext);
this.sessionContextTarget.swap(sessionContext);
}

Därefer passar vi på att konfigurera den i springxmlen,

<bean id="sessionContextBean" class="nu.danielsundberg.FejkSessionContext"/>
<bean id="hotswappableSessionContext" class="org.springframework.aop.target.HotSwappableTargetSource">
<constructor-arg><ref local="sessionContextBean"/></constructor-arg>
</bean> 

lägger till den injectad i vår andra böna vi vill ha access till contextet i
<property name="sessionsContext">
<ref local="sessionContextBean"/>
</property>
och avslutar med att lägga till den i mottagande bönan.
private SessionContext sessionsContext;
public void setSessionsContext(SessionContext sessionsContext) {
this.sessionsContext = sessionsContext;
}

Och bob är min onkel.

Inga kommentarer:

Skicka en kommentar