-
Bug
-
Resolution: Done
-
Major
-
EJB 3.0 Beta 1
-
None
-
Standard java 1.5.0_04 on Linux
When a session bean includes its context, like so....
/*
- Ejb3AdditionBean.java
* - Created on July 15, 2005, 9:20 AM
* - To change this template, choose Tools | Options and locate the template under
- the Source Creation and Management node. Right-click the template and choose
- Open. You can then make changes to the template in the Source Editor.
*/
package com.hb.dataBinding.service.instrument.session;
import javax.ejb.Remote;
import java.util.Properties;
import javax.ejb.Stateless;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import com.hb.dataBinding.api.instrument.session.Access;
import com.hb.dataBinding.service.instrument.entity.Ejb3InstrumentTypeImplBean;
import javax.annotation.Resource;
import javax.ejb.SessionContext;
/**
- @author tward
*/
@Stateful
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@Remote(Access.class)
public class Ejb3InstrumentAccessBean implements Access, java.io.Serializable {
@Resource
SessionContext _context;
@PersistenceContext(unitName="datawarehouse")
private EntityManager manager;
/**
- Creates a new instance of Ejb3AdditionBean
*/
public Ejb3InstrumentAccessBean() { }
public static void main( String[] args ) throws Exception
{ Properties env = new Properties(); env.put( "java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" ); env.put( "java.naming.provider.url", "https://" + args[0] + ":8443/invoker/JNDIFactory" ); env.put( "java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces" ); //env.put( "org.jboss.security.ignoreHttpsHost", "true" ); InitialContext ctx = new InitialContext( env ); Access calculator = (Access) ctx.lookup( Access.class.getName() ); System.out.println( "1 + 1 = " + calculator.add( 1, 1 ) ); //System.out.println("1 - 1 = " + calculator.subtract(1, 1)); }public double add( double x, double y )
{ final Ejb3InstrumentTypeImplBean bean = manager.find( Ejb3InstrumentTypeImplBean.class, new Integer( 4 ) ); System.out.println( "Got a bean: " + bean ); return x + y; } }A stack overflow is caused when the bean tries to passivate (apparently). Setting the SessionContext to transient (the java keyword, not the aspect) fixes the problem.
Here is the trace...
10:46:15,257 INFO [STDOUT] Exception in thread "Timer-7"
10:46:15,258 INFO [STDOUT] java.lang.StackOverflowError
10:46:15,270 INFO [STDOUT] at java.util.Hashtable.get(Hashtable.java:336)
10:46:15,271 INFO [STDOUT] at java.util.Properties.getProperty(Properties.java:774)
10:46:15,271 INFO [STDOUT] at org.jboss.util.property.PropertyMap.getProperty(PropertyMap.java:627)
10:46:15,271 INFO [STDOUT] at java.lang.System.getProperty(System.java:629)
10:46:15,271 INFO [STDOUT] at org.jboss.system.JBossRMIClassLoader.getClassAnnotation(JBossRMIClassLoader.java:105)
10:46:15,271 INFO [STDOUT] at java.rmi.server.RMIClassLoader.getClassAnnotation(RMIClassLoader.java:364)
10:46:15,271 INFO [STDOUT] at sun.rmi.server.MarshalOutputStream.annotateClass(MarshalOutputStream.java:75)
10:46:15,272 INFO [STDOUT] at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1168)
10:46:15,272 INFO [STDOUT] at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1121)
10:46:15,272 INFO [STDOUT] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1278)
10:46:15,272 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
10:46:15,272 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
......
10:46:15,527 INFO [STDOUT] at org.jboss.ejb3.stateful.StatefulBeanContext.writeExternal(StatefulBeanContext.java:120)
10:46:15,527 INFO [STDOUT] at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304)
10:46:15,528 INFO [STDOUT] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1282)
10:46:15,528 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
10:46:15,528 INFO [STDOUT] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1369)
10:46:15,528 INFO [STDOUT] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1341)
10:46:15,528 INFO [STDOUT] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1284)
10:46:15,528 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
10:46:15,529 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
10:46:15,529 INFO [STDOUT] at java.rmi.MarshalledObject.(MarshalledObject.java:92)
10:46:15,529 INFO [STDOUT] at org.jboss.ejb3.stateful.StatefulBeanContext.writeExternal(StatefulBeanContext.java:120)
10:46:15,529 INFO [STDOUT] at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304)
10:46:15,529 INFO [STDOUT] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1282)
10:46:15,530 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
10:46:15,530 INFO [STDOUT] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1369)
10:46:15,530 INFO [STDOUT] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1341)
10:46:15,530 INFO [STDOUT] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1284)
10:46:15,530 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)
10:46:15,530 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
10:46:15,531 INFO [STDOUT] at java.rmi.MarshalledObject.(MarshalledObject.java:92)
10:46:15,531 INFO [STDOUT] at org.jboss.ejb3.stateful.StatefulBeanContext.writeExternal(StatefulBeanContext.java:120)
10:46:15,531 INFO [STDOUT] at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304)
3169.290: [Full GC 3169.290: [CMS3170.268: [CMS-concurrent-mark: 0.978/60.972 secs]