WebService线程问题 webservice线程java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 封装出来的这个对象只要不是全局属性,就不会有覆盖的问题呀。 你把service的实现类发出来看看 package com.adm.server.service.impl;import javax.annotation.Resource;import javax.jws.WebService;import org.apache.log4j.Logger;import com.adm.cognosexportengine.log.service.ILogManagerService;import com.adm.cognosexportengine.pojo.TLog;import com.adm.cognosexportengine.pojo.TTypeDefine;import com.adm.cognosexportengine.typedefine.service.ITypeDefineManagerService;import com.adm.server.service.IEngine;import com.adm.utils.DateUtils;@WebService(endpointInterface = "com.adm.server.service.IEngine")public class EngineImpl implements IEngine { private static final Logger log = Logger.getLogger(EngineImpl.class); // 报表引擎 @Resource(name = "webServiceEngine") private com.adm.cognosexportengine.engine.IEngine engine; @Resource(name = "typeDefineManagerService") private ITypeDefineManagerService typeDefineManagerService; @Resource(name = "logManagerService") private ILogManagerService logManagerService; private TTypeDefine typeDefine; private TLog tLog; private String startTime; // 1:运行成功 0:运行失败 private String status; private String message; /** * <p> * 功能描述:[webService启动引擎] * </p> * * @return * @throws Exception * @author:Brook * @update:[日期YYYY-MM-DD][Brook][捕获抛出异常] */ @SuppressWarnings("unchecked") public String run(String taskId) { setStartTime(null); if (taskId == null || "".equals(taskId)) { // 判断 生成xml 串返回 setStatus("0"); setMessage("taskId不允许为空"); log.error("taskId不允许为空"); return new EngineImpl().creatResultUtil(taskId,"", status, startTime, DateUtils.getNow(), message); } typeDefine = (TTypeDefine) typeDefineManagerService.findByID( TTypeDefine.class, Long.parseLong(taskId)); // 更新最近开始执行时间 typeDefine.setLastTimeStartTime(DateUtils.getNow()); typeDefineManagerService.update(typeDefine); tLog = new TLog(taskId, typeDefine.getName(), "定时调度", startTime, "", "", ""); logManagerService.save(tLog); try { System.out.println("EngineImpl.run()-----------hashcode"+this.hashCode()); engine.execute(taskId); setStatus("1"); setMessage("运行成功"); typeDefine.setLastStatus("执行完成"); tLog.setMessageId("正常执行"); } catch (Exception e) { String messageInfo = e.getMessage(); setStatus("0"); setMessage("运行失败\n" + messageInfo); typeDefine.setLastStatus("异常结束"); tLog.setMessageId("执行失败"); if (messageInfo.length() > 3000) { messageInfo = messageInfo.substring(0, 3000); } typeDefine.setErrMsg(messageInfo); tLog.setMessageInfo(messageInfo); } // 更新最近结束执行时间 typeDefine.setLastTimeEndTime(DateUtils.getNow()); tLog.setEndTime(DateUtils.getNow(DateUtils.FORMAT_LONG)); typeDefineManagerService.update(typeDefine); logManagerService.update(tLog); return new EngineImpl().creatResultUtil(taskId, typeDefine.getName(),status, startTime, DateUtils.getNow(), message); } public String creatResultUtil(String taskId, String taskNm,String status, String starttime, String endtime, String message) { StringBuffer resultMessage = new StringBuffer(); resultMessage.append("<result>\n"); resultMessage.append("<taskid>" + taskId + "</taskid>\n"); resultMessage.append("<tasknm>"+taskNm+"</tasknm>\n"); resultMessage.append("<statue>" + status + "<statue>\n"); resultMessage.append("<starttime>" + starttime + "</starttime>\n"); resultMessage.append("<endtime>" + endtime + "</endtime>\n"); resultMessage.append("<message>" + message + "</message>\n"); resultMessage.append("</result>"); return resultMessage.toString(); } public String getStartTime() { return startTime; } public void setStartTime(String startTime) { if (!"".equals(startTime) || startTime == null) { this.startTime = DateUtils.getNow(); } else { this.startTime = startTime; } } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }} 客户端调用的时候使用的是多线程并发,然后就会发生返回值都是同一个的问题,也就是service中发生了覆盖 spring都单例哦,单例你还搞成员变量,那完全是你自己的问题... 返回值相同只能说明run方法返回了相同的结果,可能是方法内部处理导致。比如参数没有接收到或者engine.execute(taskId); 发生了异常可能导致结果完全是一样的。 你这里不存在覆盖的问题。还有客户端如果处理不当也会出现结果返回结果错误的问题哦 返回值相同只能说明run方法返回了相同的结果,可能是方法内部处理导致。比如参数没有接收到或者engine.execute(taskId); 发生了异常可能导致结果完全是一样的。 你这里不存在覆盖的问题。还有客户端如果处理不当也会出现结果返回结果错误的问题哦那我输出EngineImpl中run方法的hashcode()结果两次调用是同一个,怎么处理 返回值相同只能说明run方法返回了相同的结果,可能是方法内部处理导致。比如参数没有接收到或者engine.execute(taskId); 发生了异常可能导致结果完全是一样的。 你这里不存在覆盖的问题。还有客户端如果处理不当也会出现结果返回结果错误的问题哦那我输出EngineImpl中run方法的hashcode()结果两次调用是同一个,怎么处理this.hashcode()打印是EngineImpl实例的hush值, 你的这个对象只有一个,结果是肯定是形同的,再说这跟你的问题完全不相干 java 制作报表 UserAction里面没法调用其他Manager的方法问题,请求帮忙! 没招了!在hibernate中使用jotm 事务(进程 ID 68)与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务,这是什么原因? 关于java正则表达式解析文本 帮忙看看什么错误? 各位高手来帮帮忙啊 新手提问:lookup和forname有什么不同? 总是有那么几个问题困扰着我~ FTP上多张图片打包下载 zk框架,如何判断component存在? 导致“找不到或无法加载主类”错误的原因有哪些?
import javax.jws.WebService;import org.apache.log4j.Logger;import com.adm.cognosexportengine.log.service.ILogManagerService;
import com.adm.cognosexportengine.pojo.TLog;
import com.adm.cognosexportengine.pojo.TTypeDefine;
import com.adm.cognosexportengine.typedefine.service.ITypeDefineManagerService;
import com.adm.server.service.IEngine;
import com.adm.utils.DateUtils;@WebService(endpointInterface = "com.adm.server.service.IEngine")
public class EngineImpl implements IEngine {
private static final Logger log = Logger.getLogger(EngineImpl.class); // 报表引擎
@Resource(name = "webServiceEngine")
private com.adm.cognosexportengine.engine.IEngine engine; @Resource(name = "typeDefineManagerService")
private ITypeDefineManagerService typeDefineManagerService; @Resource(name = "logManagerService")
private ILogManagerService logManagerService; private TTypeDefine typeDefine; private TLog tLog; private String startTime; // 1:运行成功 0:运行失败
private String status; private String message; /**
* <p>
* 功能描述:[webService启动引擎]
* </p>
*
* @return
* @throws Exception
* @author:Brook
* @update:[日期YYYY-MM-DD][Brook][捕获抛出异常]
*/ @SuppressWarnings("unchecked")
public String run(String taskId) {
setStartTime(null);
if (taskId == null || "".equals(taskId)) {
// 判断 生成xml 串返回
setStatus("0");
setMessage("taskId不允许为空");
log.error("taskId不允许为空");
return new EngineImpl().creatResultUtil(taskId,"", status, startTime,
DateUtils.getNow(), message);
} typeDefine = (TTypeDefine) typeDefineManagerService.findByID(
TTypeDefine.class, Long.parseLong(taskId));
// 更新最近开始执行时间
typeDefine.setLastTimeStartTime(DateUtils.getNow());
typeDefineManagerService.update(typeDefine); tLog = new TLog(taskId, typeDefine.getName(), "定时调度", startTime,
"", "", "");
logManagerService.save(tLog);
try {
System.out.println("EngineImpl.run()-----------hashcode"+this.hashCode());
engine.execute(taskId);
setStatus("1");
setMessage("运行成功");
typeDefine.setLastStatus("执行完成");
tLog.setMessageId("正常执行");
} catch (Exception e) {
String messageInfo = e.getMessage();
setStatus("0");
setMessage("运行失败\n" + messageInfo);
typeDefine.setLastStatus("异常结束");
tLog.setMessageId("执行失败");
if (messageInfo.length() > 3000) {
messageInfo = messageInfo.substring(0, 3000);
}
typeDefine.setErrMsg(messageInfo);
tLog.setMessageInfo(messageInfo);
}
// 更新最近结束执行时间
typeDefine.setLastTimeEndTime(DateUtils.getNow());
tLog.setEndTime(DateUtils.getNow(DateUtils.FORMAT_LONG));
typeDefineManagerService.update(typeDefine);
logManagerService.update(tLog);
return new EngineImpl().creatResultUtil(taskId, typeDefine.getName(),status, startTime,
DateUtils.getNow(), message);
} public String creatResultUtil(String taskId, String taskNm,String status,
String starttime, String endtime, String message) {
StringBuffer resultMessage = new StringBuffer();
resultMessage.append("<result>\n");
resultMessage.append("<taskid>" + taskId + "</taskid>\n");
resultMessage.append("<tasknm>"+taskNm+"</tasknm>\n");
resultMessage.append("<statue>" + status + "<statue>\n");
resultMessage.append("<starttime>" + starttime + "</starttime>\n");
resultMessage.append("<endtime>" + endtime + "</endtime>\n");
resultMessage.append("<message>" + message + "</message>\n");
resultMessage.append("</result>");
return resultMessage.toString();
} public String getStartTime() {
return startTime;
} public void setStartTime(String startTime) {
if (!"".equals(startTime) || startTime == null) {
this.startTime = DateUtils.getNow();
} else {
this.startTime = startTime;
}
} public String getStatus() {
return status;
} public void setStatus(String status) {
this.status = status;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
}}
那我输出EngineImpl中run方法的hashcode()结果两次调用是同一个,怎么处理
那我输出EngineImpl中run方法的hashcode()结果两次调用是同一个,怎么处理
this.hashcode()打印是EngineImpl实例的hush值, 你的这个对象只有一个,结果是肯定是形同的,再说这跟你的问题完全不相干