Получение 2 серверов Tomcat, общающихся друг с другом - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть веб-приложение на Java, которое я разрабатываю для школьного проекта. Существует требование, чтобы уровень представления (servlets / jsp) был развернут на одном сервере, а бизнес-логика - на другом.

Мне нужно решение для соединения двух серверов.

В настоящее время я изучаю RMI и Axis2.

Я не могу заставить RMI успешно работать. Я следую официальному учебному пособию и продолжаю получать исключение безопасности локально, и я предполагаю, что оно будет ухудшаться, когда задействован Tomcat.

Axis2 кажется хорошим решением, но мне нужно время, чтобы его освоить.

Мой вопрос: существует ли простой способ подключения серверов 2, чтобы я мог назвать свой бизнес-уровень? Может быть, у Tomcat есть что-то встроенное.

Если RMI является де-факто протоколом и API, которые я должен использовать, есть ли хорошие руководства по использованию RMI с Tomcat.

На серверах, которые я использую, работает Tomcat.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Я не уверен, насколько сложен ваш уровень данных, но вы можете реализовать интерфейс REST на сервере бизнес-логики, например, используя Apache CXF Это должно быть проще, чем использование Axis2.

1 голос
/ 16 ноября 2011

Есть много вариантов:

  • Напишите файл с одной стороны, прочитайте его с другой. «другая» должна иметь бесконечный цикл для отслеживания папки, в которую «одна сторона» записывает файлы запросов.
  • Используйте розетки
  • Использование ОТДЫХ
  • RMI

Если вы работаете в Linux:

Учитывая ваше окружение, я бы пошел с REST.

0 голосов
/ 16 ноября 2011

Я закончил с использованием RMI. Используя этот учебник, я получил его на работу: http://sacrosanctblood.blogspot.com/2008/11/rmi-tutorial-rmi-and-tomcat.html. Ключ заключается в следующем: в стартовом сервлете вы должны убедиться, что объект, который вы используете, имеет область действия класса, а не область метода. Кроме того, код диспетчера безопасности не требуется.

Вот код используемого сервлета startServer:

public class startServer extends HttpServlet
{
    public static boolean isRegistered = false;    
    public IRemote service = new RemoteImpl();

    @Override
    public void init(ServletConfig config) throws ServletException
    {
        super.init(config);        
        if (!isRegistered)
        {
            try
            {                
                IRemote stub = (IRemote) UnicastRemoteObject.exportObject(service, 0);
                Registry registry = LocateRegistry.createRegistry(9345);
                registry.rebind(IRemote.serviceName, stub);
                System.out.println("Remote service bound");
                isRegistered = true;
            }
            catch (Exception e)
            {
                System.err.println("Remote service exception:");
                e.printStackTrace();
            }
        }
    }
}

А вот код клиента:

public String getRemoteString()
{
    String result = "";
    try
    {
        Registry registry = LocateRegistry.getRegistry(9345);            
        IRemote serv = (IRemote) registry.lookup(IRemote.serviceName);

        result = serv.executeRemote("Test");
    }
    catch (Exception e)
    {
        System.err.println("Remoteservice exception:");
        e.printStackTrace();
    }

    return result;
}

В настоящее время он работает на одном и том же сервере, но я уверен, что смогу запустить 2 позже.

...