Hi Vito, There has to be a file named ode-axis2.properties under *webapps/ode/WEB-INF/conf*
FYI, ODE by default uses an embedded derby database with geronimo transaction manager, unless you change the configuration in ode-axis2.properties Would recommend trying the bundled ode-tomcat suggested by tammo earlier. regards, sathwik On Tue, Mar 18, 2014 at 9:48 AM, Vito <[email protected]> wrote: > Hi Sathwik, > > I don't have ode-axis2.properties file in my web-inf folder. I have > axis2.xml file instead. > The two axis2.xml files content is like below, which only change their > ports from "8080" to "8180": > <axisconfig name="AxisJava2.0"> > <parameter name="hotdeployment" locked="false">true</parameter> > <parameter name="hotupdate" locked="false">false</parameter> > <parameter name="enableMTOM" locked="false">false</parameter> > <parameter name="enableSwA" locked="false">false</parameter> > <parameter name="attachmentDIR" locked="false"></parameter> > <parameter name="sizeThreshold" locked="false">4000</parameter--> > <parameter name="ConfigContextTimeoutInterval" > locked="false">30</parameter> > <parameter name="sendStacktraceDetailsWithFaults" > locked="false">true</parameter> > <parameter name="DrillDownToRootCauseForFaultReason" > locked="false">true</parameter> > > <parameter name="userName" locked="false">admin</parameter> > <parameter name="password" locked="false">axis2</parameter> > <parameter name="servicePath" locked="false">processes</parameter> > <parameter name="manageTransportSession" > locked="false">false</parameter> > <parameter name="enableRESTInAxis2MainServlet" > locked="true">true</parameter> > <parameter name="disableREST" locked="true">false</parameter> > <parameter name="disableSeparateEndpointForREST" > locked="true">true</parameter> > <messageReceivers> > <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" > > class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> > <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" > > class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> > </messageReceivers> > <transportReceiver name="http" > > class="org.apache.axis2.transport.http.SimpleHTTPServer"> > <parameter name="port" locked="false">8080</parameter> > </transportReceiver> > <transportReceiver name="jms" > class="org.apache.axis2.transport.jms.JMSListener"> > <parameter name="myTopicConnectionFactory" locked="false"> > <parameter name="java.naming.factory.initial" > locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> > <parameter name="java.naming.provider.url" > locked="false">tcp://localhost:61616</parameter> > <parameter name="transport.jms.ConnectionFactoryJNDIName" > locked="false">TopicConnectionFactory</parameter> > </parameter> > > <parameter name="myQueueConnectionFactory" locked="false"> > <parameter name="java.naming.factory.initial" > locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> > <parameter name="java.naming.provider.url" > locked="false">tcp://localhost:61616</parameter> > <parameter name="transport.jms.ConnectionFactoryJNDIName" > locked="false">QueueConnectionFactory</parameter> > </parameter> > > <parameter name="default" locked="false"> > <parameter name="java.naming.factory.initial" > locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> > <parameter name="java.naming.provider.url" > locked="false">tcp://localhost:61616</parameter> > <parameter name="transport.jms.ConnectionFactoryJNDIName" > locked="false">QueueConnectionFactory</parameter> > </parameter> > </transportReceiver>--> > > <transportSender name="tcp" > > class="org.apache.axis2.transport.tcp.TCPTransportSender"/> > <transportSender name="local" > > class="org.apache.axis2.transport.local.LocalTransportSender"/> > <transportSender name="http" > > class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> > <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter> > <parameter name="Transfer-Encoding" > locked="false">chunked</parameter> > </transportSender> > <transportSender name="https" > > class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> > <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter> > <parameter name="Transfer-Encoding" > locked="false">chunked</parameter> > </transportSender> > <transportSender name="jms" > class="org.apache.axis2.transport.jms.JMSSender"/> > --> > <transportSender name="mailto" > class="org.apache.axis2.transport.mail.MailTransportSender"> > <parameter name="transport.mail.smtp.host" > locked="false">127.0.0.1</parameter> > <parameter name="transport.mail.smtp.user" > locked="false">axis2</parameter> > <parameter name="transport.mail.smtp.password" > locked="false">axis2</parameter> > <parameter name="transport.mail.smtp.port" > locked="false">25</parameter> > </transportSender> > --> > <phaseOrder type="InFlow"> > <!-- System pre defined phases --> > <phase name="Transport"> > <handler name="RequestURIBasedDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> > <handler name="SOAPActionBasedDispatcher" > > class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/> > <handler name="ODEAxisServiceDispatcher" > > class="org.apache.ode.axis2.hooks.ODEAxisServiceDispatcher"/> > </phase> > <phase name="Security"/> > <phase name="Addressing"> > <handler name="ODEAxisOperationDispatcher" > > class="org.apache.ode.axis2.hooks.ODEAxisOperationDispatcher"/> > <handler name="AddressingBasedDispatcher" > > class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> > <order phase="Addressing"/> > </handler> > </phase> > <phase name="PreDispatch"/> > <phase name="Dispatch" > class="org.apache.axis2.engine.DispatchPhase"> > <handler name="RequestURIBasedDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> > <handler name="RequestURIOperationDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/> > <handler name="HTTPLocationBasedDispatcher" > > class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/> > </phase> > <phase name="ProcessHeader"> > <handler name="SessionInHandler" > class="org.apache.ode.axis2.hooks.SessionInHandler"> > <order phase="PostDispatch"/> > </handler> > </phase> > <phase name="OperationInPhase"/> > <phase name="soapmonitorPhase"/> > </phaseOrder> > <phaseOrder type="OutFlow"> > <!-- user can add his own phases to this area --> > <phase name="ProcessHeader"> > <handler name="SessionOutHandler" > class="org.apache.ode.axis2.hooks.SessionOutHandler"> > <order phase="PreDispatch"/> > </handler> > </phase> > <phase name="soapmonitorPhase"/> > <phase name="OperationOutPhase"/> > <phase name="PolicyDetermination"/> > <phase name="MessageOut"/> > <phase name="Security"/> > </phaseOrder> > <phaseOrder type="InFaultFlow"> > <phase name="Security"/> > <phase name="Addressing"> > <handler name="AddressingBasedDispatcher" > > class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> > <order phase="Addressing"/> > </handler> > </phase> > <phase name="PreDispatch"/> > <phase name="Dispatch" > class="org.apache.axis2.engine.DispatchPhase"> > <handler name="RequestURIBasedDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"> > <order phase="Dispatch"/> > </handler> > > <handler name="SOAPActionBasedDispatcher" > > class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"> > <order phase="Dispatch"/> > </handler> > > <handler name="SOAPMessageBodyBasedDispatcher" > > class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"> > <order phase="Dispatch"/> > </handler> > </phase> > <phase name="OperationInFaultPhase"/> > <phase name="soapmonitorPhase"/> > </phaseOrder> > <phaseOrder type="OutFaultFlow"> > <!-- user can add his own phases to this area --> > <phase name="soapmonitorPhase"/> > <phase name="OperationOutFaultPhase"/> > <phase name="PolicyDetermination"/> > <phase name="MessageOut"/> > <phase name="Security"/> > </phaseOrder> > </axisconfig> > > > > <axisconfig name="AxisJava2.0"> > <parameter name="hotdeployment" locked="false">true</parameter> > <parameter name="hotupdate" locked="false">false</parameter> > <parameter name="enableMTOM" locked="false">false</parameter> > <parameter name="enableSwA" locked="false">false</parameter> > <parameter name="attachmentDIR" locked="false"></parameter> > <parameter name="sizeThreshold" locked="false">4000</parameter--> > <parameter name="ConfigContextTimeoutInterval" > locked="false">30</parameter> > <parameter name="sendStacktraceDetailsWithFaults" > locked="false">true</parameter> > <parameter name="DrillDownToRootCauseForFaultReason" > locked="false">true</parameter> > > <parameter name="userName" locked="false">admin</parameter> > <parameter name="password" locked="false">axis2</parameter> > <parameter name="servicePath" locked="false">processes</parameter> > <parameter name="manageTransportSession" > locked="false">false</parameter> > <parameter name="enableRESTInAxis2MainServlet" > locked="true">true</parameter> > <parameter name="disableREST" locked="true">false</parameter> > <parameter name="disableSeparateEndpointForREST" > locked="true">true</parameter> > <messageReceivers> > <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" > > class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> > <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" > > class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> > </messageReceivers> > <transportReceiver name="http" > > class="org.apache.axis2.transport.http.SimpleHTTPServer"> > <parameter name="port" locked="false">8180</parameter> > </transportReceiver> > <transportReceiver name="jms" > class="org.apache.axis2.transport.jms.JMSListener"> > <parameter name="myTopicConnectionFactory" locked="false"> > <parameter name="java.naming.factory.initial" > locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> > <parameter name="java.naming.provider.url" > locked="false">tcp://localhost:61616</parameter> > <parameter name="transport.jms.ConnectionFactoryJNDIName" > locked="false">TopicConnectionFactory</parameter> > </parameter> > > <parameter name="myQueueConnectionFactory" locked="false"> > <parameter name="java.naming.factory.initial" > locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> > <parameter name="java.naming.provider.url" > locked="false">tcp://localhost:61616</parameter> > <parameter name="transport.jms.ConnectionFactoryJNDIName" > locked="false">QueueConnectionFactory</parameter> > </parameter> > > <parameter name="default" locked="false"> > <parameter name="java.naming.factory.initial" > locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> > <parameter name="java.naming.provider.url" > locked="false">tcp://localhost:61616</parameter> > <parameter name="transport.jms.ConnectionFactoryJNDIName" > locked="false">QueueConnectionFactory</parameter> > </parameter> > </transportReceiver>--> > > <transportSender name="tcp" > > class="org.apache.axis2.transport.tcp.TCPTransportSender"/> > <transportSender name="local" > > class="org.apache.axis2.transport.local.LocalTransportSender"/> > <transportSender name="http" > > class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> > <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter> > <parameter name="Transfer-Encoding" > locked="false">chunked</parameter> > </transportSender> > <transportSender name="https" > > class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> > <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter> > <parameter name="Transfer-Encoding" > locked="false">chunked</parameter> > </transportSender> > <transportSender name="jms" > class="org.apache.axis2.transport.jms.JMSSender"/> > --> > <transportSender name="mailto" > class="org.apache.axis2.transport.mail.MailTransportSender"> > <parameter name="transport.mail.smtp.host" > locked="false">127.0.0.1</parameter> > <parameter name="transport.mail.smtp.user" > locked="false">axis2</parameter> > <parameter name="transport.mail.smtp.password" > locked="false">axis2</parameter> > <parameter name="transport.mail.smtp.port" > locked="false">25</parameter> > </transportSender> > --> > <phaseOrder type="InFlow"> > <!-- System pre defined phases --> > <phase name="Transport"> > <handler name="RequestURIBasedDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> > <handler name="SOAPActionBasedDispatcher" > > class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/> > <handler name="ODEAxisServiceDispatcher" > > class="org.apache.ode.axis2.hooks.ODEAxisServiceDispatcher"/> > </phase> > <phase name="Security"/> > <phase name="Addressing"> > <handler name="ODEAxisOperationDispatcher" > > class="org.apache.ode.axis2.hooks.ODEAxisOperationDispatcher"/> > <handler name="AddressingBasedDispatcher" > > class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> > <order phase="Addressing"/> > </handler> > </phase> > <phase name="PreDispatch"/> > <phase name="Dispatch" > class="org.apache.axis2.engine.DispatchPhase"> > <handler name="RequestURIBasedDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> > <handler name="RequestURIOperationDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/> > <handler name="HTTPLocationBasedDispatcher" > > class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/> > </phase> > <phase name="ProcessHeader"> > <handler name="SessionInHandler" > class="org.apache.ode.axis2.hooks.SessionInHandler"> > <order phase="PostDispatch"/> > </handler> > </phase> > <phase name="OperationInPhase"/> > <phase name="soapmonitorPhase"/> > </phaseOrder> > <phaseOrder type="OutFlow"> > <!-- user can add his own phases to this area --> > <phase name="ProcessHeader"> > <handler name="SessionOutHandler" > class="org.apache.ode.axis2.hooks.SessionOutHandler"> > <order phase="PreDispatch"/> > </handler> > </phase> > <phase name="soapmonitorPhase"/> > <phase name="OperationOutPhase"/> > <phase name="PolicyDetermination"/> > <phase name="MessageOut"/> > <phase name="Security"/> > </phaseOrder> > <phaseOrder type="InFaultFlow"> > <phase name="Security"/> > <phase name="Addressing"> > <handler name="AddressingBasedDispatcher" > > class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> > <order phase="Addressing"/> > </handler> > </phase> > <phase name="PreDispatch"/> > <phase name="Dispatch" > class="org.apache.axis2.engine.DispatchPhase"> > <handler name="RequestURIBasedDispatcher" > > class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"> > <order phase="Dispatch"/> > </handler> > > <handler name="SOAPActionBasedDispatcher" > > class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"> > <order phase="Dispatch"/> > </handler> > > <handler name="SOAPMessageBodyBasedDispatcher" > > class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"> > <order phase="Dispatch"/> > </handler> > </phase> > <phase name="OperationInFaultPhase"/> > <phase name="soapmonitorPhase"/> > </phaseOrder> > <phaseOrder type="OutFaultFlow"> > <!-- user can add his own phases to this area --> > <phase name="soapmonitorPhase"/> > <phase name="OperationOutFaultPhase"/> > <phase name="PolicyDetermination"/> > <phase name="MessageOut"/> > <phase name="Security"/> > </phaseOrder> > </axisconfig> > > > > > > > At 2014-03-14 17:20:20,"Sathwik B P" <[email protected]> wrote: > >Hi Vito, > > > >Can you share ode-axis2.properties file from both the tomcat servers to > >understand your deployment. > > > >regards, > >sathwik > > > > > >On Fri, Mar 14, 2014 at 7:38 AM, Vito <[email protected]> wrote: > > > >> Hi Tammo, > >> > >> Thank you for your explanation and advice. Actually I deployed the two > ODE > >> engines in two tomcat servers of different ports. So if I want to > invoke, > >> for example, 15 instances in ode1 and 15 instances in ode2, the requests > >> have their difference in the ports of their addresses. The question is, > in > >> this circumstance, do the two ode engines share the same database > instance > >> when they run in two tomcat servers? I use the internal jpa database. > >> > >> > >> Best, > >> Vito > >> > >> > >> At 2014-03-13 19:23:10,"Tammo van Lessen" <[email protected]> wrote: > >> >Hi Vito, > >> > > >> >it doesn't matter if they share the same JVM but if they share the same > >> >data in the database, then you will run into trouble unless you solve > some > >> >issues needed for clustering. The background is the following: If ODE > >> >receives a request, it loads the instance, determines the next steps > and > >> >adds a new entry to the scheduler table for tasks that requires heavier > >> >work. In a cluster you need to make sure that this scheduled job is > >> >assigned to a single node and not taken up by all nodes. The scheduler > is > >> >ready to do that, but the missing piece is the cluster management that > >> >assigns IDs to nodes etc. This can be implemented with hazelcast for > >> >instance. > >> > > >> >As a side note: When you use an external database, it is important that > >> you > >> >have properly configured the transactions manager, either by using > >> >https://github.com/vanto/apache-ode-tomcat-bundle or by following the > >> >Sathwik's instructions at > >> > > >> > http://sathwikbp.blogspot.de/2013/09/apache-ode-on-tomcat-7-with-bitronix.html > >> , > >> >this could help as well. > >> > > >> >HTH, > >> > Tammo > >> > > >> > > >> >On Wed, Mar 12, 2014 at 2:49 AM, Vito <[email protected]> wrote: > >> > > >> >> Hi Tammo, > >> >> > >> >> Yes, both instances are nearly the same except for their different > >> >> deployment port number, because they need to be deployed in the two > ODE > >> of > >> >> different ports. > >> >> Do you mean that they share the same jvm and database instance? It > can > >> >> really cause some problem. > >> >> Actually I'm doing some work trying to implement simple load balance > >> >> between different ODE instances, but it's just a external > implementation > >> >> without using any features of ODE cluster, which I'm not familiar > with. > >> >> > >> >> > >> >> Best, > >> >> Vito > >> >> > >> >> > >> >> At 2014-03-11 20:35:29,"Tammo van Lessen" <[email protected]> > wrote: > >> >> >Hi Vito, > >> >> > > >> >> >do both instances share the same database schema? > >> >> > > >> >> >ODE is currently not able to run in a cluster. Actually it is in > >> general > >> >> >ready for clustering but two pieces of glue code are missing. 1) the > >> load > >> >> >balance, 2) the master slave management that is needed for the > >> scheduler > >> >> >and the process store. Thus, without a not-too-small amount of > >> developer > >> >> >work its currently not possible to setup a cluster based on open > source > >> >> >ODE. Also, ODE then assumes that the process definitions are the > same > >> >> >across all instances within the cluster. > >> >> > > >> >> >Or did I get your question wrong? > >> >> > > >> >> >Tammo > >> >> > > >> >> > > >> >> >On Tue, Mar 11, 2014 at 9:44 AM, Vito <[email protected]> wrote: > >> >> > > >> >> >> Hi all, I'm trying to invoke multiple instances on two ODE > engines. > >> >> >> I deployed the two engines in two tomcat servers of different > ports > >> in > >> >> the > >> >> >> same computer. Then invoked 15 same process instances on each ODE > >> >> engine, > >> >> >> and the two process definitions for the two engines are not the > same. > >> >> When > >> >> >> I invoked them all, the first engine went well, but the instances > on > >> the > >> >> >> second engine sometimes worked well, sometimes it threw exception > >> like > >> >> >> below: > >> >> >> > >> >> >> 16:28:01,939 WARN [Transaction] Unexpected exception from > >> >> >> beforeCompletion; transaction will roll back > >> >> >> <openjpa-1.2.1-r752877:753278 nonfatal user error> > >> >> >> org.apache.openjpa.persistence.InvalidStateException: Attempt to > >> commit > >> >> a > >> >> >> null javax.transaction.Transaction. Some application servers set > the > >> >> >> transaction to null if a rollback occurs. > >> >> >> at > >> >> >> > >> >> > >> > org.apache.openjpa.kernel.BrokerImpl.setRollbackOnlyInternal(BrokerImpl.java:1490) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.openjpa.kernel.BrokerImpl.setRollbackOnly(BrokerImpl.java:1476) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.openjpa.kernel.DelegatingBroker.setRollbackOnly(DelegatingBroker.java:925) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.openjpa.persistence.EntityManagerImpl.setRollbackOnly(EntityManagerImpl.java:560) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.openjpa.persistence.PersistenceExceptions$2.translate(PersistenceExceptions.java:71) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.openjpa.kernel.BrokerImpl.translateManagedCompletionException(BrokerImpl.java:1896) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1830) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:498) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:238) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:291) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:239) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleScheduler.java:512) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleScheduler.java:496) > >> >> >> at > >> >> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) > >> >> >> at java.util.concurrent.FutureTask.run(FutureTask.java:138) > >> >> >> at > >> >> >> > >> >> > >> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > >> >> >> at > >> >> >> > >> >> > >> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > >> >> >> at java.lang.Thread.run(Thread.java:662) > >> >> >> > >> >> >> BTW after the error the instances can still go on to the normal > end. > >> >> Maybe > >> >> >> the rollback saved the instance. > >> >> >> It seems that something went wrong with the transaction manager. > >> Could > >> >> you > >> >> >> help me figure out how this error came out? > >> >> >> Best, > >> >> >> Vito > >> >> >> > >> >> > > >> >> > > >> >> > > >> >> >-- > >> >> >Tammo van Lessen - http://www.taval.de > >> >> > >> > > >> > > >> > > >> >-- > >> >Tammo van Lessen - http://www.taval.de > >> >
