我有几个关于WLST和Jython的问题:
操作系统: Unix/Linux
情况:
1)无法自动包含使用writeIniFile创建的wlst-file
2)使用不缓存消息的org.python.util.jython
信息:
1)在交互式java weblogic.WLST会话中使用writeIniFile生成的wlst.py
2)当使用java org.python.util.jython启动jython时,会显示消息sys-package-mgr: can't create package cache dir, '/opt/oracle/fmw/fmw11gR1PS2/wlserver_10.3/server/lib/weblogic.jar/cachedir/packages'
3)常用模块的位置未知。对于weblogic.WLST,这是<WL-Home>/wlserver_10.3/common/wlst/modules
问题:
1)对于包含的jython,公共模块应该放在哪里?
2)如何更改jython缓存位置?
3)可以升级到其他jython版本吗?
欢迎任何人的帮助。
发布于 2013-01-08 21:02:15
是的,你可以使用另一个jython,但是它不被支持,并且有一些你不得不忍受的缺点。我们使用jython2.7a2。
下面是我们用来启动jyton的脚本。它将更改缓存位置并将FKUTILS目录添加到类路径(这是我们存储自己模块的位置)
#!env sh
# Script to run jython with wlst as a module
# set up WL_HOME, the root directory of your WebLogic installation
WL_HOME="/produkter/oracle/weblogic/wlserver"
WLST_OFFLINE_LOG=/tmp/wlstblaj.$$.log
WLST_CACHEDIR=~/.jythoncachedir
FKUTILS="/program/fkuitls/"
JYTHON="/program/jython"
killed () {
echo ""
echo Cleaning up tempfile: $WLST_OFFLINE_LOG
rm -rf $WLST_OFFLINE_LOG
trap - 0
}
umask 027
touch $WLST_OFFLINE_LOG
chmod 777 $WLST_OFFLINE_LOG
if [ ! -d $WLST_CACHEDIR ] ; then
mdkir -p $WLST_CACHEDIR
fi
trap killed 0 1 2 15
# set up common environment
. "${WL_HOME}/server/bin/setWLSEnv.sh" 2>&1 > /dev/null
CLASSPATH="${CLASSPATH}${CLASSPATHSEP}${FMWLAUNCH_CLASSPATH}${CLASSPATHSEP}${DERBY_CLASSPATH}${CLASSPATHSEP}${DERBY_TOOLS}${CLASSPATHSEP}${POINTBASE_CLASSPATH}${CLASSPATHSEP}${POINTBASE_TOOLS}:${FKUTILS}"
#echo CLASSPATH=${CLASSPATH}
JVM_ARGS="-classpath ${JYTHON}/jython.jar:${CLASSPATH} -Dpython.path=${CLASSPATH}:${HOME} ${WLST_PROPERTIES} ${JVM_D64} ${MEM_ARGS} ${CONFIG_JVM_ARGS} -Dpython.cachedir=$WLST_CACHEDIR -Dwlst.offline.log=$WLST_OFFLINE_LOG -Dweblogic.management.confirmKeyfileCreation=true -Djava.security.egd=file:///dev/urandom"
eval '"${JAVA_HOME}/bin/java"' ${JVM_ARGS} org.python.util.jython '"$@"'作为一种变通办法,您必须从writeInitfile修改wlst-file (您可能仍然会得到堆栈跟踪,但它将正常工作)。
from weblogic.management.scripting.utils import WLSTUtil
import sys
origPrompt = sys.ps1
# Workaround start..
try:
theInterpreter = WLSTUtil.ensureInterpreter()
except:
pass
theInterpreter = WLSTUtil.ensureInterpreter()
# End workaround.
WLSTUtil.ensureWLCtx(theInterpreter)
execfile(WLSTUtil.getWLSTScriptPath())
execfile(WLSTUtil.getOfflineWLSTScriptPath())
exec(WLSTUtil.getOfflineWLSTScriptForModule())
execfile(WLSTUtil.getWLSTCommonModulePath())
theInterpreter = None
sys.ps1 = origPrompt
modules = WLSTUtil.getWLSTModules()
for mods in modules:
execfile(mods.getAbsolutePath())
wlstPrompt = "false"之后,您只需启动jython的第一个脚本,并导入wlst文件。
例如:
Jython 2.7a2 (default:9c148a201233, May 24 2012, 15:49:00) [Java
HotSpot(TM) 64-Bit Server VM (Sun Microsystems Inc.)] on java1.6.0_34
Type "help", "copyright", "credits" or "license" for more information.
>>> import fkwl as wl
>>> wl.connect('user','password','t3://server')
Connecting to t3://server with userid user ...发布于 2012-08-10 14:53:49
1)对于包含的jython,公共模块应该放在哪里?您可以放置公共模块,我尚未对其进行测试,但如果它位于类路径中,则必须为jython选择新的包。
2)如何更改jython缓存位置?所有用户都必须可以访问临时目录。检查为/var/或/tmp施加的权限,其中WLSTTemp文件夹为引用Caching issue fix进行包缓存
3)可以升级到其他jython版本吗?它可以使用jython进行扩展,WLST包含jython.jar。要使用所有其他jython模块,您应该安装jython并将sys.path指向jython安装目录。在discussion thread中提供了提示
https://stackoverflow.com/questions/11881659
复制相似问题