[Helma-user] playing around with helma.servlet.StandaloneServletClient

Hannes Wallnoefer hannes at helma.at
Wed Apr 2 15:48:39 CEST 2008


Thanks, Philipp. I committed your patch and closed bug 544.
http://helma.org/bugs/show_bug.cgi?id=544

hannes

2008/3/17, Franz Philipp Moser <philipp.moser at chello.at>:
> Hi list,
>
>  this weekend I played around with helma and tomcat. First of all it
>  works nice with some drawbacks.
>
>   * you can't use app.__app__.getAppDir
>   * you can't use repositories
>
>  These 2 things are really annoying so I tried to overcome them with some
>  java in helma.servlet.StandaloneServletClient.
>
>  The first things is simple:
>  in helma/servlet/StandaloneServletClient.java FIND:
>  {{{
>  app = new Application(appName, repositories, dbHome);
>  }}}
>
>  REPLACE WITH:
>  {{{
>  File appHome = new File(appDir);
>  app = new Application(appName, null, repositories, appHome, dbHome);
>  }}}
>
>  So everything is OK with the getAppDir function. Maybe we should ad a
>  new constructor to the Application class, would be more elegant.
>
>  Second is to copy the code from the ApplicationManager where the
>  repositories are read from apps.properties. This is double code and
>  should be solved different!
>
>  add import java.util.* to the imports.
>
>
>  IN helma/servlet/StandaloneServletClient.java FIND:
>  {{{
>  public final class StandaloneServletClient extends AbstractServletClient {
>     private Application app = null;
>     private String appName;
>     private String appDir;
>     private String dbDir;
>  }}}
>
>  INSERT AFTER:
>  {{{
>  private Repository[] repositories;
>  }}}
>
>  IN helma/servlet/StandaloneServletClient.java FIND:
>  {{{
>         dbDir = init.getInitParameter("dbdir");
>
>         if ((dbDir == null) || (dbDir.trim().length() == 0)) {
>             throw new ServletException("dbdir parameter not specified");
>         }
>  }}}
>
>  INSERT AFTER:
>  {{{
>         Class[] parameters = { String.class };
>         ArrayList repositoryList = new ArrayList();
>         for (int i = 0; true; i++) {
>             String repositoryArgs =
> init.getInitParameter("repository." + i);
>             if (repositoryArgs != null) {
>                     // lookup repository implementation
>                 String repositoryImpl =
>  init.getInitParameter("repository." + i +
>                           ".implementation");
>                 if (repositoryImpl == null) {
>                     // implementation not set manually, have to guess it
>                     if (repositoryArgs.endsWith(".zip")) {
>                         repositoryImpl =
>  "helma.framework.repository.ZipRepository";
>                     } else if
> (repositoryArgs.endsWith(".js")) {
>                         repositoryImpl =
>  "helma.framework.repository.SingleFileRepository";
>                     } else {
>                         repositoryImpl =
>  "helma.framework.repository.FileRepository";
>                     }
>                 }
>
>                 try {
>                     Repository newRepository = (Repository)
>  Class.forName(repositoryImpl)
>                     .getConstructor(parameters)
>                     .newInstance(new Object[] { repositoryArgs });
>                     repositoryList.add(newRepository);
>                     log("adding repository: " + repositoryArgs);
>                 } catch (Exception ex) {
>                     log("Adding repository " + repositoryArgs + " failed. "
> +
>                    "Will not use that repository. Check your initArgs!",
> ex);
>                 }
>             } else {
>                 // we always scan repositories 0-9, beyond that only if
> defined
>                 if (i > 9) {
>                     break;
>                 }
>             }
>         }
>
>         // add app dir
>         FileRepository appRep = new FileRepository(appDir);
>         log("adding repository: " + appDir);
>         if (!repositoryList.contains(appRep)) {
>             repositoryList.add(appRep);
>         }
>         repositories = new
> Repository[repositoryList.size()];
>         repositoryList.toArray(repositories);
>  }}}
>
>  IN helma/servlet/StandaloneServletClient.java REMOVE this
> to lines:
>  {{{
>             Repository[] repositories = new Repository[1];
>             repositories[0] = new FileRepository(new File(appDir));
>  }}}
>  This is it and you have a full helma with repositories and getAppDir ;)
>
>  Maybe these code snippets go into svn.
>
>  I added the svn diff so the patch can be applied easy.
>
>  Please tell me what you think about these modifications.
>
>  cu Philipp
>
>
> _______________________________________________
>  Helma-user mailing list
>  Helma-user at helma.org
>  http://helma.org/mailman/listinfo/helma-user
>
>
>


More information about the Helma-user mailing list