Luego de investigar con expertos en este tema, programadores de diversas áreas y maestros hemos dado con la solución al problema y la dejamos plasmada en esta publicación.
Solución:
Para mostrar lo fácil que es permitir que dos aplicaciones se comuniquen entre sí, consulte esta demostración de portapapeles de red usando JGroups. Simplemente inicie dos instancias y comience a colocar archivos en una de ellas. La segunda instancia mostrará instantáneamente los mismos archivos.
import java.io.Serializable;
import java.awt.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import org.jgroups.*;
public class JGroupsTest
public static void main(String[] args) throws Exception
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(500, 300);
final DefaultListModel listModel = new DefaultListModel();
final JList panel = new JList(listModel);
panel.setBackground(new Color(128, 0, 40));
panel.setForeground(new Color(240, 240, 240));
frame.add(panel);
System.setProperty("java.net.preferIPv4Stack", "true");
final JChannel channel = new JChannel("udp.xml");
channel.connect("networkclipboard");
channel.setReceiver(new ReceiverAdapter()
@Override
public void viewAccepted(View newView)
frame.setTitle("Network Clipboard - " + channel.getLocalAddress());
@Override
public void receive(Message msg)
listModel.addElement(msg.getObject());
);
panel.setTransferHandler(new TransferHandler()
@Override
public boolean importData(JComponent comp, Transferable t)
DataFlavor[] transferDataFlavors = t.getTransferDataFlavors();
for (DataFlavor flavor : transferDataFlavors)
try
Object data = t.getTransferData(flavor);
if (data instanceof Serializable)
Serializable serializable = (Serializable) data;
Message msg = new Message();
msg.setObject(serializable);
channel.send(msg);
catch (Exception e)
e.printStackTrace();
return super.importData(comp, t);
@Override
public boolean canImport(TransferSupport support)
return true;
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors)
return true;
);
Depende de cómo le gustaría comunicar esos 2 programas:
-
Si solo necesita semáforos entre procesos, cree un archivo en algún lugar de /tmp y bloquéelo.
-
Si solo necesita mensajería síncrona entre procesos (llamada a procedimiento remoto), RMI debería ser más fácil.
-
Si necesita mensajería asíncrona entre procesos, JMS debería ser más fácil.
-
Si necesita memoria compartida entre procesos, use archivos asignados.
-
Si necesita todo lo anterior, Terracotta (http://www.terracotta.org/ ) es la forma más fácil: los programas Java en diferentes JVM en la misma o incluso en diferentes computadoras se ven como si se ejecutaran dentro de una JVM en una máquina. Dividir un programa en varios ni siquiera requiere ningún cambio de código: es suficiente para escribir un archivo de configuración XML.
Cada uno podría escuchar en un Socket
. Este tutorial es bueno para empezar.
Te mostramos las comentarios y valoraciones de los lectores
Recuerda que puedes optar por la opción de agregar una reseña si acertaste tu rompecabezas a tiempo.