最近有许多人向我询问如何将WLST用作模块。主要是以下几个问题:
什么是Jython模块?
简单地说,jython模块或多或少有点像可以导入其它模块的Java类/对象。假设您编写了一个脚本/模块A.py,并定义了一个函数myFunction。那么现在就可以将A.py导入到另一个脚本中,假设为B.py,并调用函数myFunction。下面是实现代码:
A.py
-------
def myFunction():
print "Hello There!"
def printFirstName(myName):
print "Hello "+myName
B.py
------
import A
A.myFunction()
A.printFirstName("satya")
WLST提供了一种方便的方法,允许将其作为模块导入到脚本中,并使用所有支持的WLST命令。这样做的好处是,可以不依赖WebLogic地编写Jython模块,并将WLST模块导入到所编写的模块中。例如,现在可以再编写一个C.py模块,然后将wlstModule.py和A.py导入其中。
C.py
------
import A
import wlstModule.py as myWLST
# connect to the server
myWLST.connect('weblogic','weblogic','t3://sghattu:7001')
# call a function from module A
A.printFirstName("satya")
#start and edit session and create a server
myWLST.edit()
myWLST.startEdit()
newSvr = myWLST.cmo.createServer('ms1')
newSvr.setListenPort(8001)
myWLST.activate()
myWLST.disconnect()
将WLST用作模块与调用WLST有什么区别?
如果通过java weblogic.WLST调用WLST,WLST将实例化一个Jython解释程序,创建一个WLST命名空间并安装所有的WLST函数。可以导入其他模块,但是无法从这些外部模块访问WLST函数。因为当导入其他模块时,它们会被导入到Jython的默认命名空间中而不是WLST命名空间中。要在WLST命名空间中使用模块,必须使用execfile (externalModule.py)在WLST命名空间中执行模块。
在哪里可以找到WLST模块?有没有什么好的建议?
WLST模块位于{WL_HOME}/common/wlst/modules/wlstModule.py下。还可以使用writeIniFile命令生成一个。
如果打算将WLST用作模块,应该使用java org.python.util.jython 来调用脚本。不要使用java weblogic.WLST 并将WLST作为模块导入。这会将WLST模块导入到WLST命名空间中,如果将模块调用与直接的WLST调用混合使用,将会得到怪异的效果。因此我不推荐您这样做。如果要将WLST用作模块,请直接使用Jython。
原文出处:
http://dev2dev.bea.com/blog/sghattu/archive/2006/01/wlst_as_a_jytho.html