1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.setup.for5_2;
35
36 import info.magnolia.init.MagnoliaConfigurationProperties;
37 import info.magnolia.module.InstallContext;
38 import info.magnolia.module.delta.AbstractCondition;
39 import info.magnolia.objectfactory.Components;
40
41 import java.lang.reflect.Method;
42
43 import javax.inject.Inject;
44
45 import org.apache.commons.lang.StringUtils;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49
50
51
52 public class IsNotAProblematicEnvironmentCondition extends AbstractCondition {
53 private static final Logger log = LoggerFactory.getLogger(IsNotAProblematicEnvironmentCondition.class);
54
55 public static final String MAGNOLIA_ALLOW_PROBLEMATIC_ENVIRONMENT = "magnolia.allow.problematic.environment";
56
57 static final String SYSTEM_PROPERTY_OS_NAME = "os.name";
58 static final String SYSTEM_PROPERTY_JAVA_VERSION = "java.version";
59
60 final MagnoliaConfigurationProperties magnoliaConfigurationProperties;
61
62 public IsNotAProblematicEnvironmentCondition() {
63 this(Components.getComponent(MagnoliaConfigurationProperties.class));
64 }
65
66 @Inject
67 public IsNotAProblematicEnvironmentCondition(final MagnoliaConfigurationProperties magnoliaConfigurationProperties) {
68 super("Environment check", "See http://documentation.magnolia-cms.com/display/DOCS/Problematic+environments for more details.");
69 this.magnoliaConfigurationProperties = magnoliaConfigurationProperties;
70 }
71
72 @Override
73 public boolean check(InstallContext installContext) {
74 if (!magnoliaConfigurationProperties.getBooleanProperty(MAGNOLIA_ALLOW_PROBLEMATIC_ENVIRONMENT)) {
75 final String osName = System.getProperty(SYSTEM_PROPERTY_OS_NAME);
76 final String javaVersion = System.getProperty(SYSTEM_PROPERTY_JAVA_VERSION);
77
78 if (osName.endsWith("OS X") && (javaVersion.startsWith("1.7") || javaVersion.startsWith("1.8"))) {
79
80 Class serverInfo;
81 try {
82 serverInfo = Class.forName("org.apache.catalina.util.ServerInfo");
83 } catch (ClassNotFoundException e) {
84
85 return true;
86 }
87
88
89 try {
90 Method method = serverInfo.getMethod("getServerNumber");
91 String specificationVersion = method.invoke(null).toString();
92 if (StringUtils.isNotEmpty(specificationVersion) && (specificationVersion.startsWith("6.") || specificationVersion.startsWith("7."))) {
93 installContext.warn("Running " + osName + " with Java " + javaVersion + " and " + "Apache Tomcat" + " " + specificationVersion + " has known issues. Use property '" + MAGNOLIA_ALLOW_PROBLEMATIC_ENVIRONMENT + "=true' to allow this combination at your own risk.");
94 return false;
95 }
96 } catch (Exception e) {
97 log.error("Could not determine version of Tomcat server - stopping installation to be on the safe side.", e);
98 return false;
99 }
100 }
101 }
102 return true;
103 }
104 }