I'm developing a web application via Netbeans 8.0,Glassfish server 4 and JavaEE 7.
Everything was going great but now I'm facing a strange issue.
If the user interrupts uploads or downloads before their completion (by closing browser's windows or simply by pressing esc or X to interrupt), I get an "IOException: Connection closed" into the server console, but the application still works. We are talking about files and photos whose size can vary from 1 MB to 30 MBs, so it's possible that the user simply gets bored and decides to stop the download before its completion.
If those interruptions (and related exceptions) happen for 3-4 times, the whole application simply stops and can't be used, until I decide to reset the Glassfish server. This is really a crap.
I can't figure what's the problem. Into jvm.log or server.log, there is nothing significative.
And yes, I flush and close the streams that I used for uploads/downloads.
I'll post exception stacks and source code, if needed.
I'm using servlets for downloads (the OutputStream from response)
Related
I have a java web app that is running inside tomcat and the application has a page (JSP) where users clicks (some buttons on that web page) which results in hitting a query behind the page and reloads it with new information and sometimes that query takes longer than expected and I want to kill the query automatically if it runs longer than x minutes. How can I achieve that at tomcat side, is that even possible with any tomcat server configurations like timeout or anything, if so could someone please guide me or show an example configuration or setting change I can try? Thanks
I think you are looking for Statement.setQueryTimeout which is a feature of JDBC, not of any specific application server, etc. You will want to call that method and set an appropriate timeout. Your queries will throw SQLTimeoutException if the timeout elapses and your application will have to decide what to do next.
I previously did not have any issues with this, as I have been deploying Azure web app from Eclipse with no issue. Usually it takes a few minutes, but currently it is taking forever with no real progress from what I can tell. I have tried restarting Eclipse as well as deleting the Azure app and recreating a new one. None of those work. Are there some settings I need to reset ?
EDIT: Yes it is a Web App created in Azure, and I previously had no trouble deploying at regular intervals. Last time however I wanted to abort the deployment and attempted to do so in Eclipse but it kept running and it seemed to be hanging so I shut down Eclipse and tried to deploy again but instead of taking just a few minutes, now it is stuck at the beginning with no progress.
I then decided to delete the web app, create a new one, and deploy to the new web app from Eclipse, but it is still the same with no progress.
EDIT: Adding Screenshots of the general environment and Azure configuration.
Just summarize for the above comments, the issue seems that Azure WebApp waits timeout to recover or reset for a failed deployment connection, so a suggestion is that trying to restart the Azure WebApp to recover or reset all status of the current instance fastly, or wait awhile then try to reconnect again.
But for some similar cases, if the above action failed, it's necessary for considering some metadata files in the current workspace, a valid way may be to create a new workspace to try to reconnect.
I am experiencing a weird problem in a GWT application. I have multiple RPC calls which work correctly, however if one of them takes longer than 30 seconds on the server side (for example a database or web service call took a long time), the server side code gets repeated (literally; the code get executed again).
I do not experience this in my develompent environment, however when I deploy the application (container is Jetty 6.1.24 on Ubuntu 12.04 LTS) and connect to it from a browser (regardless of the type), the problem starts to exist.
Since I do not think this a designed GWT behaviour (but I might be wrong ofcourse) I am basically looking for ways to debug this and find out the reason for it. Thanks in advance!
Some more information would be great to understand what is going on, but I would start the investigation by first narrowing down whether the erroneous GWT-RPC call is triggered on the client or server.
To see if the extra GWT-RPC request originates from the browser, in Google Chrome, go to View->Developer->Developer Tools.. Click on the Network Tab.
As you reproduce your steps, the Network Tab will show you every request sent to the server.
If you see the erroneous GWT-RPC request logged in this Network Tab View, then the request is fired off from the GWT-compiled Javascript in the application. With SuperDevMode, you can then set debug breakpoints in the browser and see what is triggering the request.
If the erroneous GWT-RPC is not shown in the Network Tab View, then the server-side method is somehow triggered by your server code/configuration. Set some debug breakpoints on your server code, and drill down the call stack to see what is calling the method.
Hope that helps to get started on the investigation.
An app I am working on relies on connecting to a private, remote server to login via an API.
The other day, I got an ANR message and I think it was due to the server being offline (its a Windows Server that was being updated).
In my app, I am using the following code:
new ReadJSONFeedTask().execute(url).get();
Which turns an AsyncTask into a synchronous task (I believe!)
And because the server was offline, I think the app got hung up, causing the ANR (it's my only lead at the moment, and all seems to make sense, despite the code above is inside a Service class, which shouldn't cause an ANR, should it?)
So, I want to try an simulate the server being offline. I tried replacing the URL with one that simply doesn't work, by removing some letters from the hostname, but that only triggered an "UnknownHostException".
Is there any way to achieve this kind of simulation? I know there are tools for browsers to simulate low bandwidth etc, but have no idea what could be done when my app is running on Android and is trying to connect to a remote server that I can't really reboot at will.
I have a crawler Java application which is supposed to connect to some HTTP servers, download the HTML content of their pages, then move on to other HTTP servers. For this task, I've used the Apache HTTP library.
At the first few hours of the run, things seem to work rather smoothly (there are some connection-related exceptions thrown around from time to time, but that's to be expected).
Yet after a while, it seems like I keep getting SocketTimeoutException on every request I send out. The exception does not occur on the HttpClient class's "execute" method, but rather when I try to get the content of the Entity (which I retrieve from the HttpResponse object), or when I try to write that content to a file.
Then, if I stop the application, and start it over again, things seem to go back to working fine - even though it picks up from where it stopped at, meaning it's interacting with the same servers which I received the SocketTimeoutException when trying to interact with before.
I tried looking for all kinds of possible clean-ups that I might be missing and might be essential when using this library, but couldn't find anything.
Any help would be greatly appreciated.
Thanks.
This sounds like the kind of thing which could be caused by connection pools where you're not closing things when you're done with them, if the timeout occurs while the client library waits to retrieve a pooled connection. Are you sure you're closing everything properly (in finally statements)?
If you run Wireshark to monitor your traffic, what network traffic occurs while it's "broken"?
Make sure that you're not using a lot of http requests at the same time. For example, send 5 http requests, and wait for first response. Then you can make another request etc. Looks like your http requests opens too much sockets.