ClassCastException bei Aufruf einer Stateful Session Bean

Urmel103

Grünschnabel
Hallo,

ich schau hier schon ne ganze Weile gerne rein und meistens passt auch irgendein Post zu meinem Problem. Diesmal leider nicht.

Ich setzte mich gerade mit JEE5 auseinander. Hatte das im Studium schon angekratzt aber nur Basics alla "Es gibt da was".

Momentan nutze ich JBoss 5.0.0 GA und Eclipse(Beim 4.2.3 gabs JNDI-Probleme mit dem einbinden von EJB3 in Servlets, sowohl DI als auch InitialContext lookup ging nicht ohne Sonderkonfiguration).

Ich hab aus Spaß eine Stateful Session Bean geschrieben, welche Methoden zum lesen und schreiben (via JPA) von Daten in eine MySQL Datenbank bereitstellt. Das ganze funktioniert auch wunderbar mit einem Client per remote Interface. Möchte ich diese Bean nun in einem Servlet lokal nutzen geht das im Prinzip auch (Leider hat DI nicht geklappt, aber lookup funktioniert) solange ich die Methoden nutze, welche keinen Rückgabewert haben oder halt Standard (z.B. String, boolean,...). Sobald ich ein Objekt einer selbstgeschriebenen Klassen zurückgebe bekommen ich eine ClassCastException welche mir sagt, dass ich nicht von meinPack.meineKlasse nach meinPack.meineKlasse casten kann. und das versteh ich mal gar nicht. Benutze die gleichen Interfaces und Packages in Jar und War.

Also hier der Code.

Local Interface:

Code:
package de.sge.taskmanager.interfaces;

import java.util.Collection;
import java.util.Date;

import javax.ejb.Local;

import de.sge.taskmanager.exceptions.IncorrectLoginInformationException;
import de.sge.taskmanager.exceptions.NoPermissionException;
import de.sge.taskmanager.exceptions.NoUniqueResultFoundException;
import de.sge.taskmanager.exceptions.WrongPasswordException;
import de.sge.taskmanager.transferObjects.ProjectTO;
import de.sge.taskmanager.transferObjects.TaskTO;
import de.sge.taskmanager.transferObjects.UserTO;

@Local
public interface TaskManagerServiceLocal {

	public boolean login(String username,String password)throws NoUniqueResultFoundException,
	IncorrectLoginInformationException,
	WrongPasswordException;
	
	public String getNameOfUser()throws NoPermissionException;
	
	public UserTO getUser()throws NoPermissionException;
	
	public void changePassword(String oldPassword,String newPassword)throws NoPermissionException,WrongPasswordException;
	
	public void createTask(String name,String desc,Integer pid,Date dueDate)throws NoPermissionException;
	
	public Collection<TaskTO> getAllTasks()throws NoPermissionException;
	
	public void deleteTask(Integer tid)throws NoPermissionException;
	
	public void changeTaskState(Integer tid,String state)throws NoPermissionException;
	
	public void createProject(String name,String desc)throws NoPermissionException;
	
	public Collection<ProjectTO> getAllProjects()throws NoPermissionException;
	
	public void deleteProject(Integer pid)throws NoPermissionException;

	public Collection<TaskTO> getTaskForProject(Integer pid)throws NoPermissionException;
	
}

Statefull Session Bean Implementierung

Code:
package de.sge.taskmanager.services;

import java.sql.Time;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.sql.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Logger;

import de.sge.taskmanager.exceptions.*;
import de.sge.taskmanager.interfaces.TaskManagerServiceLocal;
import de.sge.taskmanager.interfaces.TaskManagerServiceRemote;
import de.sge.taskmanager.persistence.Project;
import de.sge.taskmanager.persistence.Task;
import de.sge.taskmanager.persistence.User;
import de.sge.taskmanager.transferObjects.ProjectTO;
import de.sge.taskmanager.transferObjects.TaskTO;
import de.sge.taskmanager.transferObjects.UserTO;

@Stateful(name="TaskManagerService")
public class TaskManagerServiceBean implements TaskManagerServiceRemote,TaskManagerServiceLocal {

	Logger log;

	@PersistenceContext
	EntityManager em;

	User user = null;

	@PostConstruct
	public void ejbCreate() {
		log = Logger.getLogger("TaskManagerServiceBean.class");
	}

	public boolean login(String username, String password)
			throws NoUniqueResultFoundException,
			IncorrectLoginInformationException, WrongPasswordException {

		User u = null;

		List users = em.createQuery("from User u where u.username =:username")
				.setParameter("username", username).getResultList();

		if (users.size() > 1) {
			log.error("No unique Result Found for User: " + username
					+ " and Pass: " + password);
			throw new NoUniqueResultFoundException();

		} else if (users.size() <= 0) {
			log.error("Incorrect Login Information for User: " + username
					+ " and Pass: " + password);
			throw new IncorrectLoginInformationException();
		} else {

			u = (User) users.get(0);
			if (u.getPassword().equals(password)) {
				user = u;
				return true;
			} else {
				user = null;
				throw new WrongPasswordException();
			}
		}

	}

	public String getNameOfUser() throws NoPermissionException {
		if (user != null) {
			return user.getName();
		} else {
			throw new NoPermissionException();
		}
	}

	public UserTO getUser() throws NoPermissionException {
		if (user != null) {
			return user.generateUserTO();
		} else {
			throw new NoPermissionException();
		}
	}

	public void createProject(String name, String desc) throws NoPermissionException {
		if (user != null) {
			Project project = new Project();

			project.setP_name(name);
			project.setDescription(desc);
			project.setCreationDate(new Date(new java.util.Date().getTime()));
			project.setCreationTime(new Time(new java.util.Date().getTime()));

			em.persist(project);
		} else {
			throw new NoPermissionException();
		}
	}

	public void createTask(String name, String desc, Integer pid,
			java.util.Date dueDate) throws NoPermissionException {
		if (user != null) {
			Task task = new Task();

			task.setT_name(name);
			task.setDescription(desc);
			if (pid != null) {
				task.setProject((Project) em.createQuery(
						"from Project p where p.pid=:pid").setParameter("pid",
						pid).getSingleResult());
			}
			task.setCreationDate(new Date(new java.util.Date().getTime()));
			task.setCreationTime(new Time(new java.util.Date().getTime()));
			task.setDueDate(new Date(dueDate.getTime()));
			task.setDueTime(new Time(dueDate.getTime()));
			task.setTaskOwner(user);
			task.setStatus("open");

			em.persist(task);
		} else {
			throw new NoPermissionException();
		}
	}

	public Collection<ProjectTO> getAllProjects() throws NoPermissionException {
		if(user!=null){
			return null;
		}
		else{
			throw new NoPermissionException();
		}
	}

	public Collection<TaskTO> getAllTasks() throws NoPermissionException {
		if (user != null) {
			
			ArrayList<TaskTO> collection = new ArrayList<TaskTO>();
			
			Iterator taskIterator = user.getTasks().iterator();
			
			while(taskIterator.hasNext()){
				Task task = (Task) taskIterator.next();
				
				collection.add(task.generateTaskTO());
			}
			
			return collection;
		} else {
			throw new NoPermissionException();
		}
	}

	public void changePassword(String oldPassword, String newPassword)
			throws NoPermissionException, WrongPasswordException {
		if(user!=null){
			if(user.getPassword().equals("oldPassword")){
				user.setPassword(newPassword);
				em.refresh(user);
			}
			else{
				throw new WrongPasswordException();
			}
		}
		else{
			throw new NoPermissionException();
		}

	}

	public void changeTaskState(Integer tid, String state)
			throws NoPermissionException {
		if(user!=null){
			
			Iterator taskIT = user.getTasks().iterator();
			
			while(taskIT.hasNext()){
				Task t = (Task) taskIT.next();
				
				if(t.getTid()==tid){
					t.setStatus(state);
					em.refresh(t);
				}
			}
			
		}
		else{
			throw new NoPermissionException();
		}

	}

	public void deleteProject(Integer pid) throws NoPermissionException {
		if(user!=null){
			
		}
		else{
			throw new NoPermissionException();
		}

	}

	public void deleteTask(Integer tid) throws NoPermissionException {
		if(user!=null){

			Iterator taskIT = user.getTasks().iterator();
			
			while(taskIT.hasNext()){
				Task t = (Task) taskIT.next();
				
				if(t.getTid()==tid){
					em.remove(t);
				}
			}

			
		}
		else{
			throw new NoPermissionException();
		}

	}

	public Collection<TaskTO> getTaskForProject(Integer pid)
			throws NoPermissionException {
		if(user!=null){
			
		}
		else{
			throw new NoPermissionException();
		}
		return null;
	}

}

Servlet in dem die Bean genutzt werden soll

Code:
package de.sge.taskmanager.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import de.sge.taskmanager.exceptions.IncorrectLoginInformationException;
import de.sge.taskmanager.exceptions.NoPermissionException;
import de.sge.taskmanager.exceptions.NoUniqueResultFoundException;
import de.sge.taskmanager.exceptions.WrongPasswordException;
import de.sge.taskmanager.interfaces.TaskManagerServiceLocal;
import de.sge.taskmanager.transferObjects.UserTO;

/**
 * Servlet implementation class for Servlet: LoginServlet
 *
 */
 public class LoginServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   
   
   
   TaskManagerServiceLocal tms;
   
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public LoginServlet() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		work(request,response);
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		work(request,response);
	}   
	
	private void work(HttpServletRequest request, HttpServletResponse response){
		
		
		try {
			
			InitialContext ctx = new InitialContext();
			
			tms = (TaskManagerServiceLocal)ctx.lookup("TaskManagerService/local");
			
			String username =  request.getParameter("userName");
			String password =  request.getParameter("password");
			
			tms.login(username, password);
			
			UserTO user= tms.getUser();
			
			PrintWriter out = response.getWriter();
			

			out.println(user.getPrename());
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoPermissionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoUniqueResultFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IncorrectLoginInformationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (WrongPasswordException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
}

Fehler:

Code:
14:42:49,452 ERROR [[LoginServlet]] Servlet.service() for servlet LoginServlet threw exception
java.lang.ClassCastException: de.sge.taskmanager.transferObjects.TaskTO cannot be cast to de.sge.taskmanager.transferObjects.TaskTO
	at de.sge.taskmanager.servlets.LoginServlet.work(LoginServlet.java:83)
	at de.sge.taskmanager.servlets.LoginServlet.doPost(LoginServlet.java:51)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
15:05:21,841 ERROR [[LoginServlet]] Servlet.service() for servlet LoginServlet threw exception
java.lang.ClassCastException: de.sge.taskmanager.transferObjects.TaskTO cannot be cast to de.sge.taskmanager.transferObjects.TaskTO
	at de.sge.taskmanager.servlets.LoginServlet.work(LoginServlet.java:83)
	at de.sge.taskmanager.servlets.LoginServlet.doPost(LoginServlet.java:51)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

Der Fehler kommt bei UserTO user = tms.getUser()
 
Zuletzt bearbeitet:
Mehrere Sachen:

1) Zu deiner Frage: deployst du das EAR und die Webapp getrennt? Die Exception könnte daher kommen, dass die serialVersionUID in den Klassen in den JARs unterschiedlich ist.

2) Warum der Lookup übder den InitialContext? Du kannst dir die SessionBean direkt injecten lassen.

3) Immer die gleiche Exception an jeder Methode ist ein Codesmell. Security ist ein Aspekt, sollte daher (in der EJB3 Welt) mit Interceptors implementiert werden. Aus diesem Grund sollten SecurityExceptions auch unchecked Exceptions sein, so kannst du sie zentral behandeln OHNE sämtlichen Code mit den Exceptions zu nerven.

4) Security implementiert man nicht selbst ;). Das eins der typischen Themen, die irgendwie jedes Projekt neu und selbst machen will (das Thema hat mittlerweile schon "Webframeworks" überholt). Entweder nutzt man den Container oder dedizierte SecurityFrameworks wie SpringSecurity. Ich finds amüsant, wie man immer meint, Dinge selbst besser implementieren zu können, als die vielen anderen die da schon ewig Zeit investiert haben :).

Gruß
Ollie
 
1) Zu deiner Frage: deployst du das EAR und die Webapp getrennt? Die Exception könnte daher kommen, dass die serialVersionUID in den Klassen in den JARs unterschiedlich ist.

Ich hab beides probiert. Jar und War ohne EAR sowie EJB-Modul + WebModul in EAR.
War kein Unterschied. Die serielVersionUIDs sind gleich. Das ClassCastProblem
ist immernoch da. Hast du noch eine andere Idee? Bin schier am Verzweifeln.


2) Warum der Lookup übder den InitialContext? Du kannst dir die SessionBean direkt injecten lassen.

Naja weil es nicht ging. Wohlgemerkt ging. Nach deinem Post hab ich es nochmal umgestellt auf DI(um den Fehler zu Posten) und siehe da es geht. Und das ohne irgendetwas drumherum geändert zu haben. einfach InitialContext raus und @EJB rein. und es geht.Naja mir solls recht sein.

3) Immer die gleiche Exception an jeder Methode ist ein Codesmell. Security ist ein Aspekt, sollte daher (in der EJB3 Welt) mit Interceptors implementiert werden. Aus diesem Grund sollten SecurityExceptions auch unchecked Exceptions sein, so kannst du sie zentral behandeln OHNE sämtlichen Code mit den Exceptions zu nerven.

Was sind Interceptoren? Muss ich mir mal anschauen.
unchecked Exceptions ok jep mach ich.

4) Security implementiert man nicht selbst ;). Das eins der typischen Themen, die irgendwie jedes Projekt neu und selbst machen will (das Thema hat mittlerweile schon "Webframeworks" überholt). Entweder nutzt man den Container oder dedizierte SecurityFrameworks wie SpringSecurity. Ich finds amüsant, wie man immer meint, Dinge selbst besser implementieren zu können, als die vielen anderen die da schon ewig Zeit investiert haben :).

Das kommt nicht daher das ich es besser zu wissen meine, sondern es nicht besser wusste. Gibts da eine gute Anlaufstelle(Tuorial) für JEE Security?

Gruß und danke für deine Hilfe,

Chris
 
Ich hab beides probiert. Jar und War ohne EAR sowie EJB-Modul + WebModul in EAR.
War kein Unterschied. Die serielVersionUIDs sind gleich. Das ClassCastProblem
ist immernoch da. Hast du noch eine andere Idee? Bin schier am Verzweifeln.
Hm, strange. Erzeugst du irgendwo eine anonyme Subklasse?

Was sind Interceptoren? Muss ich mir mal anschauen.
unchecked Exceptions ok jep mach ich.
http://docs.jboss.org/ejb3/app-server/tutorial/interceptor/interceptor.html

Der Vollständigkeit halber auch noch den hier als "Warnung": http://blogs.codehaus.org/people/av...jb_3_and_aop_the_ejb_interceptor_dilemna.html. Inteceptors sind eher verkrüppeltes AOP. In EJB gibt es allerdings nichts besseres. Für einfache Anforderungen sollten sie aber ausreichen. Zumindest solltest du den Securitycode aus deiner Geschäftslogik rausbekommen. Zwar weder sonderlich hübsch noch technisch state-of-the-art, aber pragmatisch und funktionierend ;).


Das kommt nicht daher das ich es besser zu wissen meine, sondern es nicht besser wusste. Gibts da eine gute Anlaufstelle(Tuorial) für JEE Security?

Gruß und danke für deine Hilfe,

Chris

Das war kein Angriff, sondern eher ein lautes Denken. Ich geh halt grundsätzlich davon aus, dass ich nur das Code, was für meine Anwendung "speziell" ist. So generische Themen wie Security haben sicher schon andere Leute gelöst. Daher würde ich mich bei sowas immer als erstes danach umschauen, was es bereits gibt. Das schließt natürlich nicht aus, dass es Gründe gibt, es dann wirklich selbst zu machen - mir ist bisher nur keiner begegnet ;).

Tutorial? Erster Google Hit: http://java.sun.com/javaee/5/docs/tutorial/doc/bnbwk.html. Das Zauberwort heißt JAAS. Macht keinen Spaß, aber du hast halt EJB gewählt ;).

Gruß
Ollie
 
Hm, strange. Erzeugst du irgendwo eine anonyme Subklasse?

Nein. Ich hab jetzt mal eine ganz einfache Klasse gestrickt TestTO.
Und der Bean eine " public TestTO getTestTO()" - Methode hinzugefügt.
Und es geht nicht. Auch ClassCast Excetion.:confused:

Die Klassendefinition zum TestTO-Objekt:

Code:
package de.sge.taskmanager.transferObjects;

import java.io.Serializable;

public class TestTO implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7611920994664841971L;
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

Und die Methode der Bean:

Code:
public TestTO getTestTO(){
		TestTO test = new TestTO();
		
		test.setName("Testname");
		return test;
	}

Ich könnt mir die Haare aus reißen.

Code:
11:22:47,313 ERROR [[LoginServlet]] Servlet.service() for servlet LoginServlet threw exception
java.lang.ClassCastException: de.sge.taskmanager.transferObjects.TestTO cannot be cast to de.sge.taskmanager.transferObjects.TestTO
	at $Proxy305.getTestTO(Unknown Source)
	at de.sge.taskmanager.servlets.LoginServlet.work(LoginServlet.java:77)
	at de.sge.taskmanager.servlets.LoginServlet.doPost(LoginServlet.java:54)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
 
Das ändert leider auch nichts. Hab weiterhin das gleiche Problem.*schnief*

Kann es sein, das ich ein grundlegendes Konfigurationsproblem mit dem JBoss hab?
 
Ich kann mir nicht helfen, aber das schreit danach, dass du im JBoss nicht das deployt hast, was du in der IDE hast. Irgendein altes Jar? Hast dus mal komplett frisch deployt? Ein einfacher Testcase vielleicht?

REINHAUN!
 
Also hab ein ganz neues Projekt angelegt (EJB-Modul + WebModul --> EAR).
Stateful Session Bean mit der Methode public TestTO getTestTO() + Local Interface.
Im WebModul ein Servlet das nichts weiter tut als die Bean per DI zu holen und dann deren Methode ausführt.

Methode liefert ein TestTO zurück und dieses soll einer lokalen Var im Servlet zu gewiesen werden --> Ergebniss: ClassCastException

Hast du einen JBoss 5.0.0 GA laufen?
Dann geb ich dir mal das kleine Testproject. Solangsam glaub ich nämlich
selbst nicht mehr was ich hier sehe. Ich hau mal den JBoss weg und setzt den neu.
 

Neue Beiträge

Zurück