package org.distributeme.registry.ui.action; import net.anotheria.maf.action.Action; import net.anotheria.maf.action.ActionCommand; import net.anotheria.maf.action.ActionMapping; import net.anotheria.maf.bean.FormBean; import org.distributeme.registry.metaregistry.MetaRegistryConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.nio.charset.Charset; /** * This action sends out a signal that forces all other services to re-register. * @author lrosenberg */ public class RegistryForceRegisterAction extends BaseRegistryAction implements Action { private static Logger log = LoggerFactory.getLogger(RegistryForceRegisterAction.class); private MetaRegistryConfig registryConfig = MetaRegistryConfig.create(); @Override public ActionCommand execute(ActionMapping mapping, FormBean formBean, HttpServletRequest req, HttpServletResponse res) throws Exception { int minPort = registryConfig.getRegistryPortMin(); int maxPort = registryConfig.getRegistryPortMax(); try { DatagramPacket outgoing = new DatagramPacket("register".getBytes(Charset.defaultCharset()), "register".length()); DatagramSocket socket = new DatagramSocket(); socket.setBroadcast(true); outgoing.setAddress(InetAddress.getByAddress(new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255})); for (int i = minPort; i < maxPort; i++) { outgoing.setPort(i); socket.send(outgoing); } addFlashMessage(req, "Sent re-register request"); }catch(IOException e){ addFlashMessage(req, "Re-register request failed: "+e.getMessage()); log.error("Can't sent registration request", e); } return mapping.redirect(); } }