1 2 3 4 Previous Next 45 Replies Latest reply: Mar 3, 2014 6:28 AM by Christina KTM RSS

    memcached session manager and jboss

    David Schmidt Newbie

      From what I'v read the JBoss6 JBossWeb is based on TomCat6 but it looks a bit different.

       

      I'd like to use the memcached session manager, is there a way to set it up?

      http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

       

      I'm still learning jboss, would be nice if there is a solution without changing a lot of code

        • 1. memcached session manager and jboss
          Martin Grotzke Newbie

          As you want to modify tomcats context.xml to configure msm the first question is which one is relevant to you / where to find it.

           

          Cheers,

          Martin

          • 2. Re: memcached session manager and jboss
            David Schmidt Newbie

            I'm want to set up a small test like the example on your msm-site (2 server, 2 memcache)

             

            what I've done so far:

            -copied default

            -added this to deploy\jbossweb.sar\context.xml

                <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:localhost:11211 n2:localhost:11212"
                failoverNodes="n1"
                requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"
                />
            

             

            -added to lib folder

            tomcat-juli.jar (it was missing, don't know why)

            memcached-session-manager-1.4.0.jar

            memcached-2.5.jar

             

            when I'm trying to start it now, I'm getting:

            10:17:42,539 INFO  [TomcatDeployment] deploy, ctxPath=/invoker

            10:17:42,836 ERROR [StandardContext] Context [/invoker] startup failed due to previous errors: java.lang.NoSuchFieldError: log

                at de.javakaffee.web.msm.MemcachedBackupSessionManager.start(MemcachedBackupSessionManager.java:1421) [:]

                at org.apache.catalina.core.StandardContext.start(StandardContext.java:3837) [:6.0.0.Final]

            • 3. Re: memcached session manager and jboss
              Jean-Frederic Clere Master

              They used log instead _log in the init() code... Complain to them

              • 4. Re: memcached session manager and jboss
                Martin Grotzke Newbie

                Hi David,

                 

                I'm the creator of memcached-session-manager and would like to help in bringing msm and jboss together.

                As I'm new to jboss it would be helpful if you could provide a step by step guide how to reproduce it. Starting with the jboss version to download, which files to copy from directory X to directory Z (you copied "default" from where to where?), and also how you're running it.

                Otherwise it would take too much time for me and I might do different things than you.

                 

                Cheers,

                Martin

                • 5. Re: memcached session manager and jboss
                  Martin Grotzke Newbie

                  Hi JF,

                   

                  the field log is defined by tomcats ManagerBase which is extended by MemcachedBackupSessionManager. You're right that the inconsistency of log and _log could be fixed. Still, in a normal tomcat installation it does work (as expected), so I wonder what's different in the tomcat bundled with jboss.

                   

                  Do you have a clue what's wrong here? Can you tell which tomcat version comes with jboss 6?

                   

                  Cheers,

                  Martin

                  • 6. Re: memcached session manager and jboss
                    Martin Grotzke Newbie

                    Hi David,

                     

                    I just changed the log stuff to _log, you can get the jar here:

                    http://dl.dropbox.com/u/1439289/memcached-session-manager-1.4.2-SNAPSHOT.jar

                     

                    Perhaps this already does the trick.

                     

                    Cheers,

                    Martin

                    • 7. Re: memcached session manager and jboss
                      Jean-Frederic Clere Master

                      Do you have a clue what's wrong here? Can you tell which tomcat version comes with jboss 6?

                      Jboss uses org.jboss.logging.Logger and not org.apache.juli.logging.Log that is why you get the error.

                      I think to make a jbossweb version you should just add the dependencies to jbossweb and jbosslogging and rebuild your package.

                      • 8. memcached session manager and jboss
                        David Schmidt Newbie

                        Hi Martin,

                         

                        this really did the trick, the server is now running and connected to two memcache servers. Now I only have to write a quick tes programm. I'm going to post a quick guide here as soon as it is working.

                         

                        Thanks

                        David

                        • 9. Re: memcached session manager and jboss
                          Martin Grotzke Newbie

                          Jean-Frederic Clere wrote:

                           

                          Jboss uses org.jboss.logging.Logger and not org.apache.juli.logging.Log that is why you get the error.

                          I think to make a jbossweb version you should just add the dependencies to jbossweb and jbosslogging and rebuild your package.

                          Ok, so jboss does not "bundle" tomcat as-is, but comes with a modified tomcat? Are other things changed besides logging? Is there any patch I can have a look at, or how are the tomcat sources modified?

                           

                          Cheers,

                          Martin

                          • 10. Re: memcached session manager and jboss
                            Martin Grotzke Newbie

                            this really did the trick, the server is now running and connected to two memcache servers. Now I only have to write a quick tes programm. I'm going to post a quick guide here as soon as it is working.

                            Great!

                             

                            Are you interested in a msm version for jbossweb, that can be used out-of-the-box (as JF suggested)?

                            I'm already working on a new project structure of msm that allows to create a jbossweb version without too much effort.

                             

                            Cheers,

                            Martin

                            • 11. Re: memcached session manager and jboss
                              Jean-Frederic Clere Master

                              Ok, so jboss does not "bundle" tomcat as-is, but comes with a modified tomcat? Are other things changed besides logging? Is there any patch I can have a look at, or how are the tomcat sources modified?

                              It is a forked version of Tomcat. The repository is http://anonsvn.jboss.org/repos/jbossweb/

                              • 12. Re: memcached session manager and jboss
                                Martin Grotzke Newbie

                                It is a forked version of Tomcat. The repository is http://anonsvn.jboss.org/repos/jbossweb/

                                Thanx, I'll have a look at it and see if I can create a jboss version of msm.

                                 

                                Cheers,

                                Martin

                                • 13. Re: memcached session manager and jboss
                                  David Schmidt Newbie

                                  Hi again,

                                   

                                  I've written a very small servlet, packed it into a war and deployed it.

                                   

                                  import java.io.IOException;
                                  import java.io.PrintWriter;
                                  
                                  import javax.servlet.ServletException;
                                  import javax.servlet.http.HttpServlet;
                                  import javax.servlet.http.HttpServletRequest;
                                  import javax.servlet.http.HttpServletResponse;
                                  import javax.servlet.http.HttpSession;
                                  
                                  
                                  public final class SessionTest extends HttpServlet {
                                  
                                      private static final long serialVersionUID = 1L;
                                  
                                      public void doPost(HttpServletRequest request, HttpServletResponse response)
                                      throws ServletException, IOException {
                                  
                                          HttpSession session = request.getSession(false);
                                          PrintWriter out = response.getWriter();
                                  
                                          if (session != null) {
                                              Integer rnd = (Integer) session.getAttribute("random");
                                              System.out.println("session found " + session.getId() + " load random=" + rnd);
                                              out.write("session found " + session.getId() + " load random=" + rnd);
                                          }
                                          else {
                                              int rnd = (int) (Math.random() * 100);
                                              session = request.getSession(true);
                                              session.setAttribute("random", Integer.valueOf(rnd));
                                              System.out.println("no session found, new " + session.getId() + "created and " + rnd + " saved");
                                              out.write("no session found, new " + session.getId() + "created and " + rnd + " saved");
                                  
                                          }
                                  
                                      }
                                  
                                      public void doGet(HttpServletRequest request, HttpServletResponse response)
                                      throws ServletException, IOException {
                                  
                                          doPost(request, response);
                                      }
                                  }
                                  

                                   

                                   

                                  when I use call http://127.0.0.1:8080/sessiontest/test.html now, I'm getting:

                                   

                                  15:28:35,745 ERROR [org.apache.catalina.connector.CoyoteAdapter] An exception or error occurred in the container during the request processi
                                  ng: java.lang.NoSuchFieldError: thisAccessedTime
                                          at de.javakaffee.web.msm.MemcachedBackupSession.wasAccessedSinceLastBackupCheck(MemcachedBackupSession.java:311) [:]
                                          at de.javakaffee.web.msm.BackupSessionService.backupSession(BackupSessionService.java:189) [:]
                                          at de.javakaffee.web.msm.MemcachedBackupSessionManager.backupSession(MemcachedBackupSessionManager.java:896) [:]
                                          at de.javakaffee.web.msm.SessionTrackerValve.backupSession(SessionTrackerValve.java:238) [:]
                                          at de.javakaffee.web.msm.SessionTrackerValve.invoke(SessionTrackerValve.java:149) [:]
                                          at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
                                          at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
                                          at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final]
                                          at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final]
                                  
                                          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final]
                                          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final]
                                          at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final]
                                          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final]
                                          at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Fina
                                  l]
                                          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final]
                                          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final]
                                          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
                                          at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final]
                                          at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]
                                  
                                  15:28:39,844 ERROR [org.apache.catalina.core.ContainerBase] Exception invoking periodic operation: : java.lang.NoSuchFieldError: thisAccesse
                                  dTime
                                          at de.javakaffee.web.msm.MemcachedBackupSession.wasAccessedSinceLastBackup(MemcachedBackupSession.java:289) [:]
                                          at de.javakaffee.web.msm.MemcachedBackupSessionManager.updateExpirationInMemcached(MemcachedBackupSessionManager.java:1597) [:]
                                          at de.javakaffee.web.msm.MemcachedBackupSessionManager.backgroundProcess(MemcachedBackupSessionManager.java:1574) [:]
                                          at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1314) [:6.0.0.Final]
                                          at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1599) [:6.0.0.Final]
                                          at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1608) [:6.0.0.Final]
                                          at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1608) [:6.0.0.Final]
                                          at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1588) [:6.0.0.Final]
                                          at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]
                                  

                                   

                                   

                                  I've attached the war file.

                                  • 14. Re: memcached session manager and jboss
                                    Martin Grotzke Newbie

                                    I think to make a jbossweb version you should just add the dependencies to jbossweb and jbosslogging and rebuild your package.

                                    I don't find a jbossweb 6.x artifact, only some 3.x (jboss.web.jbossweb) or 7.x (org.jboss.web), using the nexus search.

                                     

                                    Can you point me to the dependency spec (groupId:artifactId:version) and a repository that I need to include for jboss6 jbossweb?

                                     

                                    Thanx && cheers,

                                    Martin

                                    1 2 3 4 Previous Next