[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-3984) Problem while serialization of POJO components during session replication

Marius Oancea (JIRA) jira-events at lists.jboss.org
Tue Mar 10 03:45:22 EDT 2009


    [ https://jira.jboss.org/jira/browse/JBSEAM-3984?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12456341#action_12456341 ] 

Marius Oancea commented on JBSEAM-3984:
---------------------------------------

I think there is a problem with this fix. 

Because transactionMetadata is transient it can be null is come circumstances.


You need to replace:
private TransactionMetadata lookupTransactionMetadata(AnnotatedElement element)
   {
      TransactionMetadata metadata = transactionMetadata.get(element);
      
      if (metadata == null)
      {
         metadata = loadMetadata(element);
      }
      
      return metadata;
   }


with something like:
private TransactionMetadata lookupTransactionMetadata(AnnotatedElement element)
   {
      TransactionMetadata metadata = getTransactionMetadata().get(element);
      
      if (metadata == null)
      {
         metadata = loadMetadata(element);
      }
      
      return metadata;
   }

   private Map<AnnotatedElement, TransactionMetadata> getTransactionMetadata() {
	   if (transactionMetadata == null) {
		   transactionMetadata = new HashMap<AnnotatedElement, TransactionMetadata>();
	   }
	   return transactionMetadata;
   }


If you don't do this you will get NPE when an desereliased interceptor is used.

> Problem while serialization of POJO components during session replication
> -------------------------------------------------------------------------
>
>                 Key: JBSEAM-3984
>                 URL: https://jira.jboss.org/jira/browse/JBSEAM-3984
>             Project: Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.1.1.GA
>         Environment: Windows
>            Reporter: Marius Oancea
>            Assignee: Norman Richards
>             Fix For: 2.1.2.CR1
>
>         Attachments: TransactionInterceptor.java
>
>
> On replication of conversation scoped seam components referencing an stateless EJB you get:
> 14:23:01,480 ERROR [JBossCacheService] externalizeSession(): exception occurred
> externalizing session SessionBasedClusteredSession[id: yQ8dwYuawaXaMRejYNyIWA**.
> node1 lastAccessedTime: 1236169379964 version: 46 lastOutdated: 0]
> java.io.NotSerializableException: java.lang.reflect.Method
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
>         at java.util.HashMap.writeObject(HashMap.java:984)
>         at sun.reflect.GeneratedMethodAccessor153.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
> sorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:89
> 0)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
> 33)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
> a:1284)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
> :1369)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
> 41)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
> a:1284)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
>         at java.util.ArrayList.writeObject(ArrayList.java:569)
>         at sun.reflect.GeneratedMethodAccessor154.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
> sorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:89
> 0)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
> 33)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
> a:1284)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
> :1369)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
> 41)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
> a:1284)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
>         at java.util.concurrent.ConcurrentHashMap.writeObject(ConcurrentHashMap.
> Cluster was composed of 2 nodes. Each node on a different machine.
> I have tryed to follow the hints of http://markmail.org/message/lhf5tsnwczsonp7e#query:Seam%20TransactionMetadata%20serializable+page:1+mid:lhf5tsnwczsonp7e+state:results
> so that i made userTransactionas  transient. After this change, all started to work.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list