atom feed3 messages in net.java.dev.glassfish.ejbRe: Conjoint using of EJB3 and EJB2
FromSent OnAttachments
Dr. Martin H. LudwigJan 5, 2009 6:42 am 
Kenneth SaksJan 5, 2009 7:40 am 
Dr. Martin H. LudwigJan 5, 2009 10:52 am 
Subject:Re: Conjoint using of EJB3 and EJB2
From:Kenneth Saks (Kenn@Sun.COM)
Date:Jan 5, 2009 7:40:33 am
List:net.java.dev.glassfish.ejb

On Jan 5, 2009, at 9:43 AM, Dr. Martin H. Ludwig wrote:

Hello,

first: Sorry for crossposting to the users- and the ejb-list, but I was not shure about the correct list because there is very low traffic on the ejb-list.

I have the following problem:

I made two beans for glassfish: one with annotations and only two classes (Bean2 and Bean2Impl) and the other one with a deployment-descriptor and three classes (SimpleBeanHome, SimpleBean and SimpleBeanImpl). I deployed these classes in two different EAR-files.

I made a client first talking to the EJB3-bean and then to the EJB2-bean. The first connection works well, the second connection gives to following exception:

java.lang.ClassCastException: com.webage.ejbs._SimpleBeanHome_DynamicStub cannot be cast to com.webage.ejbs.SimpleBean at com.webage.client.TestClient.runTest(TestClient.java:25) at com.webage.client.TestClient.main(TestClient.java:33)

Has anyone an idea for a solution or an example?

Hi Martin,

When using the EJB 2.x client view, the object returned from the lookup is a reference to the Home interface, not the component interface. The portable way to code this is :

Object o = ctx.lookup(...); SimpleBeanHome home = (SimpleBeanHome) PortableRemoteObject.narrow(o, SimpleBeanHome.class); SimpleBean bean = home.create(); ...

A direct cast to SimpleBeanHome will work in our implementation but it's not guaranteed to be portable.

--ken

Thank you for your help!

Martin

Here the content of the files:

ejb-jar.xml:

--- <?xml version="1.0" encoding="ASCII"?> <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> <display-name>GFT1EJB</display-name>

<enterprise-beans> <session> <description>SimpleBean</description> <display-name>SimpleBean</display-name> <ejb-name>SimpleBean</ejb-name> <home>com.webage.ejbs.SimpleBeanHome</home> <remote>com.webage.ejbs.SimpleBean</remote> <ejb-class>com.webage.ejbs.SimpleBeanImpl</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans>

</ejb-jar>

---

sun-ejb-jar.xml:

--- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd"> <sun-ejb-jar> <enterprise-beans> <ejb> <ejb-name>SimpleBean</ejb-name> <jndi-name>ejb/SimpleBean</jndi-name> </ejb> </enterprise-beans>

</sun-ejb-jar>

---

SimpleBean.java:

--- package com.webage.ejbs; import java.rmi.RemoteException;

import javax.ejb.EJBObject;

public interface SimpleBean extends EJBObject {

public String sayHello(String name) throws RemoteException;

}

---

SimpleBeanHome.java:

--- package com.webage.ejbs;

import java.rmi.RemoteException;

import javax.ejb.CreateException; import javax.ejb.EJBHome;

public interface SimpleBeanHome extends EJBHome {

public static final String JNDI_NAME = "SimpleBeanHome";

SimpleBean create() throws CreateException, RemoteException; }

---

SimpleBeanImpl.java:

--- package com.webage.ejbs;

import java.rmi.RemoteException;

import javax.ejb.*;

public class SimpleBeanImpl implements SessionBean {

private static final long serialVersionUID = -5166616433705338964L;

protected SessionContext ejbContext;

public String sayHello(String name){ return "Guten Tag 2 " + name + "!"; }

public void ejbActivate() throws EJBException, RemoteException {}

public void ejbPassivate() throws EJBException, RemoteException {}

public void ejbRemove() throws EJBException, RemoteException {}

public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException { this.ejbContext = ctx; }

}

---

and TestClient.java:

--- package com.webage.client;

import javax.naming.*; import com.meins.ejbs.Bean2; import com.webage.ejbs.SimpleBean;

public class TestClient {

public void runTest() throws Exception { InitialContext ctx = new InitialContext();

// the ejb3-bean Bean2 bean2 = (Bean2) ctx.lookup("ejb/Bean2JNDI"); String result2 = bean2.sayHello("Billy Bob"); System.out.println(result2);

// the ejb2-bean SimpleBean bean = (SimpleBean) ctx.lookup("ejb/SimpleBean"); String result = bean.sayHello("Bully Bib"); System.out.println(result); }

public static void main(String[] args) { try { TestClient cli = new TestClient(); cli.runTest();

} catch (Exception e) { e.printStackTrace(); } } }