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.AnnotationSessionFactor 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]