alguien que me ayude en jboss seam..

158 views
Skip to first unread message

Simon Alberto Rodriguez Pacheco

unread,
Nov 14, 2011, 10:17:49 AM11/14/11
to jav...@googlegroups.com
en la vista tengo
    <h:commandButton action="#{reqSoliProcesar.saveClasificar}"
                    value="Enviar" />

y en el backend tengo

    public String saveClasificar(){
        System.out.println("-------1--------------");
        //System.out.println("reqSoliPartes.getCodigo()="+reqSoliPartes.getCodigo());
        //em.persist(reqSoliPartes);
        System.out.println("-------2--------------");
        return "";
    }


sale este error.. no se porque..


10:42:25,084 ERROR [Exceptions] handled and logged exception
java.lang.IllegalStateException: begin() called from long-running conversation, try join=true
    at org.jboss.seam.core.Conversation.begin(Conversation.java:278)
    at org.jboss.seam.navigation.ConversationControl.beginOrEndConversation(ConversationControl.java:72)
    at org.jboss.seam.navigation.Page.preRender(Page.java:289)
    at org.jboss.seam.navigation.Pages.preRender(Pages.java:351)
    at org.jboss.seam.jsf.SeamPhaseListener.preRenderPage(SeamPhaseListener.java:560)
    at org.jboss.seam.jsf.SeamPhaseListener.beforeRenderResponse(SeamPhaseListener.java:471)
    at org.jboss.seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhaseListener.java:147)
    at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:117)
    at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.
--
Ing en Computacion Simon Rodriguez
www.ecologicalpaper.com
tlf:0584142711347 Venezuela

IcarusDB de Betto McRose Gamarra

unread,
Nov 14, 2011, 10:22:14 AM11/14/11
to jav...@googlegroups.com
tu problema está en la navegación en la definición de tu backing bean

mas datos:
los page.xml
session scope





Betto McRose Gamarra
Developer/Programmer
write once... implement everywhere

IcarusDB
"Soluciones Informáticas"
www.icarusdb.com.py

Cel.: +595 961 10-2828
        +595 971 69-7766 (hasta nuevo aviso, se me cayó el cell)
        +595 992 68-69-47 (chau ché ya este)

...man, programming never gets boring

http://www.linkedin.com/in/robertogamarra
http://icarus.tocorre.com/






2011/11/14 Simon Alberto Rodriguez Pacheco <oracle...@gmail.com>
--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Simon Alberto Rodriguez Pacheco

unread,
Nov 14, 2011, 1:35:58 PM11/14/11
to jav...@googlegroups.com

No entiendo tu respuesta...

me sigue dando el error y no se como solventarlo.. te agradeceria mas detalles por favor..

esta es mi configuracion

@Stateful
@Scope(ScopeType.CONVERSATION)
@Name("reqSoliProcesar")
public class ReqSoliProcesar implements Serializable, ReqSoliProcesarInterfaz {

@Begin (join = false)
    public String saveClasificar(){
        System.out.println("-------1--------------");
        //System.out.println("reqSoliPartes.getCodigo()="+reqSoliPartes.getCodigo());
        //em.persist(reqSoliPartes);
        System.out.println("-------2--------------");
        return "persisted";
    }

14:06:01,796 ERROR [Exceptions] handled and logged exception

java.lang.IllegalStateException: begin() called from long-running conversation, try join=true



2011/11/14 IcarusDB de Betto McRose Gamarra <icar...@gmail.com>

Simon Alberto Rodriguez Pacheco

unread,
Nov 14, 2011, 1:36:27 PM11/14/11
to jav...@googlegroups.com
14:06:01,796 ERROR [Exceptions] handled and logged exception
java.lang.IllegalStateException: begin() called from long-running conversation, try join=true
    at org.jboss.seam.core.Conversation.begin(Conversation.java:278)
    at org.jboss.seam.navigation.ConversationControl.beginOrEndConversation(ConversationControl.java:72)
    at org.jboss.seam.navigation.Page.preRender(Page.java:289)
    at org.jboss.seam.navigation.Pages.preRender(Pages.java:351)


IcarusDB de Betto McRose Gamarra

unread,
Nov 14, 2011, 1:59:14 PM11/14/11
to jav...@googlegroups.com
primero
@Stateful
@Scope(ScopeType.CONVERSATION)
@Name("reqSoliProcesar")

acá tenemos un problema
@Stateful:  es una anotación ejb
@Name("reqSoliProcesar") es una anotación SEAM

tenés que definir en que ámbito vas a trabajar: EJB o SEAM

al parecer funciona, pero en realidad son dos contextos diferentes

te aconsejo, remové todo lo que esa EJB y quedate con SEAM

pablo.a....@gmail.com

unread,
Nov 14, 2011, 2:24:09 PM11/14/11
to jav...@googlegroups.com
Ayuda leer la excepción y la documentación. Nunca use Seam pero te puedo decir que el error es que tendrías que poner join = true en la anotación begin por la que está pasando

@Begin(join = true)

http://docs.jboss.org/seam/2.0.0.GA/api/org/jboss/seam/annotations/Begin.html

De todas maneras, es probable que tengas otro problema por el que una conversación ya existente no esté terminando.

Saludos.

Pablo Lillia

unread,
Nov 14, 2011, 3:04:32 PM11/14/11
to jav...@googlegroups.com
Recién leo, estaba por responder lo mismo, y es así como dijo Pablo. Normalmente se manejan las conversaciones de varias formas, pero en general es: via anotaciones, o via pages.xml. Para anotaciones es como indicó Pablo.

Para pages.xml se agrega un elemento <begin-conversation join="true" /> dentro del nodo view de la página, o en el archivo pagina.page.xml que va junto a la pagina.xhtml.

Es conveniente delimitar las conversiones de una sola forma, para evitar confusiones.

El error en particular, es que estabas iniciando una nueva conversación, cuando ya había otra en progreso. Normalmente eso sucede cuando faltó un @End, o hay un @Begin sin join=true, o sus equivalentes en pages.xml (o via anotación se indica una cosa, y via pages.xml otra, por lo no recomiendo usar ambas alternativas a la vez).

Slds.-
Pablo

El 14/11/11 16:24, pablo.a....@gmail.com escribió:

Simon Alberto Rodriguez Pacheco

unread,
Nov 14, 2011, 3:15:59 PM11/14/11
to jav...@googlegroups.com
Nada.. coloco esto y mne sigue dando el error..
no c que pasa :(


        @Begin(join=true)
    public String saveClasificar() {
        System.out.println("-------1--------------");


java.lang.IllegalStateException: begin() called from long-running conversation, try join=true

--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Simon Alberto Rodriguez Pacheco

unread,
Nov 14, 2011, 3:33:23 PM11/14/11
to jav...@googlegroups.com
El error aparece.. pero no te dice en que metodo colocar un @Begin(join = true)

, se lo coloco al metodo que llamo .. y sigue apareciendo.. no se a que otro metodo colocarle.. estpoy perdido


16:03:45,549 ERROR [Exceptions] handled and logged exception

java.lang.IllegalStateException: begin() called from long-running conversation, try join=true
    at org.jboss.seam.core.Conversation.begin(Conversation.java:278)
    at org.jboss.seam.navigation.ConversationControl.beginOrEndConversation(ConversationControl.java:72)
    at org.jboss.seam.navigation.Page.preRender(Page.java:289)
    at org.jboss.seam.navigation.Pages.preRender(Pages.java:351)
    at org.jboss.seam.jsf.SeamPhaseListener.preRenderPage(SeamPhaseListener.java:560)
    at org.jboss.seam.jsf.SeamPhaseListener.beforeRenderResponse(SeamPhaseListener.java:471)
    at org.jboss.seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhaseListener.java:147)
    at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:117)
    at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    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.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
    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:829)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

Pablo Lillia

unread,
Nov 15, 2011, 6:57:22 PM11/15/11
to jav...@googlegroups.com
El 14/11/11 17:33, Simon Alberto Rodriguez Pacheco escribi�:

> El error aparece.. pero no te dice en que metodo colocar un
> @Begin(join = true)
>
> , se lo coloco al metodo que llamo .. y sigue apareciendo.. no se a
> que otro metodo colocarle.. estpoy perdido
>

No podr�a saber si agregaste otro begin, o si cambiaste el/los que
ten�as. Sin embargo, aclaro que no se trata de solo agregar otro/s
@Begin(join=true). Probablemente, el @Begin que est� generando el error,
no es el que pens�s, sino otro que se te est� pasando por alto. Revis�
los l�mites que pusiste a la conversaci�n. Como dije antes, �ten�s
pages.xml? �O una page de p�gina (pagina.page.xml)? �O solo ten�s
anotaciones para controlar la conversaci�n? �O un poco y un poco?
Cuidado, elige una sola alternativa, para evitar confusiones luego. De
�ltima, pon� m�todos inicializaci�n vac�os en los beans anotados con
@Create, para ponerle breakpoints y poder depurarlo.

Revis� muy bien todos los begin que tengas, sean de anotaciones o de
otro tipo. Si los begin/end fueron puestos sin un criterio, te
recomiendo quitarlos todos, y repensar para qu� incluirlos. Repas� antes
el cap�tulo de manejo de conversaciones de la documentaci�n de Seam para
quitarte cualquier duda, es relativamente simple el concepto, pero mal
aplicado te va a volver loco, cuando bien aprovechado es una
caracter�stica clave y fundamental de Seam.

Hazte esta pregunta: �porqu� iniciar una conversaci�n extendida (con
begin/end) en primer lugar? Si no hace falta, eliminarla. Si hace falta
para mantener el estado de X bean/s desde el punto A hasta el punto B,
entonces limitar la conversaci�n a esos puntos. Aprovecha la p�gina de
debug.seam (estando el debug habilitado para seam en components.xml)
para comprender e inspeccionar las conversaciones en curso y su estado.

Algunos consejos varios con Seam 2: suele ser com�n que tengas un back
bean para la p�gina, y si esa p�gina necesita mantener el estado entre
varios request, suele crearse un m�todo de inicializaci�n (como init())
anotado con @Create y con @Begin(join=true). Personalmente, prefiero
anotarlo solo con @Create, y usar el pages de la vista (p�gina) para
poner el elemento <begin-conversation join="true"/>. Luego, en el m�todo
que guarde/borre/acualice/etc que deba terminar la conversaci�n, poner
el @End (mejor usar pages, y en el action o rule correspondiente poner
el elemento <end-conversation/>).

�Porqu� es mejor hacerlo desde el pages.xml en lugar de las anotaciones
(a excepci�n de casi cualquier otro aspecto de Seam)? Porque junto con
las decisiones del alcance de la conversaci�n, suelen ir las decisiones
de navegaci�n, las reglas, los pages-flow/jbpm, y as�, todo lo que es
mejor manejarlo por pages.xml. Hacerlo en el/los pages, te brinda m�s
control y opciones que hacerlo con anotaciones. Y hacerlo mixto solo
genera confusiones. Y menos a�n hacerlo por c�digo, es la peor pesadilla.

A veces al terminar la conversaci�n, se hace un redirect a la misma u a
otra p�gina. Si al hacerlo, necesit�s acceder a alg�n estado/mensaje de
la conversaci�n "que se est� cerrando", us� el before-redirect = true/false.

El <redirect/> es muy usado para ciertas cosas, no solo para ir a otra
p�gina (evidentemente), sino para aplicar el patr�n post-and-redirect.
JSF hace post-back para todo, lamentablemente, pero con el patr�n
post-and-redirect se evitan much�simas complicaciones del back-button.
En el mismo sentido, los componente s:link y s:button (extensiones de
Seam a JSF) aunque sin brindar submit del formulario, son muy �tiles
para los casos donde aplican. Si los us�s, prest� atenci�n al atributo
propagation que afecta al alcance de la conversaci�n.

Prob� bastante con los ejemplos que trae Seam. Hay muchos y muy buenos,
y los hay para todos las necesidades imaginables. Tiene aplicaciones
completas reales. Vas a sacar muchas ideas y a comprender mejor todas
las bondades del framework.

Slds.-
Pablo

Simon Alberto Rodriguez Pacheco

unread,
Nov 15, 2011, 7:59:16 PM11/15/11
to jav...@googlegroups.com

Muchas Gracias estimado Pablo.. de verdad que tu comentario lo leere mas de una vez para poderlo interpretar bien. soy nuevo en seam y tengo dolor de cabeza porque las cosas no me salen como debe ser.. pero con tu comentarios me das algo de luz al final del tunel.. muchas gracias nuevamente..muy agradecido..
El 15 de noviembre de 2011 19:27, Pablo Lillia <pablo....@gmail.com> escribió:
El 14/11/11 17:33, Simon Alberto Rodriguez Pacheco escribió:

El error aparece.. pero no te dice en que metodo colocar un @Begin(join = true)

, se lo coloco al metodo que llamo .. y sigue apareciendo.. no se a que otro metodo colocarle.. estpoy perdido


No podría saber si agregaste otro begin, o si cambiaste el/los que tenías. Sin embargo, aclaro que no se trata de solo agregar otro/s @Begin(join=true). Probablemente, el @Begin que está generando el error, no es el que pensás, sino otro que se te está pasando por alto. Revisá los límites que pusiste a la conversación. Como dije antes, ¿tenés pages.xml? ¿O una page de página (pagina.page.xml)? ¿O solo tenés anotaciones para controlar la conversación? ¿O un poco y un poco? Cuidado, elige una sola alternativa, para evitar confusiones luego. De última, poné métodos inicialización vacíos en los beans anotados con @Create, para ponerle breakpoints y poder depurarlo.

Revisá muy bien todos los begin que tengas, sean de anotaciones o de otro tipo. Si los begin/end fueron puestos sin un criterio, te recomiendo quitarlos todos, y repensar para qué incluirlos. Repasá antes el capítulo de manejo de conversaciones de la documentación de Seam para quitarte cualquier duda, es relativamente simple el concepto, pero mal aplicado te va a volver loco, cuando bien aprovechado es una característica clave y fundamental de Seam.

Hazte esta pregunta: ¿porqué iniciar una conversación extendida (con begin/end) en primer lugar? Si no hace falta, eliminarla. Si hace falta para mantener el estado de X bean/s desde el punto A hasta el punto B, entonces limitar la conversación a esos puntos. Aprovecha la página de debug.seam (estando el debug habilitado para seam en components.xml) para comprender e inspeccionar las conversaciones en curso y su estado.

Algunos consejos varios con Seam 2: suele ser común que tengas un back bean para la página, y si esa página necesita mantener el estado entre varios request, suele crearse un método de inicialización (como init()) anotado con @Create y con @Begin(join=true). Personalmente, prefiero anotarlo solo con @Create, y usar el pages de la vista (página) para poner el elemento <begin-conversation join="true"/>. Luego, en el método que guarde/borre/acualice/etc que deba terminar la conversación, poner el @End (mejor usar pages, y en el action o rule correspondiente poner el elemento <end-conversation/>).

¿Porqué es mejor hacerlo desde el pages.xml en lugar de las anotaciones (a excepción de casi cualquier otro aspecto de Seam)? Porque junto con las decisiones del alcance de la conversación, suelen ir las decisiones de navegación, las reglas, los pages-flow/jbpm, y así, todo lo que es mejor manejarlo por pages.xml. Hacerlo en el/los pages, te brinda más control y opciones que hacerlo con anotaciones. Y hacerlo mixto solo genera confusiones. Y menos aún hacerlo por código, es la peor pesadilla.

A veces al terminar la conversación, se hace un redirect a la misma u a otra página. Si al hacerlo, necesitás acceder a algún estado/mensaje de la conversación "que se está cerrando", usá el before-redirect = true/false.

El <redirect/> es muy usado para ciertas cosas, no solo para ir a otra página (evidentemente), sino para aplicar el patrón post-and-redirect. JSF hace post-back para todo, lamentablemente, pero con el patrón post-and-redirect se evitan muchísimas complicaciones del back-button. En el mismo sentido, los componente s:link y s:button (extensiones de Seam a JSF) aunque sin brindar submit del formulario, son muy útiles para los casos donde aplican. Si los usás, prestá atención al atributo propagation que afecta al alcance de la conversación.

Probá bastante con los ejemplos que trae Seam. Hay muchos y muy buenos, y los hay para todos las necesidades imaginables. Tiene aplicaciones completas reales. Vas a sacar muchas ideas y a comprender mejor todas las bondades del framework.

Slds.-
Pablo


--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.
Reply all
Reply to author
Forward
0 new messages