On 9/5/07, JunJie Nan <[EMAIL PROTECTED]> wrote:
>
> hi,
>
> I wrote some code on
> @ConversationAttributes(maxIdleTime="1 seconds",
>         maxAge="2 seconds",
>         singlePrincipal=false)
> feature and found below error message:
> java.io.NotSerializableException:
> org.apache.tuscany.sca.core.context.ConversationImpl
>
> Anybody can give me some hints? Thanks!
>
> The error message reported by JUnit:
>
> java.io.NotSerializableException:
> org.apache.tuscany.sca.core.context.ConversationImpl
>     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java
> :1108)
>     at java.io.ObjectOutputStream.defaultWriteFields(
> ObjectOutputStream.java
> :1462)
>     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java
> :1434)
>     at java.io.ObjectOutputStream.writeOrdinaryObject(
> ObjectOutputStream.java:1377)
>     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java
> :1106)
>     at java.io.ObjectOutputStream.defaultWriteFields(
> ObjectOutputStream.java
> :1462)
>     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java
> :1434)
>     at java.io.ObjectOutputStream.writeOrdinaryObject(
> ObjectOutputStream.java:1377)
>     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java
> :1106)
>     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>     at samples.hex.HexTest.testConversationAttributesSinglePrincipalFalse(
> HexTest.java:220)
>
>
>
> The JUnit Code:
>     @Test
>     public void testConversationAttributesSinglePrincipalFalse()
>             throws InterruptedException, IOException,
> ClassNotFoundException
> {
>         CartService cart1 = hex.getService(CartService.class,
>                 "CartComponent/CartService");
>         cart1.updateItem("Portus", 1);
>         ByteArrayOutputStream baos = new ByteArrayOutputStream();
>         ObjectOutputStream os = new ObjectOutputStream(baos);
>         os.writeObject(cart1);
>         os.close();
>         ObjectInputStream oi = new ObjectInputStream(new
> ByteArrayInputStream(
>                 baos.toByteArray()));
>         CartService cart2 = (CartService) oi.readObject();
>         assertNotNull(cart2);
>         cart2.updateItem("Avis", 1);
>         assertEquals(2, cart1.getItems().size());
>         assertEquals(2, cart2.getItems().size());
>     }
>
> The component definition:
>     <component name="CartComponent">
>         <implementation.java class="samples.hex.cart.impl.CartImpl"/>
>     </component>
>
> The Interface:
> package samples.hex.cart.services;
>
> import java.util.Map;
>
> import org.osoa.sca.annotations.Conversational;
> import org.osoa.sca.annotations.EndsConversation;
>
> @Conversational
> public interface CartService{
>     public void updateItem(String itemID, int quantity);
>     @EndsConversation
>     public void empty();
>     public Map<String, Integer> getItems();
> }
>
> The implementation:
>
> package samples.hex.cart.impl;
>
> import java.util.HashMap;
> import java.util.Map;
>
> import org.osoa.sca.annotations.ConversationAttributes;
> import org.osoa.sca.annotations.ConversationID;
> import org.osoa.sca.annotations.Destroy;
> import org.osoa.sca.annotations.Init;
> import org.osoa.sca.annotations.Scope;
> import org.osoa.sca.annotations.Service;
>
> import samples.hex.cart.services.CartService;
>
> @Scope("CONVERSATION")
> @Service(CartService.class)
> @ConversationAttributes(maxIdleTime="1 seconds",
>         maxAge="2 seconds",
>         singlePrincipal=false)
> public class CartImpl implements CartService {
>
>     @ConversationID
>     protected String conversationID;
>
>     private Map<String, Integer> cart;
>     @Init
>     protected void init(){
>         if(cart==null)
>             cart = new HashMap<String, Integer>();
>     }
>
>     public void empty() {
>         System.out.println("[empty] "+conversationID + ":" + this);
>     }
>
>     public Map<String, Integer> getItems() {
>         return cart;
>     }
>
>     public void updateItem(String itemID, int quantity) {
>         if(quantity<=0)
>             cart.remove(itemID);
>         cart.put(itemID, quantity);
>         System.out.println(conversationID + ":" + this);
>     }
>
>     @Destroy
>     protected void destroy(){
>         empty();
>     }
> }
>
>
> --
> Cheers
> Jun Jie Nan
>   ∧ ∧��
> ミ^ō^ミ灬)~
>
Hi Jun

You've come across an existing limitation. I.e. the serializing of service
references with conversations. TUSCANY-1511 has a note about it. I thought
there was a specific one for this but I can't see it immediately (JIRA is
down at the moment).

Simon

Reply via email to