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