Re: ClientAbortException: java.io.IOException: Failed to send AJP message
On 27.10.2015 10:46, Yogesh Patel wrote: Ok Thanks, My Tomcat version is : 7.0.47 Error stack trace is below: " org.apache.catalina.core.StandardWrapperValve.invoke:Line 211 - ClientAbortException: java.io.IOException: Failed to send AJP message at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:406) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:342) at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:431) at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:419) at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91) at " Thanks, much more readable. Previously, you wrote : "In our case user is downloading the document and got message like "document is deleted or moved" and tomcat has log like "ClientAbortException: java.io.IOException: Failed to send AJP message"" But, the error message above still means, at the bottom, that Tomcat is trying to still send some bytes to the client, but the connection with the client is not there anymore, so it cannot send this.. The connection is as follows : browser <-- (1) HTTP(S) --> Apache httpd + proxy module <-- (2) AJP --> Connector> + + . where "proxy module" is either mod_jk or mod_proxy_ajp. So we have to assume that : - when Tomcat + application writes to the client "document has moved..", the whole connection (1+2) is still there (because the client sees the message) - but by the time Tomcat writes this error to its logfile, the AJP connection (2) between Tomcat and Apache httpd has been dropped; It is dropped by the proxy module within Apache; and this is probably because the corresponding HTTP connection (1) between the browser and Apache httpd has been dropped. And this is probably - as someone else already mentioned - because in the meantime, the human at the browser side has decided to click away onto another page. Humans are relatively slow in computer terms. So if they manage to click somewhere else between the moment at which they receive the part about the document having been moved, and whatever else the Tomcat application is still trying to send to them afterward, there must be a considerable delay somewhere at the application level, between the moment it sends the "document moved" response part, and the moment it tries to send some additional response part. That is probably what you should be looking at here : what is it that it cannot send anymore, and why is it that there is such a delay between the "document moved" part and this second part. What is the application doing in the meantime ? Of course, the problem, if it is occasional, could also be due to a bad network connection somewhere.. On 27 October 2015 at 14:59, André Warnier (tomcat)wrote: Yogesh, 1) please follow the rules of this list, and don't "top-post" : http://tomcat.apache.org/lists.html#tomcat-users #6 2) please follow the rules of this list, and post your messages as plain text : http://tomcat.apache.org/lists.html#tomcat-users #7 As you can see below, what you are sending comes here as an unreadable blob, and that makes it all the more difficult and demotivating for anyone wanting to help you. On 27.10.2015 06:47, Yogesh Patel wrote: Tomcat 7: INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/cms][ ajp-apr-10161-exec-282][2015-10-20 10:02:59,673]- org.apache.catalina.core. StandardWrapperValve.invoke:Line 211 - ClientAbortException: java.io. IOException: Failed to send AJP message at org.apache.catalina.connector.. OutputBuffer.realWriteBytes(OutputBuffer.java:406) at org.apache.tomcat.util .buf.ByteChunk.append(ByteChunk.java:342) at org.apache.catalina.connector. OutputBuffer.writeBytes(OutputBuffer.java:431) at org.apache.catalina. connector.OutputBuffer.write(OutputBuffer.java:419) at org.apache.catalina. connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91) at com.os.. gfnactions.contentmanager.document.documentDownload. finalDocumentDownloadProcess(documentDownload.java:140) at sun.reflect. GeneratedMethodAccessor8388.invoke(Unknown Source) at sun.reflect. DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.opensymphony.xwork2. DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly( DefaultActionInvocation.java:289) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) at com. opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept( ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.DeprecationInterceptor.intercept( DeprecationInterceptor.java:41) at
Re: ClientAbortException: java.io.IOException: Failed to send AJP message
Ok Thanks, My Tomcat version is : 7.0.47 Error stack trace is below: " org.apache.catalina.core.StandardWrapperValve.invoke:Line 211 - ClientAbortException: java.io.IOException: Failed to send AJP message at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:406) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:342) at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:431) at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:419) at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91) at " On 27 October 2015 at 14:59, André Warnier (tomcat)wrote: > Yogesh, > > 1) please follow the rules of this list, and don't "top-post" : > http://tomcat.apache.org/lists.html#tomcat-users #6 > 2) please follow the rules of this list, and post your messages as plain > text : > http://tomcat.apache.org/lists.html#tomcat-users #7 > > As you can see below, what you are sending comes here as an unreadable > blob, and that makes it all the more difficult and demotivating for anyone > wanting to help you. > > > > On 27.10.2015 06:47, Yogesh Patel wrote: > >> Tomcat 7: >> >> INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/cms][ >> ajp-apr-10161-exec-282][2015-10-20 10:02:59,673]- >> org.apache.catalina.core. >> StandardWrapperValve.invoke:Line 211 - ClientAbortException: java.io. >> IOException: Failed to send AJP message at org.apache.catalina.connector. >> OutputBuffer.realWriteBytes(OutputBuffer.java:406) at >> org.apache.tomcat.util >> .buf.ByteChunk.append(ByteChunk.java:342) at >> org.apache.catalina.connector. >> OutputBuffer.writeBytes(OutputBuffer.java:431) at org.apache.catalina. >> connector.OutputBuffer.write(OutputBuffer.java:419) at >> org.apache.catalina. >> connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91) at com.os. >> gfnactions.contentmanager.document.documentDownload. >> finalDocumentDownloadProcess(documentDownload.java:140) at sun.reflect. >> GeneratedMethodAccessor8388.invoke(Unknown Source) at sun.reflect. >> DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at >> java.lang.reflect.Method.invoke(Method.java:606) at >> com.opensymphony.xwork2. >> DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) at >> com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly( >> DefaultActionInvocation.java:289) at com.opensymphony.xwork2. >> DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) at com. >> opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept( >> ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2. >> DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. >> apache.struts2.interceptor.DeprecationInterceptor.intercept( >> DeprecationInterceptor.java:41) at com.opensymphony.xwork2. >> DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. >> apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept( >> DebuggingInterceptor.java:256) at com.opensymphony.xwork2. >> DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. >> opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept( >> DefaultWorkflowInterceptor.java:167) at >> com.opensymphony.xwork2.interceptor. >> MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com. >> >> opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. >> java:246) at com.opensymphony.xwork2.validator.ValidationInterceptor. >> doIntercept(ValidationInterceptor.java:265) at org.apache.struts2. >> interceptor.validation.AnnotationValidationInterceptor.doIntercept( >> AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2. >> >> interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: >> 98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke( >> DefaultActionInvocation.java:246) at com.opensymphony.xwork2.interceptor. >> ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) >> at >> com.opensymphony.xwork2.DefaultActionInvocation.invoke( >> DefaultActionInvocation.java:246) at com.opensymphony.xwork2.interceptor. >> ParametersInterceptor.doIntercept(ParametersInterceptor.java:249) at com. >> opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept( >> MethodFilterInterceptor.java:98) at com.opensymphony.xwork2. >> DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. >> opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept( >> ParametersInterceptor.java:249) at com.opensymphony.xwork2.interceptor. >> MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com. >> >> opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. >> java:246) at >> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor >>
Re: ClientAbortException: java.io.IOException: Failed to send AJP message
Yogesh, 1) please follow the rules of this list, and don't "top-post" : http://tomcat.apache.org/lists.html#tomcat-users #6 2) please follow the rules of this list, and post your messages as plain text : http://tomcat.apache.org/lists.html#tomcat-users #7 As you can see below, what you are sending comes here as an unreadable blob, and that makes it all the more difficult and demotivating for anyone wanting to help you. On 27.10.2015 06:47, Yogesh Patel wrote: Tomcat 7: INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/cms][ ajp-apr-10161-exec-282][2015-10-20 10:02:59,673]- org.apache.catalina.core. StandardWrapperValve.invoke:Line 211 - ClientAbortException: java.io. IOException: Failed to send AJP message at org.apache.catalina.connector. OutputBuffer.realWriteBytes(OutputBuffer.java:406) at org.apache.tomcat.util .buf.ByteChunk.append(ByteChunk.java:342) at org.apache.catalina.connector. OutputBuffer.writeBytes(OutputBuffer.java:431) at org.apache.catalina. connector.OutputBuffer.write(OutputBuffer.java:419) at org.apache.catalina. connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91) at com.os. gfnactions.contentmanager.document.documentDownload. finalDocumentDownloadProcess(documentDownload.java:140) at sun.reflect. GeneratedMethodAccessor8388.invoke(Unknown Source) at sun.reflect. DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.opensymphony.xwork2. DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly( DefaultActionInvocation.java:289) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) at com. opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept( ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.DeprecationInterceptor.intercept( DeprecationInterceptor.java:41) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept( DebuggingInterceptor.java:256) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept( DefaultWorkflowInterceptor.java:167) at com.opensymphony.xwork2.interceptor. MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com. opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. java:246) at com.opensymphony.xwork2.validator.ValidationInterceptor. doIntercept(ValidationInterceptor.java:265) at org.apache.struts2. interceptor.validation.AnnotationValidationInterceptor.doIntercept( AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2. interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:246) at com.opensymphony.xwork2.interceptor. ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) at com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:246) at com.opensymphony.xwork2.interceptor. ParametersInterceptor.doIntercept(ParametersInterceptor.java:249) at com. opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept( MethodFilterInterceptor.java:98) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept( ParametersInterceptor.java:249) at com.opensymphony.xwork2.interceptor. MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com. opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. java:246) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor .intercept(StaticParametersInterceptor.java:191) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.MultiselectInterceptor.intercept( MultiselectInterceptor.java:73) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor .java:91) at com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:246) at org.apache.struts2.interceptor. FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) at com. opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. java:246) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor. intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com.
Re: ClientAbortException: java.io.IOException: Failed to send AJP message
Tomcat 7: INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/cms][ ajp-apr-10161-exec-282][2015-10-20 10:02:59,673]- org.apache.catalina.core. StandardWrapperValve.invoke:Line 211 - ClientAbortException: java.io. IOException: Failed to send AJP message at org.apache.catalina.connector. OutputBuffer.realWriteBytes(OutputBuffer.java:406) at org.apache.tomcat.util .buf.ByteChunk.append(ByteChunk.java:342) at org.apache.catalina.connector. OutputBuffer.writeBytes(OutputBuffer.java:431) at org.apache.catalina. connector.OutputBuffer.write(OutputBuffer.java:419) at org.apache.catalina. connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91) at com.os. gfnactions.contentmanager.document.documentDownload. finalDocumentDownloadProcess(documentDownload.java:140) at sun.reflect. GeneratedMethodAccessor8388.invoke(Unknown Source) at sun.reflect. DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.opensymphony.xwork2. DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly( DefaultActionInvocation.java:289) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) at com. opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept( ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.DeprecationInterceptor.intercept( DeprecationInterceptor.java:41) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept( DebuggingInterceptor.java:256) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept( DefaultWorkflowInterceptor.java:167) at com.opensymphony.xwork2.interceptor. MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com. opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. java:246) at com.opensymphony.xwork2.validator.ValidationInterceptor. doIntercept(ValidationInterceptor.java:265) at org.apache.struts2. interceptor.validation.AnnotationValidationInterceptor.doIntercept( AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2. interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:246) at com.opensymphony.xwork2.interceptor. ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) at com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:246) at com.opensymphony.xwork2.interceptor. ParametersInterceptor.doIntercept(ParametersInterceptor.java:249) at com. opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept( MethodFilterInterceptor.java:98) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept( ParametersInterceptor.java:249) at com.opensymphony.xwork2.interceptor. MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com. opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. java:246) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor .intercept(StaticParametersInterceptor.java:191) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.MultiselectInterceptor.intercept( MultiselectInterceptor.java:73) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at org. apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor .java:91) at com.opensymphony.xwork2.DefaultActionInvocation.invoke( DefaultActionInvocation.java:246) at org.apache.struts2.interceptor. FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) at com. opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation. java:246) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor. intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept( ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. opensymphony.xwork2.interceptor.ChainingInterceptor.intercept( ChainingInterceptor.java:145) at com.opensymphony.xwork2. DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) at com. opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept( PrepareInterceptor.java:171) at
Re: ClientAbortException: java.io.IOException: Failed to send AJP message
How long does it take? It could be some sort of timeout, maybe. On Mon, Oct 26, 2015 at 3:28 PM, Yogesh Patelwrote: > In our case user is downloading the document and got message like "document > is deleted or moved" and tomcat has log like "ClientAbortException: > java.io.IOException: Failed to send AJP message" > > On 26 October 2015 at 19:48, Rallavagu wrote: > > > This usually means that "client" has disconnected before the request > could > > be completed. Generally, this might happen when a user navigates away > from > > a web page before it is completely rendered. You might want to gather > more > > information to understand this better. > > > > On 10/26/15 7:15 AM, Yogesh Patel wrote: > > > >> In out application we are getting following error: > >> > >> org.apache.catalina.core.StandardWrapperValve.invoke:Line 211 - > >> ClientAbortException: java.io.IOException: Failed to send AJP message > >> > >> > >> > > - > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > > For additional commands, e-mail: users-h...@tomcat.apache.org > > > > > > > -- > *Thanks & Regards,* > > * Yogesh Patel* >
Re: ClientAbortException: java.io.IOException: Failed to send AJP message
This usually means that "client" has disconnected before the request could be completed. Generally, this might happen when a user navigates away from a web page before it is completely rendered. You might want to gather more information to understand this better. On 10/26/15 7:15 AM, Yogesh Patel wrote: In out application we are getting following error: org.apache.catalina.core.StandardWrapperValve.invoke:Line 211 - ClientAbortException: java.io.IOException: Failed to send AJP message - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: ClientAbortException: java.io.IOException: Failed to send AJP message
In our case user is downloading the document and got message like "document is deleted or moved" and tomcat has log like "ClientAbortException: java.io.IOException: Failed to send AJP message" On 26 October 2015 at 19:48, Rallavaguwrote: > This usually means that "client" has disconnected before the request could > be completed. Generally, this might happen when a user navigates away from > a web page before it is completely rendered. You might want to gather more > information to understand this better. > > On 10/26/15 7:15 AM, Yogesh Patel wrote: > >> In out application we are getting following error: >> >> org.apache.catalina.core.StandardWrapperValve.invoke:Line 211 - >> ClientAbortException: java.io.IOException: Failed to send AJP message >> >> >> > - > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > > -- *Thanks & Regards,* * Yogesh Patel*
Re: ClientAbortException: java.io.IOException: Failed to send AJP message
Yogesh, On 10/26/15 10:15 AM, Yogesh Patel wrote: > In out application we are getting following error: > > org.apache.catalina.core.StandardWrapperValve.invoke:Line 211 - > ClientAbortException: java.io.IOException: Failed to send AJP message Full stack trace and Tomcat version number please? - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org