Parallel processing 脚本并发问题?
我使用“antcall”脚本并发调用,但出现“javax.mail.Management InstanceNotFoundException”。 我设置了10个并发,有时可以是10个,有时只有几个可以上升Parallel processing 脚本并发问题?,parallel-processing,scriptella,antcall,Parallel Processing,Scriptella,Antcall,我使用“antcall”脚本并发调用,但出现“javax.mail.Management InstanceNotFoundException”。 我设置了10个并发,有时可以是10个,有时只有几个可以上升 <target name="PAIR_CONN"> <etl debug="true"> <fileset file="Pair_Conn.xml" /> </etl> </t
<target name="PAIR_CONN">
<etl debug="true">
<fileset file="Pair_Conn.xml" />
</etl>
</target>
<target name="pair_conn_mult">
<parallel threadCount='5'>
<antcall target="PAIR_CONN">
<param name="g_flag" value="1" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="2" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="3" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="4" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="0" />
</antcall>
</parallel>
</target>
无法注销mbean scriptella:type=etl,url=“file:/informatica/infa861/oss_etl_523/src/ElectricCable/Pair_Conn.xml”
javax.management.InstanceNotFoundException:scriptella:type=etl,url=“file:/informatica/infa861/oss_etl_523/src/ElectricCable/Pair_Conn.xml”
我查看scriptella源代码,代码已经同步
public synchronized void register() {
if (name != null) {
throw new IllegalStateException("MBean already registered");
}
server = getMBeanServer();
String url = ctx.getScriptFileURL().toString();
System.out.println("LM:"+url);
boolean registered = false;
for (int i = 0; i < 1000; i++) {
if (name == null || server.isRegistered(name)) {
registered = true;
name = toObjectName(url, i);
System.out.println("LM:"+name);
} else {
registered = false;
break;
}
}
etlThread = Thread.currentThread();
if (!registered) {
try {
server.registerMBean(this, name);
started = new Date();
LOG.info("Registered JMX mbean: " + name);
} catch (Exception e) {
throw new SystemException("Unable to register mbean " + name, e);
}
} else {
throw new SystemException("Unable to register mbean for url " + url + ": too many equal tasks already registered");
}
}
公共同步无效寄存器(){
if(name!=null){
抛出新的非法状态异常(“MBean已注册”);
}
server=getMBeanServer();
字符串url=ctx.getScriptFileURL().toString();
System.out.println(“LM:+url”);
布尔值=假;
对于(int i=0;i<1000;i++){
if(name==null | | server.isRegistered(name)){
注册=真实;
name=toObjectName(url,i);
System.out.println(“LM:+名称);
}否则{
注册=假;
打破
}
}
etlThread=Thread.currentThread();
如果(!已注册){
试一试{
registerMBean(这个,名称);
开始=新日期();
LOG.info(“注册的JMX mbean:+名称”);
}捕获(例外e){
抛出新的SystemException(“无法注册mbean”+名称,e);
}
}否则{
抛出新的SystemException(“无法为url“+url+”注册mbean:已注册的相等任务太多”);
}
}
对于这种情况,你有什么建议?为了找到解决方案,我应该尝试什么,或者读什么?感谢您指出了一个严重的错误。我已经开始跟踪这个问题 作为一种解决方法,您可以切换到
任务以在分叉VM中运行Scriptella,因此Ant脚本将变成如下所示:
<path id="scriptella.class.path">
<pathelement location="../../build/scriptella.jar"/>
</path>
<taskdef resource="antscriptella.properties" classpathref="scriptella.class.path"/>
<target name="PAIR_CONN">
<java fork="yes" classname="scriptella.tools.launcher.EtlLauncher" classpathref="scriptella.class.path">
<arg value="Pair_Conn.xml"/>
<arg value="-d"/>
<sysproperty key="g_flag" value="${g_flag}"/>
</java>
</target>
<target name="pair_conn_mult">
<parallel threadCount='5'>
<antcall target="PAIR_CONN">
<param name="g_flag" value="1" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="2" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="3" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="4" />
</antcall>
<antcall target="PAIR_CONN">
<param name="g_flag" value="0" />
</antcall>
</parallel>
</target>
BTW.这个问题现在应该已经解决了。通过键入
mvncleanpackage
或antzip