Re: TravelsampleHi,

I think the key problem here is that TravelCatalog component is 
composite-scoped. It has a conversational reference to the Search providers 
(i.e, the conversation is between the TravelCatalog and one of the Search 
providers). The web browser is the client making JSONRPC calls into the 
TravelCatalog component. 

As long as the server is running, there is only one instance of 
TravelCatalogImpl with the service proxies of Search injected. The side effect 
is that if TravelCatalogImpl instance becomes staled due to the expired 
conversation, it cannot serve further requests from the web browser. I think 
the usage of conversation is probably wrong here.

To simplify this, let's use a few symbols for the participants:

1) W: The web client (multiple instances)
2) T: The travel catalog (A singleton)
3) S: The search provider (stateless, multiple instances)

The conversation is between T and S. What is it used for? Ideally, the 
conversation should be correlated to W's interaction with T.

Thanks,
Raymond

From: Albert Tsang 
Sent: Thursday, February 18, 2010 8:45 AM
To: [email protected] 
Subject: Re: Travelsample


Raymond,

Regarding #1,

I believe the model is correct. However, if a new search is initiated with the 
old search params, I assume that the conversation is uniquely ID’ed through the 
use of the conversation for the request and callback response?

If the conversation expires I think and exception should be logged and bubbled 
back to the client.  

The problem I’m experiencing is that all subsequent searches are receiving that 
error making the travelsample app unsusable after that point.  Is that internal 
to how it’s been developed or is it in infrastructure level piece of code?

The expected behavior I would imagine would be.  A search request goes out, if 
the callback doesn’t conclude the conversation, the conversation expires, an 
exception is thrown, it may bubble back to the client depending on how the 
exception is caught, but that a new search request with a new conversation ID 
is ensued.

Also – why is the conversation expiring?  Every search through this 
travelsample app is coming back just fine (I can see the search results) it’s 
just that after a while, I’m seeing this error.

-a-


On 2/17/10 4:10 PM, "Raymond Feng" <[email protected]> wrote:


  Hi,
   
  I can reproduce the problem now. It leads to two questions:
   
  1) Do we model the conversation correctly here for the search? Do we use the 
conversation to correlate the request and response for the asynchronous search?
  2) What's the correct behavior if the conversation expires? Should the 
container start a new conversation instead of complaining about the expiration?
   
  Thanks,
  Raymond

  From: Albert Tsang <mailto:[email protected]>  
  Sent: Wednesday, February 17, 2010 10:10 AM
  To: [email protected] 
  Subject: Re: Travelsample

  Thanks Raymond,  fyi – you must execute a search, let some time pass, reload 
or refresh the page and then re-run the exact search.  Any subsequent search 
against the application should generate the exception.  Thanks!

  -a-


  On 2/17/10 10:00 AM, "Raymond Feng" <[email protected]> wrote:


    Hi,
     
    Thanks for the update. I'll try to  reproduce the problem and see what goes 
wrong  here.
     
    Raymond

    From: Albert Tsang <mailto:[email protected]>   
    Sent: Wednesday, February 17, 2010 9:28 AM
    To: [email protected] 
    Subject:  Re: Travelsample

    I added in @ConversationalAttributes and set maxAge to  5 minutes.  I added 
this to all interfaces in the travelsample that were  annotated as 
@Conversational and still get this error.

    -  a-


    On 2/15/10 11:45 PM, "Albert Tsang" <[email protected]>  wrote:

     

      OK, will try thanks!

      -a-


      On  2/15/10  11:41 PM, "Raymond Feng" <[email protected]>   wrote:

       
       

        Hi,
         
        In OSOA specs of SCA, it   says:
         
        "  

        1662  The @ConversationAttributes annotation type is used to  define a 
set of  attributes which apply  to

        1663  conversational interfaces of  services or references of a Java 
class. The  annotation has the  following

        1664 attributes:

        1665  •  maxIdleTime (optional) -  The  maximum time that can pass 
between operations within a   single

        1666  conversation. If more time than this  passes, then the container 
may  end the conversation.

        1667  • maxAge (optional) - The   maximum time that the entire 
conversation can remain active. If   more

        1668  time than this passes, then the container  may end the  
conversation.

        1669 • singlePrincipal (optional)  –  If true, only the principal (the 
user) that started the  conversation  has

        1670  authority to continue the conversation. The  default value is  
false.

        "

        Can  you try to adjust the maxAge using  @ConversationAttriutes against 
the Java  component implementation  class?


        From: Albert Tsang <mailto:[email protected]>    
        Sent: Monday, February 15, 2010 4:11  PM
        To: [email protected]  
        Subject:  Travelsample

        I managed to get the  travelsample working with the ui,  booking, 
travelcatalog and payment  working on one host and the search  function with 
callback working on  another. 
        After a while, coming back to  the ui client I get the  following error 
after reloading the page and trying  to execute a  search...

        org.osoa.sca.ConversationEndedException:   Conversation null has 
expired.
            at   
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.conversationPreinvoke(JDKInvocationHandler.java:464)
            at   
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:340)
            at   
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:193)
            at   $Proxy56.searchAsynch(Unknown Source)
            at   
com.tuscanyscatours.travelcatalog.impl.TravelCatalogImpl.search(TravelCatalogImpl.java:86)
            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:597)
            at   
org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:156)
            at   
org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:60)
            at   
org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke(SCABindingInvoker.java:61)
            at   
org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:60)
            at   
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:346)
            at   
org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:193)
            at   $Proxy59.search(Unknown Source)
            at   
com.tuscanyscatours.impl.SCAToursImpl.search(SCAToursImpl.java:58)
            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:597)
            at   
org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:156)
            at   
org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:67)
            at   
org.apache.tuscany.sca.binding.jsonrpc.provider.JSONRPCServiceServlet.handleJSONRPCMethodInvocation(JSONRPCServiceServlet.java:257)
            at   
org.apache.tuscany.sca.binding.jsonrpc.provider.JSONRPCServiceServlet.handleServiceRequest(JSONRPCServiceServlet.java:160)
            at   
org.apache.tuscany.sca.binding.jsonrpc.provider.JSONRPCServiceServlet.service(JSONRPCServiceServlet.java:97)
            at   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at   
org.apache.tuscany.sca.host.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:107)
            at   
org.apache.tuscany.sca.host.webapp.TuscanyServletFilter.doFilter(TuscanyServletFilter.java:94)
            at   
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at   
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at   
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at   
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at   
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at   
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at   
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at   
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
            at   
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
            at   
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
            at   
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
            at   java.lang.Thread.run(Thread.java:619)







Reply via email to