1 2 Previous Next 15 Replies Latest reply on Nov 1, 2007 2:31 PM by syzork

    Tutorial: Handling images in your Seam application

      I have just completed a five part tutorial that shows you one possible way of handling images in Seam. The tutorial consists of five parts:

      Part One: Defining the database model and entities envolved:
      http://linuxbeans.blogspot.com/2007/10/image-handling-in-seam-apps-part-i-db.html

      Part Two: Uploading images using s:fileUpload and persisting them in the database:
      http://linuxbeans.blogspot.com/2007/10/image-handling-in-seam-apps-part-ii.html

      Part Three: Using a seam component to scale uploaded images and to generate thumbnails:
      http://linuxbeans.blogspot.com/2007/10/image-handling-in-seam-apps-part-iii.html

      Part Four: Using a servlet with the help of seam context filter to view and cache images on the client:
      http://linuxbeans.blogspot.com/2007/10/image-handling-in-seam-apps-part-iv.html

      Part Five: Restricting access to pages based on Seam simplfied security mode:
      http://linuxbeans.blogspot.com/2007/10/image-handling-in-seam-apps-part-v.html

      Feedback, comments and suggestions are much appreciated.

        • 1. Re: Tutorial: Handling images in your Seam application
          pmuir

          Please link to these off the Seam wiki.

          • 2. Re: Tutorial: Handling images in your Seam application
            amitev

            Great!

            • 3. Re: Tutorial: Handling images in your Seam application
              modoc

              Very cool! Thanks!

              • 4. Re: Tutorial: Handling images in your Seam application
                damianharvey

                Some great tips in there. Already put some to good use.

                Thanks!

                Damian.

                • 5. Re: Tutorial: Handling images in your Seam application
                  damianharvey

                  I had an error "Wrong column type....expected blob" when I used the mysql mediumblob datatype. This post http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4046291#4046291 has a solution that works for me. Eg:

                   @Lob
                   @Basic(fetch=FetchType.LAZY)
                   @Column(name = "data", nullable = false, columnDefinition="mediumblob")
                   private byte[] data;
                  

                  Cheers,

                  Damian.

                  • 6. Re: Tutorial: Handling images in your Seam application
                    amitev

                    Did someone add this in the wiki?

                    • 7. Re: Tutorial: Handling images in your Seam application
                      • 8. Re: Tutorial: Handling images in your Seam application

                        good job !! congratulations!

                        • 9. Re: Tutorial: Handling images in your Seam application
                          syzork

                          can someone post the source of ArtworkServlet.java to see what am i doing wrong?

                          • 10. Re: Tutorial: Handling images in your Seam application

                            What error message do you get?

                            • 11. Re: Tutorial: Handling images in your Seam application
                              syzork

                              when i call something like em.query(...) returns an exception:

                              16:00:30,890 ERROR [STDERR] java.lang.NullPointerException
                              16:00:30,890 ERROR [STDERR] at com.flavio.b.ArtworkServlet.doGet(ArtworkServlet.java:59)
                              16:00:30,890 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
                              16:00:30,890 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
                              16:00:30,890 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
                              16:00:30,890 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
                              16:00:31,046 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
                              16:00:31,046 ERROR [STDERR] at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
                              16:00:31,046 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                              16:00:31,046 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
                              16:00:31,046 ERROR [STDERR] at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                              16:00:31,125 ERROR [STDERR] at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
                              16:00:31,125 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
                              16:00:31,125 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                              16:00:31,625 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
                              16:00:31,625 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
                              16:00:31,625 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
                              16:00:31,625 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
                              16:00:31,625 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
                              16:00:32,125 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
                              16:00:32,125 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
                              16:00:32,125 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
                              16:00:32,125 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
                              16:00:32,125 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
                              16:00:32,125 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
                              16:00:32,125 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
                              16:00:32,125 ERROR [STDERR] at java.lang.Thread.run(Thread.java:595)
                              


                              i tried comment the line:
                              EntityManager em = (EntityManager) Component.getInstance("entityManager");

                              and inject entityManager by hand with @In:
                              @In(create = true, value = "entityManager")
                              private EntityManager em;


                              • 12. Re: Tutorial: Handling images in your Seam application

                                Did you define the web:context-filter in components.xml? Can you post some code around line 59?

                                • 13. Re: Tutorial: Handling images in your Seam application
                                  syzork

                                   

                                  <components xmlns="http://jboss.com/products/seam/components"
                                   xmlns:core="http://jboss.com/products/seam/core"
                                   xmlns:persistence="http://jboss.com/products/seam/persistence"
                                   xmlns:web="http://jboss.com/products/seam/web"
                                   xmlns:drools="http://jboss.com/products/seam/drools"
                                   xmlns:bpm="http://jboss.com/products/seam/bpm"
                                   xmlns:security="http://jboss.com/products/seam/security"
                                   xmlns:mail="http://jboss.com/products/seam/mail"
                                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                   xsi:schemaLocation=
                                   "http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd
                                   http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd
                                   http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd
                                   http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.0.xsd
                                   http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.0.xsd
                                   http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.0.xsd
                                   http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd
                                   http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.0.xsd"
                                   >
                                  ...
                                  <web:context-filter url-pattern="/b/*" />
                                  ...
                                  </components>
                                  


                                  ArtworkServlet.java
                                  
                                   String query = "from gs_artwork_info a where a.fileName = :filename";
                                   System.out.println(this.em.toString());
                                   artworkInfo = (ArtworkInfo) this.em.createQuery(query).setParameter("filename",fileName).getSingleResult();
                                  


                                  • 14. Re: Tutorial: Handling images in your Seam application

                                    You should be defining the EntityManager as a local variable of the doGet method rather than having it as a member.
                                    Seam injection cannot be applied to servlets. You have to use Component.getInstance instead.

                                    1 2 Previous Next