ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
1644
1644
EMPFEHLEN
-
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
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()Geändert von Urmel103 (12.02.09 um 16:27 Uhr)
-
13.02.09 06:48 #2
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ß
OllieIn theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
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.
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.
Was sind Interceptoren? Muss ich mir mal anschauen.
unchecked Exceptions ok jep mach ich.
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
-
13.02.09 10:55 #4
Hm, strange. Erzeugst du irgendwo eine anonyme Subklasse?
http://docs.jboss.org/ejb3/app-serve...terceptor.htmlWas sind Interceptoren? Muss ich mir mal anschauen.
unchecked Exceptions ok jep mach ich.
Der Vollständigkeit halber auch noch den hier als "Warnung": http://blogs.codehaus.org/people/ava...r_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 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 begegnetDas 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
.
Tutorial? Erster Google Hit: http://java.sun.com/javaee/5/docs/tu...doc/bnbwk.html. Das Zauberwort heißt JAAS. Macht keinen Spaß, aber du hast halt EJB gewählt
.
Gruß
OllieIn theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
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.
Die Klassendefinition zum TestTO-Objekt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
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 :1 2 3 4 5 6 7
public TestTO getTestTO(){ TestTO test = new TestTO(); test.setName("Testname"); return test; }
Ich könnt mir die Haare aus reißen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
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)
-
13.02.09 11:52 #6
Kannst du mal aus Spaß das Serializable entfernen?
In theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
Das ändert leider auch nichts. Hab weiterhin das gleiche Problem.*schnief*
Kann es sein, das ich ein grundlegendes Konfigurationsproblem mit dem JBoss hab?
-
13.02.09 12:27 #8
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!In theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
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.
-
Also hier ist der Kruscht
-
13.02.09 15:06 #11
*gg* Du willst mich wohl verarschen, was?
Spass... Wenn du die Klasse einmal im EJB Projekt hast und einmal im Webprojekt, ist es logisch, dass du eine ClassCastException bekommst. Die Klasse TestTO aus dem TestEJB projekt wird von einem anderen Classloader geladen, als die TestTO aus dem TestWeb Projekt. Bitte NIEMALS Klassen mit gleichem Namen ins gleiche Package eines anderen Projektes (respektive Jars) legen.
Gruß
Ollie
Edit: lösch mal das interface und das TO im Webprojekt und für das EJB Projekt dem Webprojekt als Dependency hinzu. Dein Servlet sollte dann weiterhin kompilieren und das Servlet auch so tun wie erwartet.In theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
ich schau mal
Edit: Ich brech zusammen. Des geht. Die Schei*** geht. Ich mach hier das ganze Wochenende rum und das geht.
Schande über mein Haupt.
Und wie würde sich das jetzt verhalten wenn EJB und Web auf unterschiedlichen Rechnern wären?
Dann müsste ich es doch so machen wie ich es , bis zu der Erleuchtung durch dich, bisher gemacht hab.Oder?
Die gleiche Schose hatte ich schon einmal übersehen. Bei nem Web Service. Ich hatte zweimal
die gleiche jar eingebunden. Dumm dumm. Und da heißt es aus Fehlern lernt man.
Auf jedenfall dank ick dir tausend mal.Geändert von Urmel103 (13.02.09 um 18:24 Uhr)
-
13.02.09 19:03 #13
Nein, ich versteh nicht, wie man darauf kommt, die Klassen einem anderen Projekt bekannt zu machen in dem man sie dahin kopiert. Wenn du die Projekte "richtig" trennen willst, müssen die zwei Klassen in ein extra Projekt, das dann sowohl das EJB Projekt als auch das Webprojekt referenzieren.
Gruß
OllieIn theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
Ähnliche Themen
-
Stateful-Bean verliert seine Werte warum?
Von ceene im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 13Letzter Beitrag: 10.08.10, 12:56 -
Wie starte ich Prozesse aus einer Session Bean?
Von sepan im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 08.03.10, 14:28 -
Bean-Variablen als Parameter einer Methode einer anderen Bean
Von mcdroemmel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 25.06.09, 17:53 -
EJB Stateful session beans synchronisieren
Von sepan im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 21.01.08, 17:46 -
EJB3 - Instanz von Remote Stateful Bean an Client zurückgeben?
Von sepan im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 5Letzter Beitrag: 15.07.07, 14:33





Zitieren
Login





