Trying to use JNDI from hibernate is imho a bad idea. How did you expose the UserTransaction object in the JNDI tree ? have you tried writing your own TransactionFactory for hibernate ? The code is quite simple if you remove all the JNDI bits: http://fisheye.jboss.com/browse/Hibernate/core/trunk/core/src/main/java/org/hibernate/transaction/JTATransactionFactory.java?r=15252 And looking at the above code, I don't really see how you can end up with a StackOverflowError ... Not sure what happens here.
On Thu, Apr 2, 2009 at 14:44, Charles Moulliard <[email protected]> wrote: > That was too beautiful. > > The same error comes back : > > org.hibernate.transaction. > JTATransactionFactory.getUserTransaction(JTATransactionFactory.java:162) > ... > > when I use the following config : > > <property name="jtaTransactionManager"> > <osgi:reference> > <osgi:interfaces> > > <value>org.springframework.transaction.PlatformTransactionManager</value> > <value>javax.transaction.TransactionManager</value> > </osgi:interfaces> > </osgi:reference> > </property> > > > On Thu, Apr 2, 2009 at 1:02 PM, Guillaume Nodet <[email protected]> wrote: > >> The second way should work. >> Your problem is that you're not importing both the TransactionManager >> and PlatformTransactionManager interfaces. >> Take a look at >> http://static.springframework.org/osgi/docs/1.2.0-rc1/reference/html/service-registry.html#service-registry:refs:singular:interface >> >> On Thu, Apr 2, 2009 at 12:16, Charles Moulliard <[email protected]> >> wrote: >> > The Transaction manager in ServiceMix 4 is already a Spring >> > PlaftormTransactionManager, so you should just use this one instead. >> > >> >>> I have tested this option but I receive errors >> > >> > *CASE 1 : using JTA Transaction Manager* >> > >> > <!-- Hibernate SessionFactory Definition --> >> > <bean id="sessionFactory" >> > class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> >> > >> > <property name="mappingLocations"> >> > <list> >> > >> > >> <value>classpath*:META-INF/org/apache/camel/example/reportincident/model/*.hbm.xml</value> >> > </list> >> > </property> >> > >> > <property name="hibernateProperties"> >> > <props> >> > <prop >> > key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> >> > <prop key="hibernate.show_sql">false</prop> >> > <prop key="hibernate.format_sql">true</prop> >> > <prop >> > key="hibernate.cglib.use_reflection_optimizer">true</prop> >> > <prop key="hibernate.jdbc.batch_size">10</prop> >> > <!-- <prop >> > >> key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop> >> > --> >> > </props> >> > </property> >> > <property name="dataSource"> >> > <ref bean="dataSource" /> >> > </property> >> > <property name="jtaTransactionManager"> >> > <osgi:reference >> > interface="javax.transaction.TransactionManager"/> >> > </property> >> > </bean> >> > >> > java.lang.StackOverflowError >> > at >> > com.sun.naming.internal.VersionHelper12$6.run(VersionHelper12.java:165) >> > at java.security.AccessController.doPrivileged(Native Method) >> > at >> > >> com.sun.naming.internal.VersionHelper12.getContextClassLoader(VersionHelper12.java:162) >> > at >> > >> com.sun.naming.internal.ResourceManager.getFactory(ResourceManager.java:339) >> > at javax.naming.spi.NamingManager.getURLObject(NamingManager.java:575) >> > at >> javax.naming.spi.NamingManager.getURLContext(NamingManager.java:533) >> > at >> > >> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:320) >> > at javax.naming.InitialContext.lookup(InitialContext.java:392) >> > at >> > >> org.hibernate.transaction.JTATransactionFactory.getUserTransaction(JTATransactionFactory.java:162) >> > at >> > >> org.hibernate.transaction.JTATransactionFactory.getUserTransaction(JTATransactionFactory.java:172) >> > at >> > >> org.hibernate.transaction.JTATransactionFactory.getUserTransaction(JTATransactionFactory.java:172) >> > at >> > >> org.hibernate.transaction.JTATransactionFactory.getUserTransaction(JTATransactionFactory.java:172) >> > at >> > >> org.hibernate.transaction.JTATransactionFactory.getUserTransaction(JTATransactionFactory.java:172) >> > >> > *CASE 1 : using PlatformTransactionManager*** >> > >> > when I use >> > <property name="jtaTransactionManager"> >> > <osgi:reference >> > interface="org.springframework.transaction.PlatformTransactionManager"/> >> > </property> >> > >> > instead of JTA Transaction Manager >> > >> > I receive the error : >> > >> > s...@root:osgi> Exception in thread "SpringOsgiExtenderThread-40" >> > org.springframework.beans.factory.BeanCreationException: Error creating >> bean >> > with name 'org.springframewo >> > rk.osgi.service.exporter.support.OsgiServiceFactoryBean#0': Invocation of >> > init method failed; nested exception is >> > org.springframework.beans.factory.BeanCreationException: >> > Error creating bean with name 'incidentDAO' defined in URL >> > [bundle://113.2:0/META-INF/spring/spring-dao-beans.xml]: Cannot resolve >> > reference to bean 'sessionFactory' whi >> > le setting bean property 'sessionFactory'; nested exception is >> > org.springframework.beans.factory.BeanCreationException: Error creating >> bean >> > with name 'sessionFactory' def >> > ined in URL >> [bundle://113.2:0/META-INF/spring/spring-datasource-beans.xml]: >> > Initialization of bean failed; nested exception is >> > org.springframework.beans.TypeMismatchExcep >> > tion: Failed to convert property value of type [$Proxy114 implementing >> > >> org.springframework.transaction.PlatformTransactionManager,java.io.Serializable,org.springframework >> > >> .osgi.service.importer.ImportedOsgiServiceProxy,org.springframework.aop.IntroductionInfo,org.springframework.core.InfrastructureProxy,org.springframework.aop.SpringProxy] >> > to required type [javax.transaction.TransactionManager] for property >> > 'jtaTransactionManager'; nested exception is >> > java.lang.IllegalArgumentException: Cannot convert valu >> > e of type [$Proxy114 implementing >> > >> org.springframework.transaction.PlatformTransactionManager,java.io.Serializable,org.springframework.osgi.service.importer.ImportedOsgiSe >> > >> rviceProxy,org.springframework.aop.IntroductionInfo,org.springframework.core.InfrastructureProxy,org.springframework.aop.SpringProxy] >> > to required type [javax.transaction. >> > TransactionManager] for property 'jtaTransactionManager': no matching >> > editors or conversion strategy found >> > at >> > >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338) >> > at >> > >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) >> > at >> > >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) >> > at java.security.AccessController.doPrivileged(Native Method) >> > at >> > >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) >> > at >> > >> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) >> > at >> > >> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) >> > at >> > >> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) >> > at >> > >> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) >> > at >> > >> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) >> > at >> > >> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423) >> > at >> > >> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) >> > at >> > >> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69) >> > at >> > >> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) >> > at >> > >> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) >> > at >> > >> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) >> > at >> > >> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationC >> > ontextExecutor.java:136) >> > at java.lang.Thread.run(Thread.java:619) >> > >> > >> > On Thu, Apr 2, 2009 at 11:42 AM, Guillaume Nodet <[email protected]> >> wrote: >> > >> >> On Thu, Apr 2, 2009 at 11:31, Charles Moulliard <[email protected]> >> >> wrote: >> >> > Could you elaborate a bit please ? >> >> > >> >> >>> My idea is to propose to the users JNDI feature like we have with >> J2EE >> >> > servers. I mean a Web interface and/or configuration that a >> user/deployer >> >> > can use to add entries like DataSource (+ info about DB connection), >> >> > UserTransaction, ... >> >> >> >> As I said, JNDI does not really fit well with OSGi, so for all such >> >> kinds of thing like deploying DataSource, I would rather expose the >> >> service in the OSGi registry. Binding it to JNDI should remain >> >> optional so that users are encouraged to use the OSGi registry >> >> instead. If you use a spring application, it's kinda the same thing >> >> to retrieve the DataSource from JNDI or OSGi, and most of the >> >> applications should be able be given an existing DataSource instead of >> >> retrieving it from JNDI. >> >> >> >> > Do you mean exposing the >> >> > transaction manager in the JNDI tree ? >> >> > >> >> >>> Yes. In this case, we can use the same transaction manager to handle >> >> > commit/rollback between endpoints like JMS, Hibernate or Spring/Beans >> >> using >> >> > JTATransaction Manager. This is not possible today because using >> >> > JTATransaction manager in Spring requires that the transaction manager >> is >> >> > registered in a JNDI context >> >> >> >> The Transaction manager in ServiceMix 4 is already a Spring >> >> PlaftormTransactionManager, so you should just use this one instead. >> >> >> >> > >> >> > Concerning EJB3 >> >> >>> I complety agrees with you : openEJB is an excellent candidate and >> this >> >> > should not be part of SMX Kernel but deployable as an feature and >> >> probably >> >> > in the future available from another instance of SMX using by exampel >> >> remote >> >> > OSGI >> >> > >> >> > Actually, I think we should have a look at the Felix console which >> >> > already provides OSGi management (bundles, services, configurations, >> >> > etc...) and is extensible. >> >> > >> >> >>> I have already deploy it in SMX Kernel. It works except that we can >> >> stop >> >> > the "mandatory bundles" I mean bundles with level < 30 >> >> > The web console should be extended to allow JNDI configuration, log >> >> rotation >> >> > definition, ... (we can have a look to glassfish to compare) >> >> >> >> Maybe that can be enhanced somehow. >> >> >> >> > Clustering is a very large idea. What kind of things would you want >> >> > to cluster ? Web apps ? Camel routes ? >> >> > >> >> >>> My idea is to provide something simple to be used by the user where >> he >> >> > can define in config file : >> >> > - The numbers of instances required (in a first step, we can propose >> that >> >> > the instances are started locally on a machine X and in the second >> step >> >> on >> >> > another machines and interconnected through remote OSGI), >> >> > - Type of clustering : camel loadbalancing, ... (e.g. If camel routes >> >> must >> >> > be copied on each instance or used in a load balancing way ), web (for >> >> web >> >> > farm) >> >> > - Integration type between instances, machines, servers : using >> activemq >> >> as >> >> > queue engine between instances, remote OSGI, ... (be careful about >> >> firewall) >> >> > This question is very complicated because it really depends also of >> the >> >> > architecture like : can we scan same directory from different >> instances >> >> of >> >> > camel-file, ... >> >> >> >> I don't think any of those features is related to ServiceMix Kernel, >> >> rather to ServiceMix 4 as an integration platform. >> >> And as you say, it's quite a difficult thing to achieve. That does >> >> not mean we can't do anything to help users here. >> >> >> >> > >> >> > For the administrator or profiler we need profiling to detect where we >> >> > have memory issues/gaps, .. >> >> > >> >> >>> SMX4 cannot do anything but we should be able to configure SMX + >> java >> >> to >> >> > allow java profiling >> >> >> >> So it's just about documenting that cleanly, as I don't think there is >> >> anything to do. >> >> >> >> > Regards, >> >> > >> >> > Charles >> >> > >> >> > On Thu, Apr 2, 2009 at 11:00 AM, Guillaume Nodet <[email protected]> >> >> wrote: >> >> > >> >> >> On Thu, Apr 2, 2009 at 10:16, Charles Moulliard < >> [email protected]> >> >> >> wrote: >> >> >> > Hi, >> >> >> > >> >> >> > Here is a list of features that I think could be interesting to >> >> implement >> >> >> in >> >> >> > future versions of SMX Kernel : >> >> >> > >> >> >> > - Improve JNDI support and integration with JTA transaction >> management >> >> >> (to >> >> >> > have one manager by SMX server), >> >> >> >> >> >> Could you elaborate a bit please ? Do you mean exposing the >> >> >> transaction manager in the JNDI tree ? >> >> >> We can do that easily I think, but I would advise to retrieve a >> >> >> reference to the transaction manager from the OSGi registry and use >> it >> >> >> directly if possible. JNDI/OSGi integration has to be limited wrt to >> >> >> OSGi classloading and OSGi service dynamics, so it's best to keep >> away >> >> >> from JNDI if possible. >> >> >> >> >> >> > - Add EJB3 support, >> >> >> >> >> >> Imho, this is a good thing to have (I guess you mean the ability to >> >> >> host an EJB3 container and deploy EJB3 as OSGi bundles). I started >> >> >> some work around that a long time ago, but never has any time to >> >> >> finish. I think the OpenEJB people have done some work around OSGi >> so >> >> >> it could be worth asking them. >> >> >> That said, I don't really think it should be part of ServiceMix >> Kernel >> >> >> distribution, but rather available as a feature like activemq, camel, >> >> >> etc... >> >> >> >> >> >> > - Generate separate logs for bundles or features, >> >> >> >> >> >> Yeah, there's a jira that you raised some time ago already. >> >> >> >> >> >> > - Provide web admin interface, >> >> >> >> >> >> Yes, we've been discussing this need at ApacheCon a bit and there's a >> >> >> GsoC project around that. >> >> >> Actually, I think we should have a look at the Felix console which >> >> >> already provides OSGi management (bundles, services, configurations, >> >> >> etc...) and is extensible. >> >> >> >> >> >> > - Clustering of SMX (based why not Camel on loadbalancing, >> integration >> >> >> with >> >> >> > terracota, ...), >> >> >> >> >> >> Clustering is a very large idea. What kind of things would you want >> >> >> to cluster ? Web apps ? Camel routes ? >> >> >> >> >> >> > - Propose architecture master/slave to deploy application from one >> >> server >> >> >> to >> >> >> > several SMX4 slaves, >> >> >> >> >> >> Progress is working on an open source tool around that, I'll blog >> more >> >> >> about it when it's available .. >> >> >> >> >> >> > - Improve feature to allow refresh or re installation of bundles, >> >> >> >> >> >> Yes, there's a jira about that too. That's something we really need >> >> >> to fix asap, but unfortunately, I don't have any good idea yet. The >> >> >> only thing >> >> >> >> >> >> > - Integration with Eclipse to debug/deploy/undeploy application, >> >> >> >> >> >> +1 >> >> >> >> >> >> > - Provide maven plugin to deploy/undeploy/stop/start bundles or >> >> project >> >> >> (= >> >> >> > list of features = list of bundles) >> >> >> >> >> >> We have such a plugin(features-maven-plugin) and we're already >> working >> >> >> on integrating deployment capabilities in it. >> >> >> >> >> >> > - For the administrator or profiler we need profiling to detect >> where >> >> we >> >> >> > have memory issues/gaps, ... >> >> >> >> >> >> How can ServiceMix Kernel help on that ? I don't see us developing a >> >> >> profiling tool. >> >> >> >> >> >> > - Backup strategy, >> >> >> >> >> >> Please explain ? Is this related to >> >> >> >> >> >> >> >> >> http://servicemix.apache.org/kernel/67-configuring-failover-deployments-available-in-110.html >> >> >> ? >> >> >> >> >> >> > - Rotation of the file logs (defined through etc config file or web >> >> >> > administration console) >> >> >> >> >> >> Isn't that just a configuration change in the underlying log4j system >> ? >> >> >> >> >> >> > - JMX support >> >> >> >> >> >> We already have JMX support. What are you looking for exactly ? >> >> >> >> >> >> > - Alerting support in case or problem with bundles (active --> >> >> inactive) >> >> >> >> >> >> This should be possible through JMX and notifications I guess, using >> >> >> any JMX monitoring application. >> >> >> >> >> >> > Regards, >> >> >> > >> >> >> > Charles Moulliard >> >> >> > SOA Architect >> >> >> > >> >> >> >> >> >> >> >> >> >> >> >> -- >> >> >> Cheers, >> >> >> Guillaume Nodet >> >> >> ------------------------ >> >> >> Blog: http://gnodet.blogspot.com/ >> >> >> ------------------------ >> >> >> Open Source SOA >> >> >> http://fusesource.com >> >> >> >> >> > >> >> >> >> >> >> >> >> -- >> >> Cheers, >> >> Guillaume Nodet >> >> ------------------------ >> >> Blog: http://gnodet.blogspot.com/ >> >> ------------------------ >> >> Open Source SOA >> >> http://fusesource.com >> >> >> > >> >> >> >> -- >> Cheers, >> Guillaume Nodet >> ------------------------ >> Blog: http://gnodet.blogspot.com/ >> ------------------------ >> Open Source SOA >> http://fusesource.com >> > -- Cheers, Guillaume Nodet ------------------------ Blog: http://gnodet.blogspot.com/ ------------------------ Open Source SOA http://fusesource.com
