[jboss-user] [EJB 3.0] - NamingException: Could not dereference object - EJB 3.0 Stat

htran_888 do-not-reply at jboss.com
Mon Feb 19 16:28:22 EST 2007


Hi All,

I am receiving the following error when trying to reference 2 Stateful Session beans (TransactionPersistenceContext & ExtendedPersistenceContext):
--------------------------------------------------------------------------------------
Distributing D:\Test\EJB3ex511-client\dist\EJB3ex511-client.jar to [org.jboss.deployment.spi.LocalhostTarget at 13aaba1]
Deploying D:\Test\EJB3ex511-client\dist\EJB3ex511-client.jar
Deploying D:\Test\EJB3ex511-client\dist\EJB3ex511-client.jar
Applicaton Deployed
Operation start started
Operation start completed
run-deploy:
run-tool:
run-jar:
log4j:WARN No appenders could be found for logger (org.jboss.security.SecurityAssociation).
log4j:WARN Please initialize the log4j system properly.
no cabin should be null: null
Master Suite
1
1
3
Updating detached cabin instance with new bed count of 4
Finding cabin to see it has been updated with a merge() on server
new bed count is: 4
javax.naming.NamingException: Could not dereference object [Root exception is java.lang.reflect.UndeclaredThrowableException]        at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1150)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:705)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at ejb3ex511client.Main.main(Main.java:50)
Caused by: java.lang.reflect.UndeclaredThrowableException
        at $Proxy1.createProxy(Unknown Source)
        at org.jboss.ejb3.JndiProxyFactory.getObjectInstance(JndiProxyFactory.java:52)

--------------------------------------------------------------------------------------

Here are the codes for 1 Stateless (TravelAgentBean - pre-requisite) & 1 Stateful (TransactionPersistenceContextBean) session beans and a Client manipulating these beans:

@Stateless
  | public class TravelAgentBean implements TravelAgentRemote
  | {
  |    @PersistenceUnit(unitName="EJB3ex51") private EntityManagerFactory factory;
  |    @PersistenceContext(unitName="EJB3ex51") private EntityManager manager;
  |     
  |    public void createCabin(Cabin cabin)
  |    {
  |       manager.persist(cabin);
  |    }
  | 
  |    public Cabin findCabin(int pKey)
  |    {
  |       return manager.find(Cabin.class, pKey);
  |    }
  |    
  |    public void updateCabin(Cabin cabin)
  |    {
  |       manager.merge(cabin);
  |    }


@Stateful
  | public class TransactionPersistenceContextBean implements TransactionPersistenceContextRemote
  | {
  |     @PersistenceContext(unitName="titan", type=PersistenceContextType.TRANSACTION)
  |     private EntityManager manager;
  | 
  |     private Cabin cabin;
  | 
  |     public void setCabin(int pk)
  |     {
  |        cabin = manager.find(Cabin.class, pk);
  |     }
  | 
  |     public void updateBedCount(int newBedCount)
  |     {
  |        cabin.setBedCount(newBedCount);
  |     }
  | 
  |     @Remove
  |     public void remove()
  |     {
  |     }
  | }
    
public static void main(String[] args) {
  |         
  |         try 
  |         {
  |             Context jndiContext = getInitialContext();
  |             Object ref = jndiContext.lookup("travelagent.TravelAgentRemote");
  |             TravelAgentRemote dao = (TravelAgentRemote)ref;
  |             
  |             Cabin noCabin = dao.findCabin(1);
  |             System.out.println("no cabin should be null: " + noCabin);
  | 
  |             Cabin cabin_1 = new Cabin();
  |             cabin_1.setId(1);
  |             cabin_1.setName("Master Suite");
  |             cabin_1.setDeckLevel(1);
  |             cabin_1.setShipId(1);
  |             cabin_1.setBedCount(3);
  | 
  |             dao.createCabin(cabin_1);
  | 
  |             Cabin cabin_2 = dao.findCabin(1);
  |             System.out.println(cabin_2.getName());
  |             System.out.println(cabin_2.getDeckLevel());
  |             System.out.println(cabin_2.getShipId());
  |             System.out.println(cabin_2.getBedCount());
  | 
  | 	    System.out.println("Updating detached cabin instance with new bed count of 4");
  | 	    cabin_2.setBedCount(4);
  | 	    dao.updateCabin(cabin_2);
  | 
  | 	    System.out.println("Finding cabin to see it has been updated with a merge() on server");
  |             Cabin cabin_3 = dao.findCabin(1);
  | 	    System.out.println("new bed count is: " + cabin_3.getBedCount());
  |             
  |             ref = jndiContext.lookup("travelagent.TransactionPersistenceContextRemote");
  |             TransactionPersistenceContextRemote txBean = (TransactionPersistenceContextRemote)ref;
  | 
  | 	    Cabin fetchedCabin = dao.findCabin(1);
  |             int oldBedCount = fetchedCabin.getBedCount();
  | 
  | 	    System.out.println("Set up transaction persistence context stateful bean");
  | 	    txBean.setCabin(1);
  | 	    txBean.updateBedCount(5);
  | 
  | 	    fetchedCabin = dao.findCabin(1);
  | 	    System.out.println("Cabin bed count will still be " + oldBedCount + ": " + fetchedCabin.getBedCount());
  | 
  | 	    System.out.println("Set up extended persistence context stateful bean");
  | 
  |             ref = jndiContext.lookup("travelagent.ExtendedPersistenceContextRemote");
  |             ExtendedPersistenceContextRemote extendedBean = (ExtendedPersistenceContextRemote)ref;
  | 
  | 	    extendedBean.setCabin(1);
  | 	    extendedBean.updateBedCount(5);
  | 
  | 	    fetchedCabin = dao.findCabin(1);
  | 	    System.out.println("Cabin bed count will be 5: " + fetchedCabin.getBedCount());
  | 
  | 	    // cleanup
  | 	    txBean.remove();
  | 	    extendedBean.remove();
  | 
  |         } 
  |         catch (javax.naming.NamingException ne)
  |         {
  | 	    ne.printStackTrace();
  | 	}
  |     }
  |     
  |     public static Context getInitialContext() 
  |         throws javax.naming.NamingException 
  |     {
  |         return new javax.naming.InitialContext();
  |     }

I have tried to split the client into separate classes but the outcome is still the same.

I am running Netbeans 5.5, JBoss 4.0.5 AS on Windows XP platform.

I have struggled with this issue for many days after trying different method of deployment including using both sun-appserver-pe9.0 & JBoss 4.0.5 AS without success.

This exercise is from workbook (ex05_1), title EJB 3.0 by Bill Burke.

Any assistance would be very much appreciated.

Thanks,

Henry

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4019038#4019038

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4019038



More information about the jboss-user mailing list