geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lichtner <licht...@bway.net>
Subject Re: Oracle XA RAR for G1.0?
Date Tue, 07 Feb 2006 05:50:24 GMT

-3 should be javax.transaction.xa.XAException.XA_RMERR:

http://java.sun.com/j2ee/1.4/docs/api/constant-values.html#javax.transaction

Anyhow, you are not actually enlisting the oracle resource manager, so
that's a step in the right direction.

I think that Geronimo is not printing the stack trace. If you can, maybe
add a printStackTrace() and recompile.

What version of Oracle server and driver are you using?

On Mon, 6 Feb 2006, Jason Dillon wrote:

> And the plot thickens... this warning is issued before the exceptions
> are dumped:
>
> <snip>
> 21:21:23,050 WARN  [Transaction] Unable to enlist XAResource
> org.apache.geronimo.transaction.manager.WrapperNamedXAResource@9bb03e, e
> rrorCode: -3
> oracle.jdbc.xa.OracleXAException
>          at oracle.jdbc.xa.OracleXAResource.checkError
> (OracleXAResource.java:1190)
>          at oracle.jdbc.xa.client.OracleXAResource.start
> (OracleXAResource.java:311)
>          at
> org.apache.geronimo.transaction.manager.WrapperNamedXAResource.start
> (WrapperNamedXAResource.java:86)
>          at
> org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource
> (TransactionImpl.java:166)
>          at
> org.apache.geronimo.transaction.context.InheritableTransactionContext.en
> listResource(InheritableTransactionContext.java:92)
>          at
> org.apache.geronimo.connector.outbound.TransactionEnlistingInterceptor.g
> etConnection(TransactionEnlistingInterceptor.java:53)
>          at
> org.apache.geronimo.connector.outbound.TransactionCachingInterceptor.get
> Connection(TransactionCachingInterceptor.java:81)
>          at
> org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.getCo
> nnection(ConnectionHandleInterceptor.java:43)
>          at
> org.apache.geronimo.connector.outbound.TCCLInterceptor.getConnection
> (TCCLInterceptor.java:39)
>          at
> org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor.get
> Connection(ConnectionTrackingInterceptor.java:66)
>          at
> org.apache.geronimo.connector.outbound.AbstractConnectionManager.allocat
> eConnection(AbstractConnectionManager.java:57)
>          at org.tranql.connector.jdbc.DataSource.getConnection
> (DataSource.java:56)
>          at $javax.sql.DataSource$$FastClassByCGLIB$$6525cafd.invoke
> (<generated>)
>          at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
>          at
> org.apache.geronimo.connector.ConnectorMethodInterceptor.intercept
> (ConnectorMethodInterceptor.java:53)
>          at $javax.sql.DataSource$$EnhancerByCGLIB$
> $4e89d0c0.getConnection(<generated>)
>          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>          at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>          at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>          at java.lang.reflect.Method.invoke(Method.java:324)
>          at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(
> AopUtils.java:282)
>          at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke
> (JdkDynamicAopProxy.java:163)
>          at $Proxy1.getConnection(Unknown Source)
>          at
> org.springframework.orm.hibernate.LocalDataSourceConnectionProvider.getC
> onnection(LocalDataSourceConnectionProvider.java:75)
>          at net.sf.hibernate.cfg.SettingsFactory.buildSettings
> (SettingsFactory.java:73)
>          at net.sf.hibernate.cfg.Configuration.buildSettings
> (Configuration.java:1155)
>          at net.sf.hibernate.cfg.Configuration.buildSessionFactory
> (Configuration.java:789)
>          at
> org.springframework.orm.hibernate.LocalSessionFactoryBean.newSessionFact
> ory(LocalSessionFactoryBean.java:535)
>          at
> org.springframework.orm.hibernate.LocalSessionFactoryBean.afterPropertie
> sSet(LocalSessionFactoryBean.java:470)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1065)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.createBean(AbstractAutowireCapableBeanFactory.java:343)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.createBean(AbstractAutowireCapableBeanFactory.java:260)
>          at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> (AbstractBeanFactory.java:221)
>          at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> (AbstractBeanFactory.java:145)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.resolveReference(AbstractAutowireCapableBeanFactory.java:973)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.resolveValueIfNecessary(AbstractAutowireCapableBeanFactory.java:
> 911)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:852)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.populateBean(AbstractAutowireCapableBeanFactory.java:680)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.createBean(AbstractAutowireCapableBeanFactory.java:325)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.createBean(AbstractAutowireCapableBeanFactory.java:260)
>          at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> (AbstractBeanFactory.java:221)
>          at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> (AbstractBeanFactory.java:145)
>          at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.pre
> InstantiateSingletons(DefaultListableBeanFactory.java:282)
>          at
> org.springframework.context.support.AbstractApplicationContext.refresh
> (AbstractApplicationContext.java:317)
>          at
> org.springframework.context.support.ClassPathXmlApplicationContext.<init
>  >(ClassPathXmlApplicationContext.java:80)
>          at
> org.springframework.context.support.ClassPathXmlApplicationContext.<init
>  >(ClassPathXmlApplicationContext.java:65)
>          at
> org.springframework.context.access.ContextJndiBeanFactoryLocator.createB
> eanFactory(ContextJndiBeanFactoryLocator.java:40)
>          at
> org.springframework.beans.factory.access.JndiBeanFactoryLocator.useBeanF
> actory(JndiBeanFactoryLocator.java:68)
>          at
> org.springframework.ejb.support.AbstractEnterpriseBean.loadBeanFactory
> (AbstractEnterpriseBean.java:115)
>          at
> org.springframework.ejb.support.AbstractStatelessSessionBean.ejbCreate
> (AbstractStatelessSessionBean.java:63)
>          at
> com.solidusnetworks.paycore.ach.model.merchant.service.MerchantViewServi
> ceBean$$FastClassByCGLIB$$e322b03a.invoke(<generated>)
>          at org.openejb.slsb.EJBCreateMethod.execute
> (EJBCreateMethod.java:94)
>          at org.openejb.dispatch.DispatchInterceptor.invoke
> (DispatchInterceptor.java:72)
>          at
> org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke
> (ComponentContextInterceptor.java:56)
>          at org.openejb.ConnectionTrackingInterceptor.invoke
> (ConnectionTrackingInterceptor.java:81)
>          at org.openejb.slsb.StatelessInstanceContext.ejbCreate
> (StatelessInstanceContext.java:168)
>        at org.openejb.slsb.StatelessInstanceFactory.createInstance
> (StatelessInstanceFactory.java:74)
>          at org.openejb.util.SoftLimitedInstancePool.acquire
> (SoftLimitedInstancePool.java:81)
>          at org.openejb.slsb.StatelessInstanceInterceptor.invoke
> (StatelessInstanceInterceptor.java:84)
>          at org.openejb.transaction.ContainerPolicy$TxRequired.invoke
> (ContainerPolicy.java:119)
>          at
> org.openejb.transaction.TransactionContextInterceptor.invoke
> (TransactionContextInterceptor.java:80)
>          at org.openejb.SystemExceptionInterceptor.invoke
> (SystemExceptionInterceptor.java:82)
>          at org.openejb.GenericEJBContainer.invoke
> (GenericEJBContainer.java:238)
>          at org.openejb.proxy.EJBMethodInterceptor.intercept
> (EJBMethodInterceptor.java:129)
>          at org.openejb.proxy.SessionEJBLocalHome$$EnhancerByCGLIB$
> $8d17d4ce.create(<generated>)
>          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>          at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>          at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>          at java.lang.reflect.Method.invoke(Method.java:324)
>          at
> com.solidusnetworks.paycore.ach.system.J2EEUtils.getLocalInstance
> (J2EEUtils.java:133)
>          at
> com.solidusnetworks.paycore.ach.system.J2EEUtils.getMerchantViewServiceL
> ocal(J2EEUtils.java:248)
>          at
> com.solidusnetworks.paycore.ach.business.pos.POSCheckServiceBean.ejbCrea
> te(POSCheckServiceBean.java:90)
>          at
> com.solidusnetworks.paycore.ach.business.pos.POSCheckServiceBean$
> $FastClassByCGLIB$$ac29a8c5.invoke(<generated>)
>          at org.openejb.slsb.EJBCreateMethod.execute
> (EJBCreateMethod.java:94)
>          at org.openejb.dispatch.DispatchInterceptor.invoke
> (DispatchInterceptor.java:72)
>          at
> org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke
> (ComponentContextInterceptor.java:56)
>          at org.openejb.ConnectionTrackingInterceptor.invoke
> (ConnectionTrackingInterceptor.java:81)
>          at org.openejb.slsb.StatelessInstanceContext.ejbCreate
> (StatelessInstanceContext.java:168)
>          at org.openejb.slsb.StatelessInstanceFactory.createInstance
> (StatelessInstanceFactory.java:74)
>          at org.openejb.util.SoftLimitedInstancePool.acquire
> (SoftLimitedInstancePool.java:81)
>          at org.openejb.slsb.StatelessInstanceInterceptor.invoke
> (StatelessInstanceInterceptor.java:84)
>          at org.openejb.transaction.ContainerPolicy$TxRequired.invoke
> (ContainerPolicy.java:140)
>          at
> org.openejb.transaction.TransactionContextInterceptor.invoke
> (TransactionContextInterceptor.java:80)
>          at org.openejb.SystemExceptionInterceptor.invoke
> (SystemExceptionInterceptor.java:82)
>          at org.openejb.GenericEJBContainer.invoke
> (GenericEJBContainer.java:238)
>          at org.openejb.server.ejbd.EjbRequestHandler.invoke
> (EjbRequestHandler.java:297)
>          at org.openejb.server.ejbd.EjbRequestHandler.doEjbHome_CREATE
> (EjbRequestHandler.java:342)
>          at org.openejb.server.ejbd.EjbRequestHandler.processRequest
> (EjbRequestHandler.java:205)
>          at org.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:
> 150)
>          at org.openejb.server.ejbd.EjbServer.service(EjbServer.java:87)
>          at org.openejb.server.ejbd.EjbServer$$FastClassByCGLIB$
> $d379d2ff.invoke(<generated>)
>          at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
>          at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke
> (FastMethodInvoker.java:38)
>          at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke
> (GBeanOperation.java:118)
>          at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke
> (GBeanInstance.java:800)
>          at org.apache.geronimo.gbean.runtime.RawInvoker.invoke
> (RawInvoker.java:57)
>          at
> org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke
> (RawOperationInvoker.java:36)
>          at
> org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept
> (ProxyMethodInterceptor.java:96)
>          at org.activeio.xnet.ServerService$$EnhancerByCGLIB$
> $944b9c52.service(<generated>)
>          at org.activeio.xnet.ServicePool$2.run(ServicePool.java:67)
>          at org.activeio.xnet.ServicePool$3.run(ServicePool.java:90)
>          at org.apache.geronimo.pool.ThreadPool
> $ContextClassLoaderRunnable.run(ThreadPool.java:138)
>          at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run
> (Unknown Source)
>          at java.lang.Thread.run(Thread.java:552)
> </snip>
>
> I found this related to -3:
>
> http://bugs.caucho.com/view.php?id=180
>
> Unfortunately its hard to search for "-3", and that is all the
> context I have to go from :-(
>
> --jason
>
>
> On Feb 6, 2006, at 5:17 PM, Jason Dillon wrote:
>
> > No love :-(
> >
> > When I configure both of my datasources to use the oracle xa adapter,
> > and use the xa adapter for activemq, I get exceptions like:
> >
> > <snip>
> > [2/6/06 16:35:17:456 PST]  [ERROR] -
> > org.apache.geronimo.kernel.log.GeronimoLog.error(line:104) -
> > ORA-02089: COMMIT is not allowed in a subordinate session
> >
> > [2/6/06 16:35:17:458 PST]  [ERROR] -
> > org.apache.geronimo.kernel.log.GeronimoLog.error(line:108) - Could not
> > execute query
> > java.sql.SQLException: ORA-02089: COMMIT is not allowed in a
> > subordinate session
> >
> >         at oracle.jdbc.dbaccess.DBError.throwSqlException
> > (DBError.java:134)
> >         at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
> >         at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:582)
> >         at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:
> > 1986)
> >         at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe
> > (TTC7Protocol.java:880)
> >         at oracle.jdbc.driver.OracleStatement.doExecuteQuery
> > (OracleStatement.java:2516)
> >         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout
> > (OracleStatement.java:2850)
> >         at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate
> > (OraclePreparedStatement.java:609)
> >         at oracle.jdbc.driver.OraclePreparedStatement.executeQuery
> > (OraclePreparedStatement.java:537)
> >         at
> > org.tranql.connector.jdbc.PreparedStatementHandle.executeQuery
> > (PreparedStatementHandle.java:49)
> >         at net.sf.hibernate.impl.BatcherImpl.getResultSet
> > (BatcherImpl.java:87)
> >         at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:
> > 875)
> >         at net.sf.hibernate.loader.Loader.doQuery(Loader.java:269)
> >         at
> > net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(
> > Loader.java:133)
> >         at net.sf.hibernate.loader.Loader.doList(Loader.java:1033)
> >         at net.sf.hibernate.loader.Loader.list(Loader.java:1024)
> >         at net.sf.hibernate.hql.QueryTranslator.list
> > (QueryTranslator.java:854)
> >         at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:
> > 1544)
> >         at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
> >         at org.springframework.orm.hibernate.HibernateTemplate
> > $26.doInHibernate(HibernateTemplate.java:667)
> >         at
> > org.springframework.orm.hibernate.HibernateTemplate.execute
> > (HibernateTemplate.java:312)
> >         at org.springframework.orm.hibernate.HibernateTemplate.find
> > (HibernateTemplate.java:655)
> >         at
> > com.solidusnetworks.paycore.util.hibernate.BaseDAOHibernate.find
> > (BaseDAOHibernate.java:423)
> >         at
> > com.solidusnetworks.ach.oltp.dao.impl.NegativeFileDAOHibernate.findAct
> > iveNegativeFiles(NegativeFileDAOHibernate.java:394)
> >         at
> > com.solidusnetworks.paycore.ach.model.negativefile.service.NegativeFil
> > eViewServiceBean.retrieveActiveGlobalAndMerchantNegativeFiles
> > (NegativeFileViewServiceBean.java:87)
> >         at
> > com.solidusnetworks.paycore.ach.model.negativefile.service.NegativeFil
> > eViewServiceBean$$FastClassByCGLIB$$55b05efa.invoke(<generated>)
> >         at org.openejb.dispatch.AbstractMethodOperation.invoke
> > (AbstractMethodOperation.java:90)
> >         at org.openejb.slsb.BusinessMethod.execute
> > (BusinessMethod.java:67)
> >         at org.openejb.dispatch.DispatchInterceptor.invoke
> > (DispatchInterceptor.java:72)
> >         at
> > org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke
> > (ComponentContextInterceptor.java:56)
> >         at org.openejb.ConnectionTrackingInterceptor.invoke
> > (ConnectionTrackingInterceptor.java:81)
> >         at org.openejb.transaction.ContainerPolicy$TxRequired.invoke
> > (ContainerPolicy.java:119)
> >         at
> > org.openejb.transaction.TransactionContextInterceptor.invoke
> > (TransactionContextInterceptor.java:80)
> >         at org.openejb.slsb.StatelessInstanceInterceptor.invoke
> > (StatelessInstanceInterceptor.java:98)
> >         at org.openejb.transaction.ContainerPolicy$TxRequired.invoke
> > (ContainerPolicy.java:119)
> >         at
> > org.openejb.transaction.TransactionContextInterceptor.invoke
> > (TransactionContextInterceptor.java:80)
> >         at org.openejb.SystemExceptionInterceptor.invoke
> > (SystemExceptionInterceptor.java:82)
> >         at org.openejb.GenericEJBContainer.invoke
> > (GenericEJBContainer.java:238)
> >         at org.openejb.proxy.EJBMethodInterceptor.intercept
> > (EJBMethodInterceptor.java:129)
> >         at org.openejb.proxy.SessionEJBLocalObject$$EnhancerByCGLIB$
> > $c4231b05.retrieveActiveGlobalAndMerchantNegativeFiles(<generated>)
> >         at
> > com.solidusnetworks.paycore.ach.business.pos.POSCheckServiceBean.retri
> > eveNegativeFileData(POSCheckServiceBean.java:414)
> >         at
> > com.solidusnetworks.paycore.ach.business.pos.POSCheckServiceBean.check
> > ForNegativeFileAndDollarLimit(POSCheckServiceBean.java:300)
> >         at
> > com.solidusnetworks.paycore.ach.business.pos.POSCheckServiceBean.autho
> > rize(POSCheckServiceBean.java:206)
> >         at
> > com.solidusnetworks.paycore.ach.business.pos.POSCheckServiceBean$
> > $FastClassByCGLIB$$ac29a8c5.invoke(<generated>)
> >         at org.openejb.dispatch.AbstractMethodOperation.invoke
> > (AbstractMethodOperation.java:90)
> >         at org.openejb.slsb.BusinessMethod.execute
> > (BusinessMethod.java:67)
> >         at org.openejb.dispatch.DispatchInterceptor.invoke
> > (DispatchInterceptor.java:72)
> >         at
> > org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke
> > (ComponentContextInterceptor.java:56)
> >         at org.openejb.ConnectionTrackingInterceptor.invoke
> > (ConnectionTrackingInterceptor.java:81)
> >         at org.openejb.transaction.ContainerPolicy$TxRequired.invoke
> > (ContainerPolicy.java:119)
> >         at
> > org.openejb.transaction.TransactionContextInterceptor.invoke
> > (TransactionContextInterceptor.java:80)
> >         at org.openejb.slsb.StatelessInstanceInterceptor.invoke
> > (StatelessInstanceInterceptor.java:98)
> >         at org.openejb.transaction.ContainerPolicy$TxRequired.invoke
> > (ContainerPolicy.java:140)
> >         at
> > org.openejb.transaction.TransactionContextInterceptor.invoke
> > (TransactionContextInterceptor.java:80)
> >         at org.openejb.SystemExceptionInterceptor.invoke
> > (SystemExceptionInterceptor.java:82)
> >         at org.openejb.GenericEJBContainer.invoke
> > (GenericEJBContainer.java:238)
> >         at org.openejb.server.ejbd.EjbRequestHandler.invoke
> > (EjbRequestHandler.java:297)
> >         at
> > org.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(
> > EjbRequestHandler.java:325)
> >         at org.openejb.server.ejbd.EjbRequestHandler.processRequest
> > (EjbRequestHandler.java:196)
> >         at org.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:
> > 150)
> >         at org.openejb.server.ejbd.EjbServer.service(EjbServer.java:
> > 87)
> >         at org.openejb.server.ejbd.EjbServer$$FastClassByCGLIB$
> > $d379d2ff.invoke(<generated>)
> >         at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> >         at
> > org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke
> > (FastMethodInvoker.java:38)
> >         at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke
> > (GBeanOperation.java:118)
> >         at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke
> > (GBeanInstance.java:800)
> >         at org.apache.geronimo.gbean.runtime.RawInvoker.invoke
> > (RawInvoker.java:57)
> >         at
> > org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke
> > (RawOperationInvoker.java:36)
> >         at
> > org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept
> > (ProxyMethodInterceptor.java:96)
> >         at org.activeio.xnet.ServerService$$EnhancerByCGLIB$
> > $944b9c52.service(<generated>)
> >         at org.activeio.xnet.ServicePool$2.run(ServicePool.java:67)
> >         at org.activeio.xnet.ServicePool$3.run(ServicePool.java:90)
> >         at org.apache.geronimo.pool.ThreadPool
> > $ContextClassLoaderRunnable.run(ThreadPool.java:138)
> >         at EDU.oswego.cs.dl.util.concurrent.PooledExecutor
> > $Worker.run(Unknown
> > Source)
> >         at java.lang.Thread.run(Thread.java:552)
> > </snip>
> >
> > The only way I could get anything to work, was to use the oracle local
> > rars, configure everything (both jdbc ds and jms ds) to use
> > <local-transaction/>, but it appears that the remote call from my
> > client never returns, even though logging suggests that the beans
> > method completed.  I'm guessing the tx is stuck.  I started from
> > stretch (new geronimo dist) and redeployed the plan that was
> > previously sticking and it seems okay.
> >
> > Any idea what is up with this subordinate session muck?
> >
> > --jason
>
>

Mime
View raw message