google app engine - Session Bean Gets Lost in GAE using JSF and Primefaces -
google app engine - Session Bean Gets Lost in GAE using JSF and Primefaces -
note in file appengine-web.xml there required:
<sessions-enabled>true</sessions-enabled>
i have been digging quite long time on how create jsf , session beans work on google app engine. problem bean gets lost @ every request if utilize in web.xml file:
<context-param> <param-name>javax.faces.state_saving_method</param-name> <param-value>client</param-value> </context-param>
this makes on local development hidden field created in page of client encode view state in base64.
<input type="hidden" name="javax.faces.viewstate" id="javax.faces.viewstate" value="h4siaaaaaaaaae1qo0sdqrae73lxltgclelsldwqleqldwjwmd4qfmfcn3drcmhv9txhcmcrskofjyuwfqkfzf6ewngjwlqjvbwtuyemduwwuzpzpbb1dvbegyxxuq3zuvjexke8sokiq//j6xny+m0eowbdhckvgfxbmqodosiwr1dixdhycugyqq+onfhhfddl0sdmmrrpkiu5vzqekpddvct8gnlfndhjyjogkqlprdx8z92+odst+hxicf8mx5egrqd0jgwmvo98t8wvkmzjhfqoh8u2dkfh2d4uvberlq5ed+4zfiyyakwvpyivaiy9oydpoqfp9wp0k0v3uzezwwbwy8yd5cphremccnvp2fdxfzdsmb3daiszsdzwwqetwcxhykynzy2uwf+mepemiavh6/51e84jbs5jlv16epxpxiwy2r1vq0rihzfpzw3joitzeesmn3z9eflnt8mpfwggpwexwqeaaa==" autocomplete="off" />
and supposedly in google server same. result seems wierd.
<input type="hidden" name="javax.faces.viewstate" id="javax.faces.viewstate" value="-7485706817535542099:-1131777842892951150" autocomplete="off" />
and if use:
<context-param> <param-name>javax.faces.state_saving_method</param-name> <param-value>server</param-value> </context-param>
the google app engine yields string out of bound error not sure why. here is:
/trainer.jsf java.lang.stringindexoutofboundsexception: string index out of range: -1 @ java.lang.string.substring(string.java:1949) @ com.sun.faces.renderkit.serversidestatehelper.getstate(serversidestatehelper.java:277) @ com.sun.faces.renderkit.responsestatemanagerimpl.getstate(responsestatemanagerimpl.java:100) @ com.sun.faces.application.view.faceletpartialstatemanagementstrategy.restoreview(faceletpartialstatemanagementstrategy.java:352) @ com.sun.faces.application.statemanagerimpl.restoreview(statemanagerimpl.java:138) @ com.sun.faces.application.view.viewhandlingstrategy.restoreview(viewhandlingstrategy.java:123) @ com.sun.faces.application.view.faceletviewhandlingstrategy.restoreview(faceletviewhandlingstrategy.java:518) @ com.sun.faces.application.view.multiviewhandler.restoreview(multiviewhandler.java:142) @ com.sun.faces.lifecycle.restoreviewphase.execute(restoreviewphase.java:192) @ com.sun.faces.lifecycle.phase.dophase(phase.java:101) @ com.sun.faces.lifecycle.restoreviewphase.dophase(restoreviewphase.java:116) @ com.sun.faces.lifecycle.lifecycleimpl.execute(lifecycleimpl.java:118) @ javax.faces.webapp.facesservlet.service(facesservlet.java:593) @ org.mortbay.jetty.servlet.servletholder.handle(servletholder.java:511) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1166) @ com.google.apphosting.utils.servlet.parseblobuploadfilter.dofilter(parseblobuploadfilter.java:125) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.apphosting.runtime.jetty.savesessionfilter.dofilter(savesessionfilter.java:35) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.apphosting.utils.servlet.transactioncleanupfilter.dofilter(transactioncleanupfilter.java:43) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ org.mortbay.jetty.servlet.servlethandler.handle(servlethandler.java:388) @ org.mortbay.jetty.security.securityhandler.handle(securityhandler.java:216) @ org.mortbay.jetty.servlet.sessionhandler.handle(sessionhandler.java:182) @ org.mortbay.jetty.handler.contexthandler.handle(contexthandler.java:765) @ org.mortbay.jetty.webapp.webappcontext.handle(webappcontext.java:418) @ com.google.apphosting.runtime.jetty.appversionhandlermap.handle(appversionhandlermap.java:266) @ org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) @ org.mortbay.jetty.server.handle(server.java:326) @ org.mortbay.jetty.httpconnection.handlerequest(httpconnection.java:542) @ org.mortbay.jetty.httpconnection$requesthandler.headercomplete(httpconnection.java:923) @ com.google.apphosting.runtime.jetty.rpcrequestparser.parseavailable(rpcrequestparser.java:76) @ org.mortbay.jetty.httpconnection.handle(httpconnection.java:404) @ com.google.apphosting.runtime.jetty.jettyservletengineadapter.servicerequest(jettyservletengineadapter.java:146) @ com.google.apphosting.runtime.javaruntime$requestrunnable.run(javaruntime.java:447) @ com.google.tracing.tracecontext$tracecontextrunnable.runincontext(tracecontext.java:454) @ com.google.tracing.tracecontext$tracecontextrunnable$1.run(tracecontext.java:461) @ com.google.tracing.tracecontext.runincontext(tracecontext.java:703) @ com.google.tracing.tracecontext$abstracttracecontextcallback.runininheritedcontextnounref(tracecontext.java:338) @ com.google.tracing.tracecontext$abstracttracecontextcallback.runininheritedcontext(tracecontext.java:330) @ com.google.tracing.tracecontext$tracecontextrunnable.run(tracecontext.java:458) @ com.google.apphosting.runtime.threadgrouppool$poolentry.run(threadgrouppool.java:251) @ java.lang.thread.run(thread.java:679)
the thing app works in local development server.
i'm using gae-1.7.4.
here of stuff have read far , did not conclusive answer:
http://consultingblogs.emc.com/jaddy/archive/2009/11/20/jsf2-in-google-app-engine.aspx jsf2 gae , viewscoped managedbean session bean beingness lost?hope not silly situation. in advance.
update 1: able concluded, using:
facescontext context = facescontext.getcurrentinstance(); context.addmessage(null, new facesmessage(facesmessage.severity_warn, "warning building cardcontroller", null));
that session bean not beingness created @ every single page request unknown reason, values beingness setted defaults. starting think improve utilize cookies , reload them in bean, prepare @ every single page request. don't see other way out of this. may utilize aes encrypt of cookies security.
update 2: 1 time again tried following:
import java.io.serializable; import java.util.arrays; import java.util.list; import javax.faces.context.facescontext; import javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.apache.commons.collections.collectionutils; import org.apache.commons.collections.predicate; import com.google.gson.gson; @suppresswarnings("serial") public class counter implements serializable{ public int counter; public counter() { counter = -1; } public string getcounter(){ counter++; homecoming counter+""; } public string getsetcounter(){ gson gson = new gson(); httpservletresponse res = (httpservletresponse)facescontext.getcurrentinstance().getexternalcontext().getresponse(); cookie cookie = new cookie(this.hashcode()+"",gson.tojson(this)); cookie.setmaxage(60*60); //1 hr res.addcookie(cookie); homecoming "write counter"; } public string getreadcounter(){ gson gson = new gson(); cookie cookiejson = getcookie(); if(cookiejson!=null){ counter counter = gson.fromjson(cookiejson.getvalue(), counter.class); this.counter = counter.counter; } homecoming "read counter"; } private cookie getcookie(){ httpservletrequest req = (httpservletrequest)facescontext.getcurrentinstance().getexternalcontext().getrequest(); cookie[] cookies = req.getcookies(); cookie cookiejson = null; if(cookies!=null){ list<cookie> cookieslist = arrays.aslist(); cookiejson = (cookie) collectionutils.find(cookieslist, new predicate() { @override public boolean evaluate(object cookie) { homecoming ((cookie)cookie).getname().equals(counter.this.hashcode()+""); } }); } homecoming cookiejson; } }
and in .xhtml of facelet
<h:outputtext value="#{counter.readcounter}"/> <br /> <h:outputtext value="#{counter.counter}"/> <br /> <h:outputtext value="#{counter.setcounter}"/>
with no result info won't hold via session or cookies.
update 3:
"not supported there various apis , technologies not supported app engine @ nowadays various reasons. these include:
enterprise java beans (ejb)"
http://code.google.com/p/googleappengine/wiki/willitplayinjava
tested session variables out java beans , works fine.
update 4:
you can't in gae write object session because attributes values lost. suspect ejb this. maybe serialize object using json don't know. sure work around. added thread asking feature in:
https://community.jboss.org/thread/221125?tstart=0
don't sure if grouping responsible developing ejb jboss, though... way if want feature may should create noise in thread.
google-app-engine jsf-2 primefaces
Comments
Post a Comment