communication from httpsession with jsf, please give me a hand
gringalet Jun 26, 2008 1:56 AM
hi man, i am making a hits count, i want to insert begintime into database when a session created. and insert into endtime when it destoryed.
i have puzzled by communication from httpsession with jsf.
i think it is diffcult to say hello to jsf from httpsession code. but any solution can result?
my code belows:
//OnlineCounterListener.java
public class OnlineCounterListener implements HttpSessionListener {
private MyTestFinder myTestFinder;
public void sessionCreated(HttpSessionEvent hse) {
myTestFinder = (MyTestFinder) Component.getInstance("myTestFinder");
if(myTestFinder!=null)
myTestFinder.createMyTest();
System.out.println("--------------------------hello jsf i love you!");
}
public void sessionDestroyed(HttpSessionEvent hse) {
}
}
//web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Seam -->
<listener>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
<filter>
<filter-name>Seam Exception Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamExceptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Seam Exception Filter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<!-- MyFaces -->
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<!--ajax-->
<display-name>a4jEchoText</display-name>
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<url-pattern>*.seam</url-pattern>
</filter-mapping>
<!--
<context-param>
<param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
<param-value>org.jboss.seam.ui.facelet.SeamFaceletViewHandler</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.SKIN</param-name>
<param-value>#{skinBean.skin}</param-value>
</context-param>
-->
<filter>
<filter-name>UploadBeanFilter</filter-name>
<display-name>UploadBeanFilter</display-name>
<filter-class>javazoom.upload.filter.UploadBeanFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>ISO-8859-1</param-value>
</init-param>
<init-param>
<param-name>parser</param-name>
<param-value>CFUPARSER</param-value>
</init-param>
<init-param>
<param-name>maxcontentlength</param-name>
<param-value>1073741824</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UploadBeanFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<listener>
<listener-class>
com.CMS.hitscount.OnlineCounterListener
</listener-class>
</listener>
<listener>
<listener-class>
com.CMS.hitscount.ApplicationWatch
</listener-class>
</listener>
</web-app>
//MyTest.java
@Entity
@Table(name = "mytest")
public class MyTest implements Serializable {
long Id;
String testVaule;
@Id
@GeneratedValue
@Column(name = "ID")
public long getId() {
return Id;
}
public void setId(long id) {
this.Id = id;
}
@Column(name = "TestVaule", length = 200)
public String getTestVaule() {
return testVaule;
}
public void setTestVaule(String testVaule) {
this.testVaule = testVaule;
}
}
//MyTestFinder.java
@Local
public interface MyTestFinder {
public void createMyTest();
public void updateMyTest();
public String getHtml();
public String findMyTest();
public void destroy();
}
//MyTestFinderBean.java
@Stateful
@Name("myTestFinder")
public class MyTestFinderBean implements MyTestFinder, Serializable {
@PersistenceContext
private EntityManager entityManager;
@Valid
private MyTest myTest = new MyTest();
@Logger
private static Log log;
@DataModel
private List<MyTest> myTestList;
private String html="dd";
@In(create=true)
private MyTestEditor myTestEditor;
public String getHtml() {
return this.html;
}
public void createMyTest()
{
myTestEditor.create();
}
public void updateMyTest()
{
myTestEditor.update();
}
@Factory("myTestList")
@Begin(join = true)
public String findMyTest(){
executeQuery();
return "mytest";
}
private void executeQuery() {
List<MyTest> items = entityManager.createQuery(
"select c from MyTest'").getResultList();
if (items.size() > 0) {
myTestList = items;
}
}
@Destroy
@Remove
public void destroy() {
}
}
//MyTestEditor.java
@Local
public interface MyTestEditor {
public MyTest getInstance();
public void setInstance(MyTest instance);
public String update();
public String create();
public String getHtml();
public void destroy();
}
//MyTestEditorBean.java
@Name("myTestEditor")
@Stateful
public class MyTestEditorBean implements MyTestEditor, Serializable {
@In(create = true)
private EntityManager entityManager;
@Valid
private MyTest myTest = new MyTest();
@Logger
private static Log log;
public MyTest getInstance() {
return myTest;
}
public void setInstance(MyTest instance) {
this.myTest = instance;
}
// @Restrict("#{identity.loggedIn}")
@Begin(join = true)
public String create() {
myTest = new MyTest();
SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
Date date = new Date();
System.out.println(bartDateFormat.format(date));
myTest.setTestVaule(bartDateFormat.format(date));
entityManager.persist(myTest);
return "test";
}
public String update() {
if (myTest != null) {
myTest.setTestVaule("what!!!");
entityManager.merge(myTest);
// entityManager.flush();
System.out.println("update over");
}
return "test";
}
private String html = "dd";
public String getHtml() {
return this.html;
}
@Destroy
@Remove
public void destroy() {
}
}
my error messages:
2008-06-26 07:48:48,343 DEBUG [org.jboss.seam.Component] initializing new instance of: org.jboss.seam.core.events
2008-06-26 07:48:48,343 DEBUG [org.jboss.seam.Component] done initializing: org.jboss.seam.core.events
2008-06-26 07:48:48,343 DEBUG [org.jboss.seam.Component] instantiating Seam component: org.jboss.seam.core.events
2008-06-26 07:48:48,343 DEBUG [org.jboss.seam.Component] initializing new instance of: org.jboss.seam.core.events
2008-06-26 07:48:48,343 DEBUG [org.jboss.seam.Component] done initializing: org.jboss.seam.core.events
2008-06-26 07:48:48,343 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.postDestroyContext.CONVERSATION
2008-06-26 07:48:48,343 INFO [STDOUT] 1
2008-06-26 07:48:48,343 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/cms]] Session event listener threw exception
java.lang.IllegalStateException: No application context active
at org.jboss.seam.Component.forName(Component.java:1577)
at org.jboss.seam.Component.getInstance(Component.java:1627)
at org.jboss.seam.Component.getInstance(Component.java:1610)
at org.jboss.seam.Component.getInstance(Component.java:1604)
at com.CMS.hitscount.OnlineCounterListener.sessionCreated(Unknown Source)
at org.apache.catalina.session.StandardSession.tellNew(StandardSession.java:384)
at org.apache.catalina.session.StandardSession.setId(StandardSession.java:356)
at org.apache.catalina.session.ManagerBase.createSession(ManagerBase.java:825)
at org.apache.catalina.session.StandardManager.createSession(StandardManager.java:290)
at org.apache.catalina.connector.Request.doGetSession(Request.java:2223)
at org.apache.catalina.connector.Request.getSession(Request.java:2024)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:831)
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.getSession(ServletExternalContextImpl.java:197)
at org.jboss.seam.contexts.ContextAdaptor.getSession(ContextAdaptor.java:42)
at org.jboss.seam.contexts.Lifecycle.beginRequest(Lifecycle.java:42)
at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:52)
at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:70)
at org.apache.myfaces.lifecycle.LifecycleImpl.restoreView(LifecycleImpl.java:103)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:66)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at javazoom.upload.filter.UploadBeanFilter.doFilter(UploadBeanFilter.java:95)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
2008-06-26 07:48:48,359 DEBUG [org.jboss.seam.Component] instantiating Seam component: org.jboss.seam.core.events
2008-06-26 07:48:48,359 DEBUG [org.jboss.seam.Component] initializing new instance of: org.jboss.seam.core.events
2008-06-26 07:48:48,359 DEBUG [org.jboss.seam.Component] done initializing: org.jboss.seam.core.events
2008-06-26 07:48:48,359 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.beforePhase
2008-06-26 07:48:48,375 DEBUG [org.jboss.seam.jsf.SeamVariableResolver] resolving name: ajaxContext
2008-06-26 07:48:48,375 DEBUG [org.jboss.seam.Component] seam component not found: ajaxContext
2008-06-26 07:48:48,375 DEBUG [org.jboss.seam.jsf.SeamVariableResolver] could not resolve name
2008-06-26 07:48:48,390 DEBUG [org.jboss.mx.loading.RepositoryClassLoader] setRepository, repository=org.jboss.mx.loading.HeirarchicalLoaderRepository3@369fdc, cl=org.jboss.mx.loading.HeirarchicalLoaderRepository3$CacheClassLoader@8978c7{ url=null ,addedOrder=0}
2008-06-26 07:48:48,421 DEBUG [org.jboss.mx.loading.RepositoryClassLoader] setRepository, repository=org.jboss.mx.loading.HeirarchicalLoaderRepository3@369fdc, cl=org.jboss.mx.loading.HeirarchicalLoaderRepository3$CacheClassLoader@d4f13a{ url=null ,addedOrder=0}
2008-06-26 07:48:48,437 DEBUG [org.jboss.seam.Component] instantiating Seam component: org.jboss.seam.core.localeSelector
2008-06-26 07:48:48,437 DEBUG [org.jboss.seam.Component] initializing new instance of: org.jboss.seam.core.localeSelector
2008-06-26 07:48:48,437 DEBUG [org.jboss.seam.Component] done initializing: org.jboss.seam.core.localeSelector
2008-06-26 07:48:48,437 DEBUG [org.jboss.seam.Component] instantiating Seam component: org.jboss.seam.core.events
2008-06-26 07:48:48,437 DEBUG [org.jboss.seam.Component] initializing new instance of: org.jboss.seam.core.events