That's great! Thank you very much. Michael
> -----Original Message----- > From: Hickman, Craig [mailto:[EMAIL PROTECTED] > Sent: Friday, May 04, 2007 1:18 PM > To: 'axis-user@ws.apache.org' > Subject: RE: Appropriate place for transaction code? > > > One way you could do this is to just use Spring's api, or you > could inject > it yourself as in: > > Now for specific injection (unrelated to above) of SessionFactory: > > <?xml version="1.0" encoding="UTF-8"?> > <beans> > > <bean id="<your name>" class="org.example.impl.HibernateExample"> > <property name="sessionFactory" ref="sessionFactoryBean"/> > </bean> > > <bean id="sessionFactoryBean" > class="org.springframework.orm.hibernate3.annotation.Annotatio > nSessionFactor > yBean"> > <property name="dataSource" ref="dataSource"/> > <property name="annotatedClasses"> > <list> > <value>org.example.ExampleBean</value> > </list> > </property> > <property name="hibernateProperties"> > <value> > hibernate.dialect=org.hibernate.dialect.HSQLDialect > hibernate.show_sql=true > </value> > </property> > </bean> > > </beans> > > Also a good article for Session injection: > > http://unitils.sourceforge.net/spring_article.html > > Also roll your own beans too: > > Let's say you wanted to inject the datasource. Create a util > class using a > synchronized singleton and then add your method as private for the > appContext lookup (this can also be done for your own beans > using a factory > method as well): > > private final static DataSource getDataSource() { > ApplicationContext ctx = new > ClassPathXmlApplicationContext(WSConstants.APPLICATION_CONTEXT ); > DataSource ds = (DataSource)ctx.getBean("ds"); > > return ds; > } > > Then add your public method: > > public ExampleDaoImpl getExampleDS() { > ExampleDaoImpl dataSupport = new ExampleDaoImpl(); > dataSupport.setDataSource(getDataSource()); > return dataSupport; > } > > ----------------------- > > Now for injection of your own beans: > > Create a bean xml and add this to it and place it in WEB-INF > (later use ant > to place it in build directory and classes, because it will > be referenced > from the classpath using a specialized method): > > -------- start of xml ---------- > <?xml version="1.0" encoding="UTF-8"?> > <!DOCTYPE beans SYSTEM > "http://@TLD_HOST_WEB_SERVER@/dtd/spring-beans.dtd"> > <beans> > > <!-- The factory bean, which contains a method called create<..> --> > <bean id="<exampleBeanFactory>" class="com.<your > path>.services.core.ExampleBeanFactory"/> > > > <!-- The bean to be created via the factory bean --> > <bean id="SsoBO" > factory-bean="exampleBeanFactory" > factory-method="createExampleBO"/> > > </beans> > ---------- end of xml ------------- > > Now create two classes: > > > public interface AbstractBeanFactory { > > public ExampleBO createExampleBean(); > > } > > public class ExampleBeanFactory implements AbstractBeanFactory { > > > public ExampleBean createExampleBean(){ > return new ExampleBean(); > } > > > } > > //--- utility method > public Object getBean(String bean) { > ClassPathResource res = new > ClassPathResource("beans.xml"); // lookup your bean > XmlBeanFactory factory = new XmlBeanFactory(res); > Object obj = factory.getBean(bean); > > return obj; > } > > > Then I can create the instance ( I used a service bean helper > ), and call > the utility method in the init: > > private ServiceBeanHelper() { > super(); > > this.setSsoBO((SsoBO)utils.getBean(WSConstants.EXAMPLE_BEAN > )); > } > > .... > > > > > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] > Sent: Thursday, May 03, 2007 2:26 PM > To: axis-user@ws.apache.org > Subject: Appropriate place for transaction code? > > Hi, > > I'm new to Axis. I'm using Axis2 1.1.1. > > I'm creating a service that retrieves data from a database. I'm using > Hibernate. For those of you not familiar with it, the basic > pattern of usage > is that you create something called a SessionFactory once when the > application starts, and then for each request/response cycle > you create a > Session. When the response finishes, you commit the session. > > In regular web applications I create the session factory in the > ApplicationContext. Then I make a servlet filter that creates > the session > and starts a transaction on the way in, and then commits the > transaction and > closes the session on the way out. > > I'm trying to figure out how to do this in Axis. I created a > module called > hibernateTransactionModule. I've got two handlers, one for > the way in and > one for the way out, each attached to a new phase. Right now > they're just > saying 'hello world' and it works, they do execute when I > expect them to. > > So I've got three classes: > > HibernateTransactionModule implements org.apache.axis2.modules.Module > HibernateTransactionHandlerBegin extends AbstractHandler > implements Handler > HibernateTransactionHandlerEnd extends AbstractHandler > implements Handler > > My intuition tells me that HibernateTransactionModule.init() > would be the > appropriate place to create the hibernate session factory, > HibernateTransactionHandlerBegin.invoke() could create a session for a > request and put it into the messageContext, and > HibernateTransactionHandlerEnd.invoke() could commit the > transaction and > close the session. > > But I can't see a place where I can store the session factory > where it can > be accessible to the handlers. > > One possibility would be to use a static field in > HibernateTransactionHandlerBegin but that would be an ugly hack. Any > suggestions? > > Thanks > Michael Davis > www.damaru.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]