ClassCastException nach JDNI Lockup

J

JogiBär

Gast
Hi Folks,

ich habe auf einem Glassfish-Server (3.1.2) zwei Projekte deployed. Ein EJB Projekt, welches für meine Logik und Datenhaltung zuständig sein soll und ein DynmicWebProject für die GUI.

Das EJB Projket habe ich im Build Path hinzugefügt.
01c1k9jgp8o2.jpg


Innerhalb des EJB Projektes habe ich eine SessionBean:

Java:
/**
 * Session Bean implementation class ClientManagementBean
 */
@Singleton
@LocalBean
public class ClientManagementBean{

	/**
     * Default constructor. 
     */
    public ClientManagementBean() {
        // TODO Auto-generated constructor stub
    }

 // internal stack
 	private List<UserClient> clients = new ArrayList<UserClient>();
...

mit entsprechendem Business-Interface definiert:
Java:
@Remote
public interface ClientManagementBeanRemote{

	public void addClient(UserClient client);
	...

Nun möchte ich im WebProjekt auf diese Klasse zugreifen. Hierzu habe ich folgenden Code geschrieben:
Java:
Properties props = new Properties();

			props.setProperty("java.naming.factory.initial",
					"com.sun.enterprise.naming.SerialInitContextFactory");

			props.setProperty("java.naming.factory.url.pkgs",
					"com.sun.enterprise.naming");

			props.setProperty("java.naming.factory.state",
					"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");

			Context context = new InitialContext(props);

			Object initObj = context
					.lookup("ClientManagementBean");
			ClientManagementBean clientManager = (ClientManagementBean) initObj;

Der Lockup funktioniert auch und gibt mir ein entsprechendes Objekt zurück. Mein Problem besteht nun im nachfolgenden Cast:
Code:
ClientManagementBean clientManager = (ClientManagementBean) initObj;).

Dieser verursachte zunächst einmal "java.lang.NoClassDefFoundError: logic/mgntBeans/ClientManagementBean". Daraufhin habe ich das EJB project als EJB jar exportiert und im WebProjekt unter WEB-INF/lib/ hinzugefügt. Nun bekomme ich jedoch eine ClassCastException:

Code:
java.lang.ClassCastException: logic.mgntBeans.__EJB31_Generated__ClientManagementBean__Intf____Bean__ cannot be cast to logic.mgntBeans.ClientManagementBean

Nach einiger Recherche habe ich noch im Classpath die gf-client.jar hinzugefügt, was jedoch zu keiner Verbesserung führte.

unbenannt2toh61updm4.jpg


Nun meine Fragen:
- Was habe ich falsch gemacht, das der Cast nicht funktioniert?
- Gibt es eine bessere Methode das ClassNotFound Problem zu umgehen. Aktuell muss ich bei jeder neuen vedion die jar im WebProjket aktuallisieren. Gibt es hierzu eine automatisierung?

Vielen Dank im Vorruas
JogiBär
 
J

Jogibär

Gast
Hi,

konnte das Problem lösen, indem ich ein EnterpriseApplicationProjekt angelegt habe und die beiden Projkete diesem zugeordnet habe.

Gruß
Jogibär
 

FArt

Top Contributor
Hi,

konnte das Problem lösen, indem ich ein EnterpriseApplicationProjekt angelegt habe und die beiden Projkete diesem zugeordnet habe.

Gruß
Jogibär

Vermutlich hast du das Problem nur scheinbar gelöst, denn du kannst immer noch nicht erklären, wie hier eine ClassCastException entstehen kann.

Ohne mit Glassfish bisher viel gearbeitet zu haben, vermute ich dass es sich hier wie bei anderen AS verhält: abhängig vom Assembly und von der Konfiguration (WAR, EAR) wird das Classloading im AS anders realisiert. Genaus kann man nur herausfinden, wenn man weiß wie der AS dort arbeitet und wie deine Applikation genau gepackt ist.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben