ACTION
public void mobileNote(HttpServletRequest request, String from) {
MobileNoteAction mna = new MobileNoteAction();
String[] address = new String[] {};
String[] codes = new String[] {};
if (from.equals("sms")) {
codes = this.getParameters(request, "recCode");
} else {
codes = this.getParameters(request, "sendNums");
}
TeleService teleService = mna.setUp();
address = mna.getPhone(codes);// 被叫号码 }
MobileNoteAction
public String[] getPhone(String[] codes) {
Map map = new HashMap();
String num = "";
for (int i = 0; i < codes.length; i++) {
String code = codes[i];
Set users = this.getAllUsersWithIds(code);
for (Iterator itr = users.iterator(); itr.hasNext();) {
EmpUser user = (EmpUser) itr.next();
map = this.getHanton().getMobileNoteDAO()
.getPhone(user.getId());
// 这里是循环获得号码,然后以";"隔开构成数组,所以用+=
if (map.get("EMP_MOBILE") != null)
num += map.get("EMP_MOBILE").toString() + ";";
else
num += "";
}
}
String[] address = num.split(";");
return address;
}
如上代码所示,如果这样调用就会报错,但是要把getPhone放在ACITON中用this.getPhone来调用就不会有错,代码都没变,不知道是什么错误,错误代码如下,请各位帮忙!!WARN [org.apache.struts.action.RequestProcessor] - Unhandled Exception thrown: class org.springframework.transaction.CannotCreateTransactionException
ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].[action]] - Servlet.service() for servlet action threw exception
org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: I/O Error: Connection reset
java.sql.SQLException: I/O Error: Connection reset
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2277)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:599)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:331)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:178)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:291)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:277)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:259)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:241)
at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:182)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:282)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:225)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy0.ifTimeOut(Unknown Source)
at org.springframework.hanton.web.DefaultAction.execute(DefaultAction.java:58)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.DataInputStream.readFully(DataInputStream.java:178)
at java.io.DataInputStream.readFully(DataInputStream.java:152)
at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:826)
at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:707)
at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466)
at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:103)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2172)
... 42 more

解决方案 »

  1.   

    Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: I/O Error: Connection reset 
    你发的异常意思说你的JDBC连接有问题
    你看看你数据库连接哪里有问题不.
    class ACTION {
       public void mobileNote(HttpServletRequest request, String from) {
            MobileNoteAction mna = new MobileNoteAction();
            String[] address = new String[] {};
            String[] codes = new String[] {};
            if (from.equals("sms")) {
                codes = this.getParameters(request,"recCode");
            } else {
                codes = this.getParameters(request,"sendNums");
            }
            TeleService teleService = mna.setUp();
            address = mna.getPhone(codes);// 被叫号码     }

    }
    class MobileNoteAction {

    public String[] getPhone(String[] codes) {
            Map map = new HashMap();
            String num = "";
            for (int i = 0; i < codes.length; i++) {
                String code = codes[i];
                Set users = this.getAllUsersWithIds(code);
                for (Iterator itr = users.iterator(); itr.hasNext();) {
                    EmpUser user = (EmpUser) itr.next();
                    map = this.getHanton().getMobileNoteDAO()
                            .getPhone(user.getId());
                    // 这里是循环获得号码,然后以";"隔开构成数组,所以用+=
                    if (map.get("EMP_MOBILE") != null)
                        num += map.get("EMP_MOBILE").toString() + ";";
                    else
                        num += "";
                }
            }
            String[] address = num.split(";");
            return address;
        }
    }
    按你说的意思应该是红色代码哪里会有错误,我调用了没有错误.
      

  2.   

    数据库连接报错,估计是MobileNoteAction mna = new MobileNoteAction();的时候,对数据库联接有影响。
      

  3.   

    我刚用断点跟踪了一下,发现是在getAllUsersWithIds方法中执行了两次,第一次是正常运行,第二次就跳转不到DAO里了,不知道为啥。
      

  4.   

    不要在 Action 之间互相调用!如果一个 Action 的方法需要另一个 Action 调用,那么把它提取到另外的类当中。
      

  5.   

    action 调用业务逻辑类最好不要action之间相互调用
      

  6.   

    我现在这个ACTION是MOBILENOTEACTION的父类,这样要从父类调用子类方法也要在另外的类提取吗?
      

  7.   

    难道不可以吗?先把方法提取出来,然后慢慢改成 public static,就可以新建一个类然后移过去了。楼主可以参考一些类的设计原则。
      

  8.   

    问题解决了,是我父类在调用子类方法的时候services为空了。
    谢谢大家