# ClassCCastException: $Proxy.   O_o !



## Exzensior (23. Mai 2005)

Ich bin etwas ratols. Ich will über Servlet und Session Bean / EntityBean einen Datenbankzugriff realisieren. Nun habe ich eine EJB für je eine Tabelle (Person und Konto) in der DB. Starte ich die Anwendung so kann ich z.B. eine Konto anlegen(geht alles) ...will ich eine weitere anlegen (sprich im Browser zurück und das Formular zum anlegen nochmnal ausgefüllt) kommt die Exception (sieh unten) gleiches gilt für Person (ensprechende Exception). Soll heissen ich kann für jede EJB jeweils eine Aktion durchführen....danach (bei einem zweiten Versuch) kommt immer die Exception. Ich werd daraus nicht schlau. Eine erneute Asuführung wird erst durch eine neues deployen möglich..aba danach gehts auch wieder je nur einmal :-//






```
2005-05-23 11:41:37,337 ERROR [org.jboss.ejb.plugins.LogInterceptor] RuntimeException in method: public abstract void DB_2.ejb.Service.interfaces.KontoService.createKonto(java.lang.Integer,java.lang.String,java.lang.In teger) throws java.rmi.RemoteException:
java.lang.ClassCastException: $Proxy54
at DB_2.ejb.Service.ServiceLocator.lookup(ServiceLocator.java:46)
at DB_2.ejb.Service.KontoServiceBean.createKonto(KontoServiceBean.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:2 14)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor. java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor .java:113)
at org.jboss.webservice.server.ServiceEndpointInterceptor.invoke(ServiceEndpointInterceptor.java:51)
at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:313)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:870)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:155)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:104)
at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:115)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:101)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:55)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:97)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:91)
at $Proxy63.createKonto(Unknown Source)
at DB_2.ejb.Client.AdminServlet.doGet(AdminServlet.java:165)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:150)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.jav a:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)
```


----------



## Bleiglanz (23. Mai 2005)

wie vergibst du denn den Primärschlüssel?

machst du ganz normal create auf dem home der Entity EJB?

zeig mal den Code der SessionBean

Service Locator kapuuttt


----------



## Exzensior (23. Mai 2005)

Hmm bin mir nicht ganz sicher was du genau wissen willst.....und damit ich hier nicht sinnlos was poste habe ich das Projekt mal online gestellt...Zu finden unter:  http://exzensior.ex.funpic.de/DB_2/

Danke schonmal im Vorraus!!


----------



## Bleiglanz (23. Mai 2005)

```
public Object lookup(String jndiName, Class homeClazz) {

        if (cashedHomes.containsKey(jndiName)) {
            return (EJBHome) cashedHomes.get(jndiName);
        }

        Object home = null;
        try {
            home = ctx.lookup(jndiName);
            home = PortableRemoteObject.narrow(home, homeClazz);
            cashedHomes.put(jndiName, home);
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return home;
    }
```


```
DB_2.ejb.Server.interfaces.KontoLocalHome kontoHome = (DB_2.ejb.Server.interfaces.KontoLocalHome) ServiceLocator
                .getServiceLocator().lookup(DB_2.ejb.Server.interfaces.KontoLocalHome.JNDI_NAME,
                        DB_2.ejb.Server.interfaces.KontoLocalHome.class);
```
pfff, so geht das nicht?! wer hat denn den Lookup zeugs geschrieben (das gibt kein Ding vom Typ EJBHome)

ausserdem is das doch XDoclettig

=> sind da nicht irgendwo einfache Util-Klassen dabei, die die homes chachen?


----------



## Exzensior (23. Mai 2005)

Um ehrlich zu sein hab ich mir den Code hier und da zusammen gesucht und mir was draus gebastelt.

Das Problem mit den Exceptions habe ich nun doch in den Griff bekommen indem ich das Caching im ServiceLocator abgestellt habe. 

Trotzdem nochmal danke!!


----------

