解决方案 »

  1.   

    封装出来的这个对象只要不是全局属性,就不会有覆盖的问题呀。 你把service的实现类发出来看看
      

  2.   

    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;
    }}
      

  3.   

    客户端调用的时候使用的是多线程并发,然后就会发生返回值都是同一个的问题,也就是service中发生了覆盖
      

  4.   

    spring都单例哦,单例你还搞成员变量,那完全是你自己的问题...
      

  5.   

    返回值相同只能说明run方法返回了相同的结果,可能是方法内部处理导致。比如参数没有接收到或者engine.execute(taskId); 发生了异常可能导致结果完全是一样的。 你这里不存在覆盖的问题。还有客户端如果处理不当也会出现结果返回结果错误的问题哦
      

  6.   

    返回值相同只能说明run方法返回了相同的结果,可能是方法内部处理导致。比如参数没有接收到或者engine.execute(taskId); 发生了异常可能导致结果完全是一样的。 你这里不存在覆盖的问题。还有客户端如果处理不当也会出现结果返回结果错误的问题哦
    那我输出EngineImpl中run方法的hashcode()结果两次调用是同一个,怎么处理
      

  7.   

    返回值相同只能说明run方法返回了相同的结果,可能是方法内部处理导致。比如参数没有接收到或者engine.execute(taskId); 发生了异常可能导致结果完全是一样的。 你这里不存在覆盖的问题。还有客户端如果处理不当也会出现结果返回结果错误的问题哦
    那我输出EngineImpl中run方法的hashcode()结果两次调用是同一个,怎么处理
    this.hashcode()打印是EngineImpl实例的hush值, 你的这个对象只有一个,结果是肯定是形同的,再说这跟你的问题完全不相干