[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

3 problemas



Desde segunda ainda não entreguei meu EP pq não consigo solucionar 3 problemas, e ainda entender como fazer o Servlet (ja q nunca tinha feito um). Depois de muito bater cabeça e perceber que já deveria ter postado isso faz tempo, eis meus problemas:

1) Enterprise Archive
Inicialmente, montei um sma-all.ear com os EJBs + Servelt, separados em sma-ejb.jar (com seu META-INF/persistence.xml) e sma-web.jar (com seu WEB-INF com jboss-web.xml, web.xml e as classes no diretorio classes). Separadamente, eles funcionam normalmente. Entretanto, quanto os coloco no ear com um application.xml, os nomes no JNDI mudam e não consigo acessa-los.

+- CourseManagerBean (class: org.jnp.interfaces.NamingContext)
| +- localStatefulProxyFactory (class: org.jboss.ejb3.stateful.StatefulLocalProxyFactory )
| +- local (class: java.lang.Object)
| +- remote (class: java.lang.Object)
| +- remoteStatefulProxyFactory (proxy: $Proxy76 implements interface org.jboss.ejb3.ProxyFactory)
+- SystemAdminBean (class: org.jnp.interfaces.NamingContext)
| +- local (proxy: $Proxy151 implements interface sma.interfaces.SystemAdminLocal,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBLocalObject)
| +- remote (proxy: $Proxy150 implements interface sma.interfaces.SystemAdminRemote,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBObject)
Para:
+- sma-all (class: 
org.jnp.interfaces.NamingContext)
| +- SystemAdminBean (class: org.jnp.interfaces.NamingContext)
| | +- local (proxy: $Proxy135 implements interface sma.interfaces.SystemAdminLocal,interface org.jboss.ejb3.JBossProxy ,interface javax.ejb.EJBLocalObject)
| | +- remote (proxy: $Proxy134 implements interface sma.interfaces.SystemAdminRemote,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBObject)
| +- CourseManagerBean (class: org.jnp.interfaces.NamingContext)
| | +- remote (class: java.lang.Object)
| | +- remoteStatefulProxyFactory (proxy: $Proxy76 implements interface org.jboss.ejb3.ProxyFactory)

Mudei todos os lookups de: ref = jndiContext.lookup("CourseManagerBean/remote")
para ref = jndiContext.lookup("sma-all/CourseManagerBean/remote")
E não funciona. A mesma coisa com SystemAdminBean.

Meu application.xml
<?xml version=" 1.0" encoding="ISO-8859-1"?>
<application>
    <display-name>SMA: EP1</display-name>
        <module>
            <web>
                <web-uri>sma-web.war </web-uri>
                <context-root>/courses</context-root>
            </web>
        </module>
        <module>
            <ejb>sma-ejb.jar</ejb>
        </module>
</application>


2) Stateful Beans
Eu realmente acho que não entendi os Stateful beans. Como o estado da sessão é salvo? A classe que é um Stateful bean precisa implementar java.io.Serializable? Todas as alterações que faço nas minhas classes dentro do Stateful Bean desaparecem ao encerrar a aplicação, mesmo usando merge, persist ou flush.


3) Servlet
Tentei usar dentro do Servlet a mesma chamada que uso no cliente do estudente para fazer a chamada da interface, mas tudo o que consigo são repetidos ClassCastException. Olhando dentro do JNDI, vejo que CourseManagerBean/remote consta como se fosse só Object (e que dá erro no momento do casting), enquanto SystemAdminBean/remote não. Por que isto não funciona dentro de um Servlet, mas funciona fora dele?

            jndiContext = new javax.naming.InitialContext();
            ref = jndiContext.lookup("CourseManagerBean/remote");
            manager = (CourseManagerRemote) ref

4) JBoss

Esse não conta nos erros que queria listar, mas ele constantemente aparece no console do JBoss, então pode significar algo:

ERROR [JNDIView] JNDIView.getHAJndiAttributes() failed


Agradeço a quem puder me ajudar.