4 Replies Latest reply on Apr 14, 2009 5:00 PM by Cody Lerum

    Exception with seam mail delivery, not asynchronously!

    Swen Vogel Newbie

      Hi,


      i am new to seam, and trying to code a little online survey with email confirmation. I always get the following exception on rendering the email page (emailConfirmation.xhtml).


      Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: org.jboss.seam.ui.facelet.facesContextFactory
      ...
      Caused by: java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory
      



      I already googled for this exception and find some related post's. But the majority of the post's refer to
      asynchronous mail processing. When i open the mail page from the browser everything works fine.



      When i deploy the project the component org.jboss.seam.ui.facelet.facesContextFactory is successfully installed.


      [Initialization] Installing components...
      [Component] Component: org.jboss.seam.ui.facelet.facesContextFactory, scope: APPLICATION, type: JAVA_BEAN, class: org.jboss.seam.ui.facelet.RendererFacesContextFactory
      



      Developing environment:



      • Seam: 2.1.1.GA

      • JBossAs: 5.0.1.GA



      Here are the relevant code part's:


      The stateless session bean for handling survey actions



      I send the email in the finishSurvey() method.


      @Stateless
      @Name("surveyAction")
      @Scope(ScopeType.CONVERSATION)
      public class SurveyAction implements SurveyActionLocal {
      
           @PersistenceContext
           private EntityManager em;
      
           @In(create = true)
           private Renderer renderer;
      
           @DataModel
           private List<Survey> surveys;
      
           @DataModelSelection
           @In(required = false)
           @Out(required = false)
           private Survey selectedSurvey;
      
           @Factory(value = "surveys")
           public void initSurveys() {
                surveys = em.createQuery("from Survey").getResultList();
           }
      
           @Begin
           public String beginSurvey(String surveyName, String page) {
                selectedSurvey = new Survey();
                selectedSurvey.setName(surveyName);
      
                return page;
           }
      
           public String continueTo(String page) {
                return page;
           }
      
           @End
           public String finishSurvey() {
                selectedSurvey.setCreationDate(new Date());
                em.persist(selectedSurvey);
      
                // Send a email confirmation
                renderer.render("/mail/emailConfirmation.xhtml");
      
                return "/survey_end.xhtml";
           }
      
           public String showSurvey() {
                return "/admin/show_survey.xhtml";
           }
      
           public String saveSurvey() {
                selectedSurvey = em.merge(selectedSurvey);
      
                return "saved";
           }
      
           public String deleteSurvey() {
                selectedSurvey = em.merge(selectedSurvey);
                em.remove(selectedSurvey);
      
                selectedSurvey = null;
                surveys = null;
                          
                return "deleted";
           }
      
      }
      



      The test confirmation email (emailConfirmation.xhtml)



      <m:message xmlns:m="http://jboss.com/products/seam/mail">
           
           <m:from name="vogel" address="vogel@test.de" />
           <m:to name="vogel">vogel@test.de</m:to>
           <m:subject>Survey email confirmation</m:subject>
           
           <m:body type="plain">
                test message
           </m:body>
           
      </m:message>
      



      Thank's for your help ...