Skip to content

Commit 34a4a98

Browse files
authored
backport PR 3212 to 3.4 (#3220)
1 parent a9e77a1 commit 34a4a98

File tree

1 file changed

+42
-30
lines changed

1 file changed

+42
-30
lines changed

operator/src/main/resources/scripts/introspectDomain.py

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,31 @@ def getClusterOrNone(self,serverOrTemplate):
240240
ret = None
241241
return ret
242242

243+
# Work-around bug in off-line WLST where cluster.getDynamicServers() may throw
244+
# when there are no 'real' DynamicServers. Exception looks like:
245+
# at com.sun.proxy.$Proxy46.getDynamicServers(Unknown Source)
246+
# at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
247+
# at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
248+
# at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
249+
# at java.lang.reflect.Method.invoke(Method.java:498)
250+
def getDynamicServersOrNone(self,cluster):
251+
ret = None
252+
try:
253+
cd('/Cluster/' + cluster.getName() + '/DynamicServers')
254+
# DynamicServers MBean can be found under
255+
# /Cluster/<clusterName>/DynamicServers/<clusterName>/
256+
# or
257+
# /Cluster/<clusterName>/DynamicServers/NO_NAME_0/
258+
childObjs = ls(returnMap='true', returnType='c')
259+
if not childObjs.isEmpty():
260+
cd(childObjs[0])
261+
if get('ServerTemplate') is not None:
262+
# Cluster is a dynamic cluster if a ServerTemplate MBean is found
263+
ret = cmo
264+
except:
265+
trace("Ignoring cd() exception for cluster '" + cluster.getName() + "' in getDynamicServerOrNone() and returning None.")
266+
return ret;
267+
243268
def addGeneratedFile(self, filePath):
244269
self.generatedFiles.append(filePath)
245270

@@ -366,25 +391,6 @@ def generate(self):
366391
finally:
367392
self.close()
368393

369-
# Work-around bug in off-line WLST where cluster.getDynamicServers() may throw
370-
# when there are no 'real' DynamicServers. Exception looks like:
371-
# at com.sun.proxy.$Proxy46.getDynamicServers(Unknown Source)
372-
# at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
373-
# at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
374-
# at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
375-
# at java.lang.reflect.Method.invoke(Method.java:498)
376-
def getDynamicServersOrNone(self,cluster):
377-
try:
378-
ret = cluster.getDynamicServers()
379-
# Dynamic Servers must be configured with a ServerTemplate
380-
if ret is not None:
381-
if ret.getServerTemplate() is None:
382-
ret = None
383-
except:
384-
trace("Ignoring getDynamicServers() exception, this is expected.")
385-
ret = None
386-
return ret
387-
388394
def validateAdminServer(self):
389395
adminServerName = self.env.getDomain().getAdminServerName()
390396
if adminServerName is None:
@@ -405,18 +411,22 @@ def validateAdminServer(self):
405411
def validateDynamicClustersDuplicateServerNamePrefix(self):
406412
serverNamePrefixes = []
407413
for cluster in self.env.getDomain().getClusters():
408-
if self.getDynamicServersOrNone(cluster) is not None:
409-
if cluster.getDynamicServers().getServerNamePrefix() in serverNamePrefixes:
410-
self.addError("The ServerNamePrefix '" + cluster.getDynamicServers().getServerNamePrefix() + "' specified for WebLogic dynamic cluster " + self.name(cluster) + "'s dynamic servers is already in use. The ServerNamePrefix must be unique for each WebLogic dynamic cluster.")
414+
dynamicServers = self.env.getDynamicServersOrNone(cluster)
415+
if dynamicServers is not None:
416+
if dynamicServers.getServerNamePrefix() is None:
417+
self.addError("The ServerNamePrefix is not set for WebLogic dynamic cluster " + self.name(cluster) + "'s dynamic servers. The ServerNamePrefix must be set for each WebLogic dynamic cluster.")
411418
else:
412-
serverNamePrefixes.append(cluster.getDynamicServers().getServerNamePrefix())
419+
if dynamicServers.getServerNamePrefix() in serverNamePrefixes:
420+
self.addError("The ServerNamePrefix '" + dynamicServers.getServerNamePrefix() + "' specified for WebLogic dynamic cluster " + self.name(cluster) + "'s dynamic servers is already in use. The ServerNamePrefix must be unique for each WebLogic dynamic cluster.")
421+
else:
422+
serverNamePrefixes.append(dynamicServers.getServerNamePrefix())
413423

414424
def validateClusters(self):
415425
for cluster in self.env.getDomain().getClusters():
416426
self.validateCluster(cluster)
417427

418428
def validateCluster(self, cluster):
419-
if self.getDynamicServersOrNone(cluster) is None:
429+
if self.env.getDynamicServersOrNone(cluster) is None:
420430
self.validateNonDynamicCluster(cluster)
421431
else:
422432
self.validateDynamicCluster(cluster)
@@ -560,8 +570,10 @@ def validateDynamicClusterNotReferencedByAnyServers(self, cluster):
560570
self.addError("The WebLogic dynamic cluster " + self.name(cluster) + " is referenced by configured server " + self.name(server) + ", the operator does not support 'mixed clusters' that host both dynamic (templated) servers and configured servers.")
561571

562572
def validateDynamicClusterDynamicServersDoNotUseCalculatedListenPorts(self, cluster):
563-
if cluster.getDynamicServers().isCalculatedListenPorts() == True:
564-
self.addError("The WebLogic dynamic cluster " + self.name(cluster) + "'s dynamic servers use calculated listen ports.")
573+
dynamicServers = self.env.getDynamicServersOrNone(cluster)
574+
if dynamicServers is not None:
575+
if dynamicServers.isCalculatedListenPorts() == True:
576+
self.addError("The WebLogic dynamic cluster " + self.name(cluster) + "'s dynamic servers use calculated listen ports.")
565577

566578
def validateServerCustomChannelName(self):
567579
reservedNames = ['default','default-secure','default-admin']
@@ -610,13 +622,13 @@ def addConfiguredClusters(self):
610622
def getConfiguredClusters(self):
611623
rtn = []
612624
for cluster in self.env.getDomain().getClusters():
613-
if self.getDynamicServersOrNone(cluster) is None:
625+
if self.env.getDynamicServersOrNone(cluster) is None:
614626
rtn.append(cluster)
615627
return rtn
616628

617629
def addConfiguredCluster(self, cluster):
618630
self.writeln("- name: " + self.name(cluster))
619-
dynamicServers = self.getDynamicServersOrNone(cluster)
631+
dynamicServers = self.env.getDynamicServersOrNone(cluster)
620632
if dynamicServers is not None:
621633
self.indent();
622634
self.writeln("dynamicServersConfig:")
@@ -703,7 +715,7 @@ def addDynamicClusters(self):
703715
def getDynamicClusters(self):
704716
rtn = []
705717
for cluster in self.env.getDomain().getClusters():
706-
if self.getDynamicServersOrNone(cluster) is not None:
718+
if self.env.getDynamicServersOrNone(cluster) is not None:
707719
rtn.append(cluster)
708720
return rtn
709721

@@ -1195,7 +1207,7 @@ def customizeServerTemplates(self):
11951207

11961208
def customizeServerTemplate(self, template):
11971209
name=template.getName()
1198-
server_name_prefix=template.getCluster().getDynamicServers().getServerNamePrefix()
1210+
server_name_prefix=self.env.getDynamicServersOrNone(template.getCluster()).getServerNamePrefix()
11991211
listen_address=self.env.toDNS1123Legal(self.env.getDomainUID() + "-" + server_name_prefix + "${id}")
12001212
self.writeln("<d:server-template>")
12011213
self.indent()

0 commit comments

Comments
 (0)