Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2010, Red Hat, Inc., and individual contributors
   * as indicated by the @author tags. See the copyright.txt file in the
   * distribution for a full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.as.host.controller.model.jvm;
 
 import static org.jboss.as.host.controller.HostControllerLogger.ROOT_LOGGER;
 import static org.jboss.as.host.controller.HostControllerMessages.MESSAGES;
 
 import java.util.List;
 import java.util.Map;
 

Author(s):
Kabir Khan
Version:
$Revision: 1.1 $
 
 public class JvmOptionsBuilderFactory {
 
     private static final JvmOptionsBuilderFactory INSTANCE = new JvmOptionsBuilderFactory();
 
     private static final Map<JvmTypeJvmOptionsBuilderBUILDERS;
     static {
         Map<JvmTypeJvmOptionsBuildermap = new HashMap<JvmTypeJvmOptionsBuilder>();
         map.put(.new SunJvmOptionsBuilder(.));
         map.put(.new IbmJvmOptionsBuilder(.));
          = Collections.unmodifiableMap(map);
     }
 
     private JvmOptionsBuilderFactory() {
     }
 
     public static JvmOptionsBuilderFactory getInstance() {
         return ;
     }
 
     public void addOptions(JvmElement jvmElementList<Stringcommand){
         if (jvmElement == null) {
             throw .nullVar("jvm");
         }
         if (command == null) {
             throw .nullVar("command");
         }
         JvmOptionsBuilder builder = .get(jvmElement.getJvmType());
         if (builder == null) {
             throw .unknown("jvm"jvmElement.getJvmType());
         }
         builder.addToOptions(jvmElementcommand);
     }
 
     private abstract static class JvmOptionsBuilder{
         final JvmType type;
 
         JvmOptionsBuilder(JvmType type) {
             this. = type;
         }
 
         void addToOptions(JvmElement jvmElementList<Stringcommand){
             String heap = jvmElement.getHeapSize();
             String maxHeap = jvmElement.getMaxHeap();
 
             // FIXME not the correct place to establish defaults
             if (maxHeap == null && heap != null) {
                 maxHeap = heap;
             }
             if (heap == null && maxHeap != null) {
                 heap = maxHeap;
             }
 
             addPermGen(jvmElementcommand);
 
             //Add to command
             if (heap != null) {
                 command.add("-Xms"heap);
             }
             if (maxHeap != null) {
                 command.add("-Xmx"maxHeap);
            }
            if (jvmElement.getStack() != null) {
                command.add("-Xss" + jvmElement.getStack());
            }
            if (jvmElement.getAgentPath() != null) {
                command.add("-agentpath:" + jvmElement.getAgentPath());
            }
            if (jvmElement.getAgentLib() != null) {
                command.add("-agentlib:" + jvmElement.getAgentLib());
            }
            if (jvmElement.getJavaagent() != null) {
                command.add("-javaagent:" + jvmElement.getJavaagent());
            }
            if (jvmElement.isDebugEnabled() != null && jvmElement.isDebugEnabled() && jvmElement.getDebugOptions() != null) {
                command.add(jvmElement.getDebugOptions());
            }
            List<Stringoptions = jvmElement.getJvmOptions().getOptions();
            if (options.size() > 0) {
                String jvmName = jvmElement.getName();
                for (String option : options) {
                    if (!checkOption(heap != null && option.startsWith("-Xms"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(maxHeap != null && option.startsWith("-Xmx"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.getStack() != null && option.startsWith("-Xss"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.isDebugEnabled() != null && jvmElement.isDebugEnabled() && jvmElement.getDebugOptions() != null &&
                            (option.startsWith("-Xrunjdwp") || option.startsWith("-agentlib:jdwp")),
                            jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.getAgentPath() != null && option.startsWith("-agentpath:"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.getAgentLib() != null && option.startsWith("-agentlib:"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.getAgentLib() != null && option.startsWith("-javaagent:"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.getJavaagent() != null && option.startsWith("-Xmx"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.getJavaagent() != null && option.startsWith("-XX:PermSize"), jvmNameoption..toString())) {
                        continue;
                    }
                    if (!checkOption(jvmElement.getJavaagent() != null && option.startsWith("-XX:MaxPermSize"), jvmNameoption..toString())) {
                        continue;
                    }
                    command.add(option);
                }
            }
        }
        boolean checkOption(boolean conditionString jvmString optionString schemaElement) {
            if (condition) {
                .optionAlreadySet(optionjvmschemaElement);
                return false;
            }
            return true;
        }
        abstract void addPermGen(JvmElement jvmList<Stringcommand);
    }
    private static class SunJvmOptionsBuilder extends JvmOptionsBuilder {
        public SunJvmOptionsBuilder(JvmType type) {
            super(type);
        }
        @Override
        void addPermGen(JvmElement jvmElementList<Stringcommand) {
            String permgen = jvmElement.getPermgenSize();
            String maxPermgen = jvmElement.getMaxPermgen();
            if (maxPermgen == null && permgen != null) {
                maxPermgen = permgen;
            }
            if (permgen == null && maxPermgen != null) {
                permgen = maxPermgen;
            }
            if (permgen != null) {
                command.add("-XX:PermSize=" + permgen);
            }
            if (maxPermgen != null) {
                command.add("-XX:MaxPermSize=" + maxPermgen);
            }
        }
    }
    private static class IbmJvmOptionsBuilder extends JvmOptionsBuilder {
        public IbmJvmOptionsBuilder(JvmType type) {
            super(type);
        }
        @Override
        void addPermGen(JvmElement jvmElementList<Stringcommand) {
            if (jvmElement.getPermgenSize() != null || jvmElement.getMaxPermgen() != null) {
                .ignoringPermGen(jvmElement.getName());
            }
        }
    }
New to GrepCode? Check out our FAQ X