-
1. Re: jboss 5.1.0.GA server push is working only on local PC,Not working if i access it from another PC with in the network.
jfclere Feb 22, 2013 9:04 AM (in response to kiran_yalamati)1 of 1 people found this helpfulIt is probably a issue in your application like not flush data or a direct broken. If you can acces to the rest of the application that I think it had nothing to do with the firewall.
You should track down where the problem is a send a piece of your code so it is possible to see what is wrong.
-
2. Re: jboss 5.1.0.GA server push is working only on local PC,Not working if i access it from another PC with in the network.
kiran_yalamati Feb 22, 2013 11:29 AM (in response to jfclere)Hi Jean Frederic,
Server is flushing the data when i access the application where it had been deployed. I ran the application in debug mode by keeping the debug point at public void event(HttpEvent event) method of the EventPush class. The following class is not being initiated when i accessed from another PC but in the same network.
public class EventPush extends HttpServlet implements org.jboss.servlet.http.HttpEventServlet{
private ArrayList<HttpServletResponse> connections = new ArrayList<HttpServletResponse>();
protected EventDataSender eventDataSender = null;
public void init() throws ServletException {
eventDataSender= new EventDataSender();
Thread messageSenderThread =new Thread(eventDataSender, "Sender[" + getServletContext().getContextPath() + "]");
messageSenderThread.setDaemon(true);
messageSenderThread.start();
}
public void destroy() {
connections.clear();
eventDataSender.stop();
eventDataSender = null;
}
/**
* Process the given event.
*
* @param event The event that will be processed
* @throws IOException
* @throws ServletException
*/
public void event(HttpEvent event)
throws IOException, ServletException {
HttpServletRequest request = event.getHttpServletRequest();
HttpServletResponse response = event.getHttpServletResponse();
event.setTimeout(60000);
switch (event.getType()) {
case BEGIN:
System.out.println("Begin for session: " + request.getSession(true).getId());
// PrintWriter writer = response.getWriter();
// writer.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">");
// writer.println("<head><title>JSP Chat</title></head><body bgcolor=\"#FFFFFF\">");
// writer.flush();
synchronized(connections) {
connections.add(response);
eventDataSender.addConnection(response);
}
break;
case ERROR:
System.out.println("Error for session: " + request.getSession(true).getId());
synchronized(connections) {
connections.remove(response);
eventDataSender.removeConnection(response);
}
event.close();
break;
case END:
System.out.println("End for session: " + request.getSession(true).getId());
synchronized(connections) {
connections.remove(response);
eventDataSender.removeConnection(response);
}
//PrintWriter writer = response.getWriter();
//writer.println("</body></html>");
event.close();
break;
case READ:
InputStream is = request.getInputStream();
byte[] buf = new byte[512];
while (is.available() > 0) {
int n = is.read(buf); //can throw an IOException
if (n > 0) {
System.out.println("Read " + n + " bytes: " + new String(buf, 0, n)+ " for session: " + request.getSession(true).getId());
} else {
//error(event, request, response);
return;
}
}
case TIMEOUT:
System.out.println("timeout occured for event");
event.close();
}
}
}
==========
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.http.HttpServletResponse;
public class EventDataSender implements Runnable {
protected boolean running = true;
public static ArrayList<String> messages = new ArrayList<String>();
protected ArrayList<HttpServletResponse> connections = new ArrayList<HttpServletResponse>();
public EventDataSender() {
}
public void stop() {
running = false;
}
/**
* Add message for sending.
*/
public void send( String message) {
synchronized (messages) {
messages.add(message);
messages.notify();
}
}
public synchronized void addConnection(HttpServletResponse connection){
connections.add(connection);
notify();
}
public synchronized void removeConnection(HttpServletResponse connection){
connections.remove(connection);
notify();
}
public void run() {
while (running) {
if (messages.size() == 0) {
try {
synchronized (messages) {
messages.wait();
}
} catch (InterruptedException e) {
// Ignore
}
}
synchronized (connections) {
String[] pendingMessages = null;
synchronized (messages) {
pendingMessages = messages.toArray(new String[0]);
messages.clear();
}
// Send any pending message on all the open connections
// If a connection backlogs, there will be an exception
for (int i = 0; i < connections.size(); i++) {
try {
PrintWriter writer = connections.get(i).getWriter();
for (int j = 0; j < pendingMessages.length; j++) {
writer.print(pendingMessages[j]);
}
writer.flush();
// writer.close();
} catch (IOException e) {
System.out.println("exception "+e);
}
}
}
}
}
}
-
3. Re: jboss 5.1.0.GA server push is working only on local PC,Not working if i access it from another PC with in the network.
kiran_yalamati Feb 22, 2013 11:26 PM (in response to jfclere)Hi Jean Frederic Clere,
Thanks for your respnose, actually its my mistake.
In the JSP where the serverpush is called i had mentioned the URL as localhost,instead of the domain name so thats why it works only on local PC.Now the problem is solved.