Package org.infoglue.deliver.util

Examples of org.infoglue.deliver.util.ThreadMonitor


    {
      Timer t = new Timer();
     
      String result = "";
     
      ThreadMonitor tm = new ThreadMonitor(10000L, request, "Action took to long", false);
        /*
      ThreadMonitor tm = null;
      if(getRequest().getParameter("trackThread") != null && getRequest().getParameter("trackThread").equals("true"))
        tm = new ThreadMonitor(10000L, request, "Action took to long", false);
    */
     
        try
        {
          //This registers what the system needs to know about the port etc to be able to call update cache actions etc.
          CmsPropertyHandler.registerDefaultSchemeAndPort(getRequest());
         
          protectFromCSSAttacks(this.getClass().getName(), this.commandName);
         
          result = isCommand() ? invokeCommand() : doExecute();
          setStandardResponseHeaders();

          long elapsedTime = t.getElapsedTime();
          long memoryDiff = t.getMemoryDifferenceAsMegaBytes();
          if(elapsedTime > 5000 || memoryDiff > 100)
          {
            logger.warn("The " + CmsPropertyHandler.getApplicationName() + " request: " + this.getUnencodedCurrentURIWithParameters() + " took " + elapsedTime + " ms to render and seems to have allocated " + memoryDiff + " MB of memory)");
          }
        }
        catch(ResultException e)
        {
          logger.error("ResultException " + e.getMessage());
          logger.warn("ResultException " + e.getMessage(), e);
          result = e.getResult();
        }
    catch(AccessConstraintException e)
    {
      logger.info("AccessConstraintException " + e, e);
      setErrors(e);
      result = ACCESS_DENIED;
    }
        catch(ConstraintException e)
        {
          logger.info("ConstraintException " + e, e);
          List<LinkBean> linkBeans = e.getLinkBeans();
          if(linkBeans != null && linkBeans.size() > 0)
          {
            getResponse().sendRedirect(linkBeans.get(0).getActionURL());
            result = NONE;
          }
          else
          {
            setErrors(e);
        if(e.getResult() != null && !e.getResult().equals(""))
          result = e.getResult();
        else
          result = INPUT;
          }
        }
        catch(Bug e)
        {
          logger.error("Bug " + e.getMessage());
          logger.warn("Bug  " + e.getMessage(), e);
            setError(e, e.getCause());
            result = ERROR;
        }
        catch(ConfigurationError e)
        {
           logger.error("ConfigurationError " + e.getMessage());
           logger.warn("ConfigurationError " + e.getMessage(), e);
            setError(e, e.getCause());
            result = ERROR;
        }
        catch(SystemException e)
        {
      if(e.getMessage().indexOf("correct checksum") > -1)
      {
        if(getUnencodedCurrentUrl().indexOf("Confirm.action") > -1)
          logger.warn("SystemException on url: " + getUnencodedCurrentUrl() + " with " + this.getRequest().getParameter("yesDestination") + "\n" + e.getMessage(), e);       
        else
          logger.warn("SystemException on url: " + getUnencodedCurrentUrl() + "\n" + e.getMessage(), e);       
      }
      else
      {
              logger.error("SystemException: " + e.getMessage());
              logger.warn("SystemException: " + e.getMessage(), e);
      }
      setError(e, e.getCause());
            result = ERROR;
        }
        catch(Throwable e)
        {
            logger.error("Throwable " + e.getMessage());
            logger.warn("Throwable " + e.getMessage(), new Exception(e));
            final Bug bug = new Bug("Uncaught exception!", e);
            setError(bug, bug.getCause());
            result = ERROR;
        }
        finally
        {
        if(tm != null && !tm.getIsDoneRunning())
          tm.done();
        }
       
        try
        {
          if(CmsPropertyHandler.getApplicationName().equalsIgnoreCase("cms"))
View Full Code Here


      Timer t = new Timer();
     
        //ThreadMonitor tm = null;
      //if(getRequest().getParameter("trackThread") != null && getRequest().getParameter("trackThread").equals("true"))
      //  tm = new ThreadMonitor(10L, request, "Command took to long", false);
      ThreadMonitor tm = new ThreadMonitor(10000L, request, "Command took to long", false);
     
      final StringBuffer methodName = new StringBuffer("do" + this.commandName);
      methodName.setCharAt(2, Character.toUpperCase(methodName.charAt(2)));

      String result = "";
     
      try
      {
        protectFromCSSAttacks(this.getClass().getName(), this.commandName);
       
          final Method method = getClass().getMethod(methodName.toString(), new Class[0]);
          result = (String) method.invoke(this, new Object[0]);
      }
      catch(Exception ie)
      {
      if(ie.getMessage() != null)
        logger.error("Exception in top action:" + ie.getMessage(), ie);
         
      try
      {
        throw ie.getCause();
      }
      catch(ResultException e)
      {
        logger.error("ResultException " + e, e);
        result = e.getResult();
      }
      catch(AccessConstraintException e)
      {
        logger.info("AccessConstraintException " + e, e);
        setErrors(e);
        result = ACCESS_DENIED;
      }
      catch(ConstraintException e)
      {
        logger.info("ConstraintException " + e, e);
            List<LinkBean> linkBeans = e.getLinkBeans();
            if(linkBeans != null && linkBeans.size() > 0)
            {
              logger.info("linkBean:" + linkBeans.get(0).getActionURL());
              getResponse().sendRedirect(linkBeans.get(0).getActionURL());
            }
            else
            {
              setErrors(e);
          if(e.getResult() != null && !e.getResult().equals(""))
            result = e.getResult();
          else
            result = INPUT;
            }
      }
      catch(Bug e)
      {
        logger.error("Bug " + e.getMessage(), e);
        setError(e, e.getCause());
        result = ERROR;
      }
      catch(ConfigurationError e)
      {
        logger.error("ConfigurationError " + e);
        setError(e, e.getCause());
        result = ERROR;
      }
      catch(SystemException e)
      {
        if(e.getMessage() != null && e.getMessage().indexOf("correct checksum") > -1)
        {
          if(getUnencodedCurrentUrl().indexOf("Confirm.action") > -1)
            logger.warn("SystemException on url: " + getUnencodedCurrentUrl() + " with " + this.getRequest().getParameter("yesDestination") + "\n" + e.getMessage(), e);       
          else
            logger.warn("SystemException on url: " + getUnencodedCurrentUrl() + "\n" + e.getMessage(), e);       
        }
        else
          logger.error("SystemException: " + e.getMessage(), e);
        setError(e, e.getCause());
        result = ERROR;
      }
      catch(Throwable e)
      {
        logger.error("Throwable " + e.getMessage(), e);
        final Bug bug = new Bug("Uncaught exception!", e);
        setError(bug, bug.getCause());
        result = ERROR;
      }         
      }
      finally
        {
        if(tm != null && !tm.getIsDoneRunning())
          tm.done();
        }
     
      try
        {
        if(!this.getRequest().getRequestURI().contains("UpdateCache!test"))
View Full Code Here

        logger.info("************************************************");
        }
       
        HttpServletRequest request = getRequest();

        ThreadMonitor tk = null;
      if(!CmsPropertyHandler.getOperatingMode().equals("3"))
        tk = new ThreadMonitor(new Long(CmsPropertyHandler.getDeliverRequestTimeout()).longValue(), request, "Page view took to long!", true);
      else
      {
        if(!CmsPropertyHandler.getKillLiveRequestWhichTimedout())
          tk = new ThreadMonitor(new Long(CmsPropertyHandler.getLiveDeliverRequestTimeout()).longValue(), request, "Page view seems to take to long!", false);
        else
          tk = new ThreadMonitor(new Long(CmsPropertyHandler.getLiveDeliverRequestTimeout()).longValue(), request, "Page view took to long!", true);
      }
     
      RequestAnalyser.getRequestAnalyser().incNumberOfCurrentRequests(tk);

      long start       = System.currentTimeMillis();
      long elapsedTime   = 0;
      float startTotalMemory   = ((float)Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory());
           
      DatabaseWrapper dbWrapper = new DatabaseWrapper(CastorDatabaseService.getDatabase());
     
    beginTransaction(dbWrapper.getDatabase());

       try
    {
      validateAndModifyInputParameters(dbWrapper.getDatabase());

        this.nodeDeliveryController      = NodeDeliveryController.getNodeDeliveryController(this.siteNodeId, this.languageId, this.contentId);
      this.integrationDeliveryController  = IntegrationDeliveryController.getIntegrationDeliveryController(this.siteNodeId, this.languageId, this.contentId);
             
        boolean isUserRedirected = false;
      Integer protectedSiteNodeVersionId = this.nodeDeliveryController.getProtectedSiteNodeVersionIdForPageCache(dbWrapper.getDatabase(), siteNodeId);
      logger.info("protectedSiteNodeVersionId:" + protectedSiteNodeVersionId);
      Integer forceProtocolChangeSetting = this.nodeDeliveryController.getForceProtocolChangeSettingForPageCache(dbWrapper.getDatabase(), siteNodeId);
      //System.out.println("forceProtocolChangeSetting:" + forceProtocolChangeSetting);
     
      if(logger.isInfoEnabled())
        logger.info("protectedSiteNodeVersionId:" + protectedSiteNodeVersionId);
     
      String protectWorking = CmsPropertyHandler.getProtectDeliverWorking();
      String protectPreview = CmsPropertyHandler.getProtectDeliverPreview();
      boolean protectDeliver = false;

      if(protectWorking.equals("true") && CmsPropertyHandler.getOperatingMode().equals("0"))
        protectDeliver = true;
      else if(protectPreview.equals("true") && CmsPropertyHandler.getOperatingMode().equals("2"))
        protectDeliver = true;

      isUserRedirected = handleAccessBasedProtocolRedirect(protectedSiteNodeVersionId, this.repositoryId, forceProtocolChangeSetting, dbWrapper.getDatabase());

      if(!isUserRedirected)
      {
        if(getRequest().getParameter("authenticateUser") != null && getRequest().getParameter("authenticateUser").equals("true"))
        {
          isUserRedirected = authenticateUser(dbWrapper.getDatabase());
        }
      }

      if(!isUserRedirected)
      {
        if(logger.isInfoEnabled())
          logger.info("RemoteAddress:" + getRequest().getRemoteAddr());
       
        if(CmsPropertyHandler.getAllowInternalCallsBasedOnIP())
        {
          if(getRequest().getRemoteAddr().equals("127.0.0.1") || getRequest().getRemoteAddr().equals("192.168.0.1") || getRequest().getRemoteAddr().equals("0:0:0:0:0:0:0:1%0"))
            protectDeliver = false;
        }
       
        boolean isAnonymousAuthorized = true;
        logger.info("protectedSiteNodeVersionId:" +protectedSiteNodeVersionId);
        if(protectedSiteNodeVersionId != null)
        {
          SiteNodeVersionVO siteNodeVersionVO = SiteNodeVersionController.getController().getSiteNodeVersionVOWithId(protectedSiteNodeVersionId, dbWrapper.getDatabase());
          if(siteNodeVersionVO.getIsProtected().intValue() == SiteNodeVersionVO.YES_WITH_INHERIT_FALLBACK.intValue())
            isAnonymousAuthorized = AccessRightController.getController().getIsPrincipalAuthorized(dbWrapper.getDatabase(), (InfoGluePrincipal)this.getAnonymousPrincipal(), "SiteNodeVersion.Read", protectedSiteNodeVersionId.toString(), false);
          else
            isAnonymousAuthorized = AccessRightController.getController().getIsPrincipalAuthorized(dbWrapper.getDatabase(), (InfoGluePrincipal)this.getAnonymousPrincipal(), "SiteNodeVersion.Read", protectedSiteNodeVersionId.toString());
        }
        logger.info("isAnonymousAuthorized:" + isAnonymousAuthorized);
        logger.info("URI:" + getOriginalFullURL());
        if((protectedSiteNodeVersionId != null && !isAnonymousAuthorized) || protectDeliver || getOriginalFullURL().indexOf("ticket=") > -1)
        {
          logger.info("Plain login routine which among others looks for ticket....");
          if(logger.isInfoEnabled())
          {
            logger.info("protectedSiteNodeVersionId:" + protectedSiteNodeVersionId);
            logger.info("protectDeliver:" + protectDeliver);
          }
          isUserRedirected = handleExtranetLogic(dbWrapper.getDatabase(), this.repositoryId, protectedSiteNodeVersionId, protectDeliver, false);
        }
        else
        {
          String forceIdentityCheck = RepositoryDeliveryController.getRepositoryDeliveryController().getExtraPropertyValue(this.repositoryId, "forceIdentityCheck");
          if(logger.isInfoEnabled())
            logger.info("forceIdentityCheck:" + forceIdentityCheck);
          if(this.principal == null || CmsPropertyHandler.getAnonymousUser().equalsIgnoreCase(this.principal.getName()))
          {
            if(CmsPropertyHandler.getForceIdentityCheck().equalsIgnoreCase("true") || (forceIdentityCheck != null && forceIdentityCheck.equalsIgnoreCase("true")))
            {
              boolean isForcedIdentityCheckDisabled = this.nodeDeliveryController.getIsForcedIdentityCheckDisabled(dbWrapper.getDatabase(), this.siteNodeId);
              if(!isForcedIdentityCheckDisabled && getHttpSession().getAttribute("ssoChecked") == null && (getRequest().getParameter("skipSSOCheck") == null || !getRequest().getParameter("skipSSOCheck").equals("true")))
              {
                Timer t = new Timer();
                logger.info("Let's check for IP:s and user agents to skip redirect for...");
                String userAgentsRegexp = CmsPropertyHandler.getUserAgentsSkippingSSOCheck();
                String ipAddressesRegexp = CmsPropertyHandler.getIpNumbersSkippingSSOCheck();
               
                logger.info("userAgentsRegexp:" + userAgentsRegexp);
                if(userAgentsRegexp != null && !userAgentsRegexp.equals("") && getBrowserBean() != null && getBrowserBean().getUseragent() != null)
                {
                  if(getBrowserBean().getUseragent().matches(userAgentsRegexp))
                    {
                    logger.info("Skipping SSO check for this useragent: " + getBrowserBean().getUseragent());
                    isForcedIdentityCheckDisabled = true;
                    }
                }
               
                logger.info("isForcedIdentityCheckDisabled:" + isForcedIdentityCheckDisabled);
                if(!isForcedIdentityCheckDisabled)
                {
                  logger.info("ipAddressesRegexp:" + ipAddressesRegexp);
                  if(ipAddressesRegexp != null && !ipAddressesRegexp.equals("") && getRequest().getRemoteAddr() != null)
                  {
                    logger.info("IP:" + getRequest().getRemoteAddr());
                    if(getRequest().getRemoteAddr().matches(ipAddressesRegexp))
                      {
                      logger.info("Skipping SSO check for this ip address: " + getRequest().getRemoteAddr());
                      isForcedIdentityCheckDisabled = true;
                      }
                  }
                }
                if(logger.isInfoEnabled())
                  logger.info("Checking ip and useragent took: " + t.getElapsedTime());
              }

              if(logger.isInfoEnabled())
              {
                logger.info("isForcedIdentityCheckDisabled:" + isForcedIdentityCheckDisabled);
                logger.info("isForcedIdentityCheckDisabled:" + isForcedIdentityCheckDisabled);
                logger.info("getHttpSession().getAttribute(ssoChecked):" + getHttpSession().getAttribute("ssoChecked"));
                logger.info("getRequest().getParameter(skipSSOCheck):" + getRequest().getParameter("skipSSOCheck"));
              }
              if(!isForcedIdentityCheckDisabled && getHttpSession().getAttribute("ssoChecked") == null && (getRequest().getParameter("skipSSOCheck") == null || !getRequest().getParameter("skipSSOCheck").equals("true")))
              {
                isUserRedirected = handleExtranetLogic(dbWrapper.getDatabase(), true);
                logger.info("isUserRedirected:" + isUserRedirected);
              }
              else if(!isForcedIdentityCheckDisabled && getRequest().getParameter("skipSSOCheck") != null && getRequest().getParameter("skipSSOCheck").equals("true"))
              {
                getHttpSession().setAttribute("ssoChecked", "true");
              }
            }
          }
        }
      }
           
      logger.info("isUserRedirected:" + isUserRedirected);
      logger.info("principal:" + this.principal);
      if(!isUserRedirected)
        isUserRedirected = rewriteUrl();
     
      String pageKey = this.nodeDeliveryController.getPageCacheKey(dbWrapper.getDatabase(), this.getHttpSession(), getRequest(), this.siteNodeId, this.languageId, this.contentId, browserBean.getUseragent(), this.getRequest().getQueryString(), "");

        if(logger.isInfoEnabled())
          logger.info("pageKey:" + pageKey);

        templateController = getTemplateController(dbWrapper, getSiteNodeId(), getLanguageId(), getContentId(), getRequest(), (InfoGluePrincipal)this.principal, false);

      if(logger.isInfoEnabled())
        logger.info("handled extranet users: " + isUserRedirected);
 
      // ----
      // -- portlet
      // ----
     
      // -- check if the portal is active
          String portalEnabled = CmsPropertyHandler.getEnablePortal();
          boolean portalActive = ((portalEnabled != null) && portalEnabled.equals("true"));
     
          if (portalActive && !isRecacheCall)
          {
            if(logger.isInfoEnabled())
              logger.info("---> Checking for portlet action");
             
            PortalService service = new PortalService();
              //TODO: catch PortalException?
              boolean actionExecuted = service.service(getRequest(), getResponse());
             
              // -- if an action was executed return NONE as a redirect is issued
              if (actionExecuted)
              {
                if(logger.isInfoEnabled())
                  logger.info("---> PortletAction was executed, returning NONE as a redirect has been issued");
                  isUserRedirected = true;
                  return NONE;
              }
          }
 
          if(logger.isInfoEnabled())
            logger.info("handled portal action: " + isUserRedirected);
         
      if(!isUserRedirected)
      { 
        if(logger.isInfoEnabled())
          logger.info("this.templateController.getPrincipal():" + templateController.getPrincipal());
       
        DeliveryContext deliveryContext = DeliveryContext.getDeliveryContext(true);
        deliveryContext.setRepositoryName(this.repositoryName);
        deliveryContext.setSiteNodeId(this.siteNodeId);
        deliveryContext.setContentId(this.contentId);
        deliveryContext.setLanguageId(this.languageId);
        deliveryContext.setPageKey(pageKey);
        //deliveryContext.setSession(this.getSession());
        //deliveryContext.setInfoGlueAbstractAction(this);
        deliveryContext.setHttpServletRequest(this.getRequest());
        deliveryContext.setHttpServletResponse(this.getResponse());
        deliveryContext.setUseFullUrl(Boolean.parseBoolean(CmsPropertyHandler.getUseDNSNameInURI()));
        boolean enableIfModifiedHeaders = CmsPropertyHandler.getEnableIfModifiedHeaders();
       
        boolean skipRender = false;
        PageDeliveryMetaDataVO pdmd = null;

        if (enableIfModifiedHeaders) {
          try
          {
            boolean isIfModifiedLogic = getIsIfModifiedLogicValid(deliveryContext, templateController.getPrincipal(), true);
            logger.info("enableIfModifiedHeaders state is:" + enableIfModifiedHeaders);
            if(isIfModifiedLogic)
            {
              String ifModifiedSince = this.getRequest().getHeader("If-Modified-Since");
              logger.info("ifModifiedSince:" + ifModifiedSince);
              //System.out.println("pageKey:" + pageKey);
              if(ifModifiedSince != null && !ifModifiedSince.equals(""))
              {
                pdmd = PageDeliveryMetaDataController.getController().getPageDeliveryMetaDataVO(dbWrapper.getDatabase(), this.siteNodeId, this.languageId, this.contentId);
                logger.info("pdmd A:" + (pdmd == null ? "null" : pdmd.getId()));
                if(pdmd != null && pdmd.getLastModifiedDateTime() != null)
                {
                  logger.info("pdmd getLastModifiedTimeout:" + pdmd.getLastModifiedTimeout());
                  logger.info("System.currentTimeMillis:" + System.currentTimeMillis());
                  long diff = System.currentTimeMillis() - (pdmd.getLastModifiedTimeout() != null ? pdmd.getLastModifiedTimeout().getTime() : 0);
                  logger.info("diff:" + diff);
                  if(diff < 0 || pdmd.getLastModifiedTimeout() == null)
                  {
                    Date ifModifiedSinceDate = HTTP_DATE_FORMAT.parse( ifModifiedSince );
                    logger.info("pdmd B:" + pdmd.getId() + ":" + pdmd.getLastModifiedDateTime());
                    logger.info("*************\nCompares:" + pdmd.getLastModifiedDateTime() + "=" + ifModifiedSinceDate);
                    logger.info("pdmd.getLastModifiedTimeout():" + pdmd.getLastModifiedTimeout());
                    if(ifModifiedSinceDate.getTime() >= pdmd.getLastModifiedDateTime().getTime() - 1000)
                    {
                      logger.info("Returning NOT_MODIFIED");
                      this.getResponse().setStatus( HttpServletResponse.SC_NOT_MODIFIED );
                      pageTimer.printElapsedTime("Delivered NOT MODIFIED IN", 50);
                      skipRender = true;
                      return NONE;
                    }
                  }
                }
              }
            }
          }
          catch (Exception e)
          {
            e.printStackTrace();
          }
        }
       
        logger.info("skipRender:" + skipRender);
        if(!skipRender)
        {
          SiteNodeTypeDefinitionVO siteNodeTypeDefinitionVO = getSiteNodeTypeDefinition(this.siteNodeId, dbWrapper.getDatabase());
             
          try
            {
                String invokerClassName = siteNodeTypeDefinitionVO.getInvokerClassName();
                PageInvoker pageInvoker = (PageInvoker)Class.forName(invokerClassName).newInstance();
                pageInvoker.setParameters(dbWrapper, this.getRequest(), this.getResponse(), templateController, deliveryContext);
                pageInvoker.deliverPage();
 
                boolean isCachedResponse = deliveryContext.getIsCachedResponse();
                logger.info("isCachedResponse:" + isCachedResponse);
               
            boolean isIfModifiedLogic = getIsIfModifiedLogicValid(deliveryContext, templateController.getPrincipal(), false);
            logger.info("isIfModifiedLogic 2:" + isIfModifiedLogic);
            logger.info("deliveryContext.getLastModifiedDateTime():" + deliveryContext.getLastModifiedDateTime());
           
            /*Fetching meta info data*/
            if(isCachedResponse && pdmd == null && isIfModifiedLogic && enableIfModifiedHeaders) {
              logger.info("enableIfModifiedHeaders state is:" + enableIfModifiedHeaders);
              pdmd = PageDeliveryMetaDataController.getController().getPageDeliveryMetaDataVO(dbWrapper.getDatabase(), this.siteNodeId, this.languageId, this.contentId);
            }
           
            if(pdmd != null)
              logger.info("pdmd():" + pdmd.getLastModifiedDateTime());

            if(isIfModifiedLogic && (!isCachedResponse || pdmd == null/* || deliveryContext.getLastModifiedDateTime().after(pdmd.getLastModifiedDateTime())*/))
            {
              Timer t2 = new Timer();
              logger.info("We should register the last modified date now. Add it to the thread which registers it: " + deliveryContext.getLastModifiedDateTime() + ":" + deliveryContext.hashCode());
              try
              {
                PageDeliveryMetaDataVO pageDeliveryMetaDataVO = new PageDeliveryMetaDataVO();

                List<String> entities = deliveryContext.getAllUsedEntitiesAsSet();
               
                List<String> allUsedEntitiesFilteredCopy = new ArrayList<String>();
                for(String s : entities)
                {
                  if(s.startsWith("content_") && s.indexOf("_", 8) == -1)
                  {
                    allUsedEntitiesFilteredCopy.add(s.replaceAll("content_", "c_"));
                    //allUsedEntitiesFilteredCopy.add(s); //getPooledString(s.hashCode()));
                    //System.out.println("Added: " + s);
                  }
                  else if(s.startsWith("siteNode_"))
                    allUsedEntitiesFilteredCopy.add(s.replaceAll("siteNode_", "sn_"));
                  else if(s.startsWith("selectiveCacheUpdateNonApplicable"))
                  {
                    allUsedEntitiesFilteredCopy.clear();
                    allUsedEntitiesFilteredCopy.add(s);
                    pageDeliveryMetaDataVO.setSelectiveCacheUpdateNotApplicable(true);
                  }
                }

                Collection<PageDeliveryMetaDataEntityVO> entitiesCollection = new ArrayList<PageDeliveryMetaDataEntityVO>();
                for(String s : allUsedEntitiesFilteredCopy)
                {
                  if(s.startsWith("c_"))
                  {
                    PageDeliveryMetaDataEntityVO pageDeliveryMetaDataEntityVO = new PageDeliveryMetaDataEntityVO();
                    pageDeliveryMetaDataEntityVO.setContentId(new Integer(s.replaceAll("c_", "")));
                    pageDeliveryMetaDataEntityVO.setPageDeliveryMetaDataId(pageDeliveryMetaDataVO.getId());
                    entitiesCollection.add(pageDeliveryMetaDataEntityVO);
                  }
                  else if(s.startsWith("sn_"))
                  {
                    PageDeliveryMetaDataEntityVO pageDeliveryMetaDataEntityVO = new PageDeliveryMetaDataEntityVO();
                    pageDeliveryMetaDataEntityVO.setSiteNodeId(new Integer(s.replaceAll("sn_", "")));
                    pageDeliveryMetaDataEntityVO.setPageDeliveryMetaDataId(pageDeliveryMetaDataVO.getId());
                    entitiesCollection.add(pageDeliveryMetaDataEntityVO);
                  }
                }

                String allUsedEntitiesAsString = StringUtils.join(allUsedEntitiesFilteredCopy, "|");
                logger.info("allUsedEntitiesAsString:" + allUsedEntitiesAsString);
                //System.out.println("allUsedEntitiesAsString:" + allUsedEntitiesAsString.length());
               
                pageDeliveryMetaDataVO.setSiteNodeId(deliveryContext.getSiteNodeId());
                pageDeliveryMetaDataVO.setLanguageId(deliveryContext.getLanguageId());
                pageDeliveryMetaDataVO.setContentId(deliveryContext.getContentId());
                pageDeliveryMetaDataVO.setLastModifiedDateTime(deliveryContext.getLastModifiedDateTime());
                if(deliveryContext.getPageCacheTimeout() != null && deliveryContext.getPageCacheTimeout() > -1)
                {
                  logger.info("deliveryContext.getPageCacheTimeout(): " + deliveryContext.getPageCacheTimeout());
                  logger.info("Setting page timeout: " + deliveryContext.getPageCacheTimeout()*1000);
                  logger.info("Current time: " + System.currentTimeMillis());
                  Calendar cal = Calendar.getInstance();
                  cal.add(Calendar.SECOND, deliveryContext.getPageCacheTimeout());
                  pageDeliveryMetaDataVO.setLastModifiedTimeout(cal.getTime());
                }
                else
                  logger.info("AAAAAAAAAAAAAAAAAAAAA: " + deliveryContext.getPageCacheTimeout());

                pageDeliveryMetaDataVO.setUsedEntities(allUsedEntitiesAsString);
               
                if (enableIfModifiedHeaders) {
                  PageDeliveryMetaDataController.getController().deletePageDeliveryMetaData(dbWrapper.getDatabase(), pageDeliveryMetaDataVO.getSiteNodeId(), null);
                  PageDeliveryMetaDataController.getController().create(dbWrapper.getDatabase(), pageDeliveryMetaDataVO, entitiesCollection);
                }
               
                String key = "" + pageDeliveryMetaDataVO.getSiteNodeId() + "_" + pageDeliveryMetaDataVO.getLanguageId() + "_" + pageDeliveryMetaDataVO.getContentId();
                  logger.info("key on store:" + key);
                CacheController.cacheObjectInAdvancedCache("pageDeliveryMetaDataCache", key, pageDeliveryMetaDataVO);
              }
              catch (Exception e)
              {
                logger.error("Error storing page meta data: " + e.getMessage(), e);
              }
              t2.printElapsedTime("AAAAAAAAAAAAAAAAA",20);
            }
                request.setAttribute("progress", "after pageInvoker was called");
            }
            catch(ClassNotFoundException e)
            {
                throw new SystemException("An error was thrown when trying to use the page invoker class assigned to this page type:" + e.getMessage(), e);
          }
            finally
            {
              deliveryContext.clear();
              deliveryContext = null;
            }
        }
      }
     
          //StatisticsService.getStatisticsService().registerRequest(getRequest(), getResponse(), pagePath, elapsedTime);
      //logger.info("Registered request in statistics service");
    }
    catch(PageNotFoundException e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();
     
      logger.warn("A user requested a non existing page:" + e.getMessage() + "\n" + extraInformation);
      rollbackTransaction(dbWrapper.getDatabase());

      getResponse().setContentType("text/html; charset=UTF-8");
      getRequest().setAttribute("responseCode", "404");
      getRequest().setAttribute("error", e);
      getRequest().setAttribute("errorUrl", getErrorUrl());
      getRequest().getRequestDispatcher("/ErrorPage.action").forward(getRequest(), getResponse());
    }
    catch(PageNotPublishedException e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();

      logger.info("A user requested page which has no published version:" + e.getMessage() + "\n" + extraInformation);
      rollbackTransaction(dbWrapper.getDatabase());

      getResponse().setContentType("text/html; charset=UTF-8");
      getRequest().setAttribute("responseCode", "404");
      getRequest().setAttribute("error", e);
      getRequest().setAttribute("errorUrl", getErrorUrl());
      getRequest().setAttribute("originalFullURL", getOriginalFullURL());
      getRequest().getRequestDispatcher("/ErrorPage.action").forward(getRequest(), getResponse());
    }
    catch(NoBaseTemplateFoundException e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();
     
      logger.error("A user requested a page which had no base template (probably of the old HTMLPageInvoker type - should be changed):" + e.getMessage() + "\n" + extraInformation);
      rollbackTransaction(dbWrapper.getDatabase());

      getResponse().setContentType("text/html; charset=UTF-8");
      getRequest().setAttribute("responseCode", "500");
      getRequest().setAttribute("error", e);
      getRequest().setAttribute("errorUrl", getErrorUrl());
      getRequest().getRequestDispatcher("/ErrorPage.action").forward(getRequest(), getResponse());
    }
    catch(IOException e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();
     
      if(e.getCause() != null)
      {
        if(e.getCause() instanceof SocketException)
          logger.warn("A io exception was thrown returning data to client:" + e.getCause().getMessage() + "\n" + extraInformation);
        else
          logger.error("A io exception was thrown returning data to client:" + e.getCause().getMessage() + "\n" + extraInformation);         
      }
      else
        logger.error("A io exception was thrown returning data to client:" + e.getMessage() + "\n" + extraInformation);   
      rollbackTransaction(dbWrapper.getDatabase());
    }
    catch(Exception e)
    {
      logger.warn("Extra warn:" + e.getMessage(), e);
     
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();

      logger.error("An error occurred (se warning log for further info):" + e.getMessage());
      logger.warn("An error occurred so we should not complete the transaction:" + e.getMessage() + "\n" + extraInformation, e);
     
      rollbackTransaction(dbWrapper.getDatabase());

      getResponse().setContentType("text/html; charset=UTF-8");
      getRequest().setAttribute("responseCode", "500");
      getRequest().setAttribute("error", e);
      getRequest().setAttribute("errorUrl", getErrorUrl());
      getRequest().getRequestDispatcher("/ErrorPage.action").forward(getRequest(), getResponse());
    }
    finally
    {
      if(logger.isInfoEnabled())
        logger.info("Before closing transaction");
     
      try
      {
        closeTransaction(dbWrapper.getDatabase());
      }
      catch(Exception e)
      {
        logger.error("Problem closing connection:" + e.getMessage(), e);
      }
     
      try
      {
        if(templateController != null)
        {
          templateController.clear();
            templateController = null;
        }
      }
      catch (Exception e)
      {
        logger.error("Problem clearing:" + e.getMessage(), e);
      }
     
      if(logger.isInfoEnabled())
        logger.info("After closing transaction");

      elapsedTime = Math.abs(System.currentTimeMillis() - start);
      RequestAnalyser.getRequestAnalyser().decNumberOfCurrentRequests(elapsedTime);
      lastRequestProcessingTime = elapsedTime;

      //This only states how much memory in general has been allocated more than when the thread started. It can well be other threads allocating but a timeframe is nice.
      float memoryDiff = (((float)Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) - startTotalMemory) / 1024f / 1024f;
      logger.info("memoryDiff:" + memoryDiff + "(" + startTotalMemory + "-" + ((float)Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) + ")");
      if(memoryDiff > 100)
        logger.warn("During the rendering of: " + this.getOriginalFullURL() + " a large amount (" + (int)memoryDiff + "MB) was allocated.");
     
        //System.out.println("The page delivery took " + elapsedTime + "ms for request " + this.getRequest().getRequestURL() + "?" + this.getRequest().getQueryString());
      if(!memoryWarningSent)
      {
        float memoryLeft = ((float)Runtime.getRuntime().maxMemory() - (float)Runtime.getRuntime().totalMemory()) / 1024f / 1024f;
        float percentLeft = (memoryLeft / ((float)Runtime.getRuntime().maxMemory() / 1024f / 1024f)) * 100f;
        float percentLeft2 = ((float)Runtime.getRuntime().freeMemory() / (float)Runtime.getRuntime().totalMemory()) * 100f;

        if(percentLeft < 15 && percentLeft2 < 15)
        {
          memoryWarningSent = true;
          String subject = "Memory is getting low on " + CmsPropertyHandler.getServerName();
          String mailBody = "The java maximum heap size is almost used up - only " + (int)memoryLeft + "MB (" + (int)percentLeft + "%) left. Increase the max heap size if possible or trim the cache sizes if they are very large.";
              String warningEmailReceiver = CmsPropertyHandler.getWarningEmailReceiver();
              if(warningEmailReceiver != null && !warningEmailReceiver.equals("") && warningEmailReceiver.indexOf("@warningEmailReceiver@") == -1)
              {
            try
            {
              logger.warn("Sending warning mail:" + (int)percentLeft + ":" + (int)memoryLeft + ":" + Runtime.getRuntime().maxMemory() / 1024 / 1024);
              MailServiceFactory.getService().sendEmail(CmsPropertyHandler.getMailContentType(), warningEmailReceiver, warningEmailReceiver, null, null, null, null, subject, mailBody, "utf-8");
            }
            catch (Exception e)
            {
              logger.error("Could not send mail:" + e.getMessage(), e);
            }
              }
        }
      }

      String originalFullUrl = getOriginalFullURL();
      RequestAnalyser.getRequestAnalyser().registerLatestPageStatistics("" + originalFullUrl + " (" + browserBean.getUseragent() + ", IP: " + getRequest().getRemoteAddr() + ") - took " + elapsedTime + " ms.");
      if(elapsedTime > 5000)
        RequestAnalyser.getRequestAnalyser().registerPageStatistics("" + originalFullUrl + " (" + browserBean.getUseragent() + ")", elapsedTime);
               
        //System.out.println("The page delivery took " + elapsedTime + "ms");
        if(elapsedTime > 10000)
      {
          logger.warn("The page delivery took " + elapsedTime + "ms for request " + originalFullUrl);
          logger.warn("The memory consumption was " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) + "(" + Runtime.getRuntime().totalMemory() + "/" + Runtime.getRuntime().maxMemory() + ") bytes");
      }
      else
      {
        if(logger.isInfoEnabled())
        {
          logger.info("The page delivery took " + elapsedTime + "ms");     
          logger.info("The memory consumption was " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) + "(" + Runtime.getRuntime().totalMemory() + "/" + Runtime.getRuntime().maxMemory() + ") bytes");
        }
      }

        if(tk != null && !tk.getIsDoneRunning())
          tk.done();
        else
          logger.warn("Done had allready been run... skipping");
   
      killUnwantedSessions();
    }
View Full Code Here

      logger.info("************************************************");
    }
   
        HttpServletRequest request = getRequest();

        ThreadMonitor tk = null;
      if(!CmsPropertyHandler.getOperatingMode().equals("3"))
        tk = new ThreadMonitor(new Long(CmsPropertyHandler.getDeliverRequestTimeout()).longValue(), request, "Page view took to long!", true);
      else
      {
        if(!CmsPropertyHandler.getKillLiveRequestWhichTimedout())
          tk = new ThreadMonitor(new Long(CmsPropertyHandler.getLiveDeliverRequestTimeout()).longValue(), request, "Page view seems to take to long!", false);
        else
          tk = new ThreadMonitor(new Long(CmsPropertyHandler.getLiveDeliverRequestTimeout()).longValue(), request, "Page view took to long!", true);
      }
       
      RequestAnalyser.getRequestAnalyser().incNumberOfCurrentRequests(tk);
     
       long start      = System.currentTimeMillis();
    long elapsedTime   = 0;
    float startTotalMemory   = ((float)Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory());
         
    DatabaseWrapper dbWrapper = new DatabaseWrapper(CastorDatabaseService.getDatabase());
      //Database db = CastorDatabaseService.getDatabase();
   
    beginTransaction(dbWrapper.getDatabase());

    try
    {
      validateAndModifyInputParameters(dbWrapper.getDatabase());
       
      this.nodeDeliveryController      = NodeDeliveryController.getNodeDeliveryController(this.siteNodeId, this.languageId, this.contentId);
      this.integrationDeliveryController  = IntegrationDeliveryController.getIntegrationDeliveryController(this.siteNodeId, this.languageId, this.contentId);

      boolean isUserRedirected = false;
      Integer protectedSiteNodeVersionId = this.nodeDeliveryController.getProtectedSiteNodeVersionId(dbWrapper.getDatabase(), siteNodeId, "SiteNodeVersion.Read");
      logger.info("protectedSiteNodeVersionId:" + protectedSiteNodeVersionId);

      boolean protectDeliver = true;

      if(logger.isInfoEnabled())
        logger.info("RemoteAddress:" + getRequest().getRemoteAddr());
     
      //if(getRequest().getRemoteAddr().equals("127.0.0.1") || getRequest().getRemoteAddr().equals("192.168.0.1"))
      //  protectDeliver = false;
           
      if(protectedSiteNodeVersionId != null || protectDeliver)
        isUserRedirected = handleExtranetLogic(dbWrapper.getDatabase(), this.repositoryId, protectedSiteNodeVersionId, protectDeliver, true);
      /*
      else
      {
        String forceIdentityCheck = RepositoryDeliveryController.getRepositoryDeliveryController().getExtraPropertyValue(this.repositoryId, "forceIdentityCheck");
        if(CmsPropertyHandler.getForceIdentityCheck().equalsIgnoreCase("true") || (forceIdentityCheck != null && forceIdentityCheck.equalsIgnoreCase("true")))
          isUserRedirected = handleExtranetLogic(dbWrapper.getDatabase(), true);
      }
      */
     
      if(!isUserRedirected)
        isUserRedirected = rewriteUrl();
     
        String pageKey = this.nodeDeliveryController.getPageCacheKey(dbWrapper.getDatabase(), this.getHttpSession(), this.getRequest(), this.siteNodeId, this.languageId, this.contentId, browserBean.getUseragent(), this.getRequest().getQueryString(), "_" + this.showSimple + "_pagecomponentDecorated");

      templateController = getTemplateController(dbWrapper, getSiteNodeId(), getLanguageId(), getContentId(), getRequest(), (InfoGluePrincipal)this.principal, true);

        InfoGluePrincipal principal = templateController.getPrincipal();
        String cmsUserName = (String)templateController.getHttpServletRequest().getSession().getAttribute("cmsUserName");
        if(cmsUserName != null && !CmsPropertyHandler.getAnonymousUser().equalsIgnoreCase(cmsUserName))
          principal = templateController.getPrincipal(cmsUserName);

        //As this is the decorated view we need to cache personalized results due to access rights etc.
        if(principal != null && pageKey.indexOf(principal.getName()) == -1)
          pageKey = pageKey + "_" + principal.getName();

        if(logger.isInfoEnabled())
          logger.info("A pageKey:" + pageKey);

      if(logger.isInfoEnabled())
        logger.info("handled extranet users");

      // ----
      // -- portlet
      // ----
     
      // -- check if the portal is active
          String portalEnabled = CmsPropertyHandler.getEnablePortal();
          boolean portalActive = ((portalEnabled != null) && portalEnabled.equals("true"));
     
          if (portalActive && !isRecacheCall)
          {
              logger.info("---> Checking for portlet action");
              PortalService service = new PortalService();
              //TODO: catch PortalException?
              boolean actionExecuted = service.service(getRequest(), getResponse());
             
              // -- if an action was executed return NONE as a redirect is issued
              if (actionExecuted)
              {
                  logger.info("---> PortletAction was executed, returning NONE as a redirect has been issued");
                  isUserRedirected = true;
                  return NONE;
              }
          }
 
          if(logger.isInfoEnabled())
            logger.info("handled portal action");

      if(!isUserRedirected)
      { 
        logger.info("this.templateController.getPrincipal():" + templateController.getPrincipal());
   
        DeliveryContext deliveryContext = DeliveryContext.getDeliveryContext(true);
        deliveryContext.setRepositoryName(this.repositoryName);
        deliveryContext.setSiteNodeId(this.siteNodeId);
        deliveryContext.setLanguageId(this.languageId);
        deliveryContext.setContentId(this.contentId);
        deliveryContext.setShowSimple(this.showSimple);
        deliveryContext.setPageKey(pageKey);
        //deliveryContext.setSession(this.getSession());
        //deliveryContext.setInfoGlueAbstractAction(this);
        deliveryContext.setHttpServletRequest(this.getRequest());
        deliveryContext.setHttpServletResponse(this.getResponse());
        deliveryContext.setUseFullUrl(Boolean.parseBoolean(CmsPropertyHandler.getUseDNSNameInURI()));

        //deliveryContext.setDisablePageCache(true);
       
        SiteNodeVO siteNode = nodeDeliveryController.getSiteNodeVO(dbWrapper.getDatabase(), this.siteNodeId);
        if(siteNode == null)
            throw new SystemException("There was no page with this id.");

        if(siteNode.getSiteNodeTypeDefinitionId() == null)
            throw new SystemException("There was no SiteNodeTypeDefinition defined for the site node " + siteNode.getName() + "[" + siteNode.getId() + "].");

        SiteNodeTypeDefinitionVO siteNodeTypeDefinitionVO = getSiteNodeTypeDefinition(this.siteNodeId, dbWrapper.getDatabase());
        String invokerClassName = siteNodeTypeDefinitionVO.getInvokerClassName();
       
        if(invokerClassName == null || invokerClassName.equals(""))
        {
            throw new SystemException("There was no page invoker class assigned to this page type.");
        }
        else
        {
            try
            {
                PageInvoker pageInvoker = (PageInvoker)Class.forName(invokerClassName).newInstance();
                pageInvoker = pageInvoker.getDecoratedPageInvoker(templateController, deliveryContext);
                pageInvoker.setParameters(dbWrapper, this.getRequest(), this.getResponse(), templateController, deliveryContext);
                pageInvoker.deliverPage();
            }
            catch(ClassNotFoundException e)
            {
                throw new SystemException("An error was thrown when trying to use the page invoker class assigned to this page type:" + e.getMessage(), e);
            }
            finally
            {
              deliveryContext.clear();
              deliveryContext = null;
            }
        }
      }
     
      //StatisticsService.getStatisticsService().registerRequest(getRequest(), getResponse(), pagePath, elapsedTime);
    }
    catch(PageNotFoundException e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();
     
      logger.warn("A user requested a non existing page:" + e.getMessage() + "\n" + extraInformation);
      rollbackTransaction(dbWrapper.getDatabase());

      getResponse().setContentType("text/html; charset=UTF-8");
      getRequest().setAttribute("responseCode", "404");
      getRequest().setAttribute("error", e);
      getRequest().setAttribute("errorUrl", getErrorUrl());
      getRequest().getRequestDispatcher("/ErrorPage.action").forward(getRequest(), getResponse());
    }
    catch(PageNotPublishedException e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();
     
      logger.info("A user requested page which has no published version:" + e.getMessage() + "\n" + extraInformation);
      rollbackTransaction(dbWrapper.getDatabase());

      getResponse().setContentType("text/html; charset=UTF-8");
      getRequest().setAttribute("responseCode", "404");
      getRequest().setAttribute("error", e);
      getRequest().setAttribute("errorUrl", getErrorUrl());
      getRequest().getRequestDispatcher("/ErrorPage.action").forward(getRequest(), getResponse());
    }
    catch(NoBaseTemplateFoundException e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();
     
      logger.error("A user requested a page which had no base template (probably of the old HTMLPageInvoker type - should be changed):" + e.getMessage() + "\n" + extraInformation);
      rollbackTransaction(dbWrapper.getDatabase());

      getResponse().setContentType("text/html; charset=UTF-8");
      getRequest().setAttribute("responseCode", "500");
      getRequest().setAttribute("error", e);
      getRequest().setAttribute("errorUrl", getErrorUrl());
      getRequest().getRequestDispatcher("/ErrorPage.action").forward(getRequest(), getResponse());
    }
    catch(Exception e)
    {
      String extraInformation = "Original URL: " + getOriginalFullURL() + "\n";
      extraInformation += "Referer: " + getRequest().getHeader("Referer") + "\n";
      extraInformation += "UserAgent: " + getRequest().getHeader("User-Agent") + "\n";
      extraInformation += "User IP: " + getRequest().getRemoteAddr();
     
      if(e instanceof java.net.SocketException)
        logger.warn("An error occurred so we should not complete the transaction:" + e.getMessage() + "\n" + extraInformation);
      else
        logger.error("An error occurred so we should not complete the transaction:" + e.getMessage() + "\n" + extraInformation, e);
       
      rollbackTransaction(dbWrapper.getDatabase());
     
      throw new SystemException(e.getMessage());
    }
    finally
    {
      try
      {
        closeTransaction(dbWrapper.getDatabase());
      }
      catch (Exception e)
      {
        logger.error("Problem closing connection:" + e.getMessage(), e);
      }
     
      try
      {
        if(templateController != null)
        {
          templateController.clear();
            templateController = null;
        }
      }
      catch (Exception e)
      {
        logger.error("Problem clearing:" + e.getMessage(), e);

      }


      elapsedTime = Math.abs(System.currentTimeMillis() - start);
         
        RequestAnalyser.getRequestAnalyser().decNumberOfCurrentRequests(elapsedTime);

        //This only states how much memory in general has been allocated more than when the thread started. It can well be other threads allocating but a timeframe is nice.
      float memoryDiff = (((float)Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) - startTotalMemory) / 1024f / 1024f;
      logger.info("memoryDiff:" + memoryDiff + "(" + startTotalMemory + "-" + ((float)Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) + ")");
      if(memoryDiff > 100)
        logger.warn("During the rendering of: " + this.getOriginalFullURL() + " a large amount (" + (int)memoryDiff + "MB) was allocated.");
     
      if(!memoryWarningSent)
      {
        float memoryLeft = ((float)Runtime.getRuntime().maxMemory() - (float)Runtime.getRuntime().totalMemory()) / 1024f / 1024f;
        float percentLeft = (memoryLeft / ((float)Runtime.getRuntime().maxMemory() / 1024f / 1024f)) * 100f;
        float percentLeft2 = ((float)Runtime.getRuntime().freeMemory() / (float)Runtime.getRuntime().totalMemory()) * 100f;
       
        //System.out.println("memoryLeft:" + memoryLeft);
        //System.out.println("maxMemory:" + (Runtime.getRuntime().maxMemory() / 1024f / 1024f));
        //System.out.println("totalMemory:" + (Runtime.getRuntime().totalMemory() / 1024f / 1024f));
        //System.out.println("freeMemory:" + (Runtime.getRuntime().freeMemory() / 1024f / 1024f));
        //System.out.println("percentLeft:" + percentLeft);
        //System.out.println("percentLeft2:" + percentLeft2);
        if(percentLeft < 15 && percentLeft2 < 15)
        {
          memoryWarningSent = true;
          String subject = "Memory is getting low on " + CmsPropertyHandler.getServerName();
          String mailBody = "The java maximum heap size is almost used up - only " + (int)memoryLeft + "MB (" + (int)percentLeft + "%) left. Increase the max heap size if possible or trim the cache sizes if they are very large.";
              String warningEmailReceiver = CmsPropertyHandler.getWarningEmailReceiver();
              if(warningEmailReceiver != null && !warningEmailReceiver.equals("") && warningEmailReceiver.indexOf("@warningEmailReceiver@") == -1)
              {
            try
            {
              logger.warn("Sending warning mail:" + (int)percentLeft + ":" + (int)memoryLeft + ":" + Runtime.getRuntime().maxMemory() / 1024f / 1024f);
              MailServiceFactory.getService().sendEmail(CmsPropertyHandler.getMailContentType(), warningEmailReceiver, warningEmailReceiver, null, null, null, null, subject, mailBody, "utf-8");
            }
            catch (Exception e)
            {
              logger.error("Could not send mail:" + e.getMessage(), e);
            }
              }
        }
      }

      String originalFullUrl = getOriginalFullURL();
      if(elapsedTime > 20000)
      {
          logger.warn("The page delivery took " + elapsedTime + "ms for request " + originalFullUrl);
          logger.warn("The memory consumption was " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) + "(" + Runtime.getRuntime().totalMemory() + "/" + Runtime.getRuntime().maxMemory() + ") bytes");
      }
      else
      {
          logger.info("The page delivery took " + elapsedTime + "ms");     
          logger.info("The memory consumption was " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) + "(" + Runtime.getRuntime().totalMemory() + "/" + Runtime.getRuntime().maxMemory() + ") bytes");
      }

        if(tk != null && !tk.getIsDoneRunning())
          tk.done();
        else
          logger.warn("Done had allready been run... skipping");
    }
   
    return NONE;
View Full Code Here

        return NONE;
      */
      logger.info("A cache update was received");
     
      if(!CmsPropertyHandler.getOperatingMode().equals("3"))
        tk = new ThreadMonitor(2000, this.getRequest(), "Update cache took to long", false);

      logger.info("Update Cache starts..");
        String operatingMode = CmsPropertyHandler.getOperatingMode();
   
        if(operatingMode != null && operatingMode.equalsIgnoreCase("3"))
View Full Code Here

TOP

Related Classes of org.infoglue.deliver.util.ThreadMonitor

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.