我正在为一个学校项目开发一个Java Web应用程序。需要将表示层(servlets / jsp)部署到一个服务器,并将业务逻辑部署到另一个服务器。
我需要一个连接两台服务器的解决方案。
目前我正在研究RMI和Axis2。
我无法让RMI成功运作。我正在关注official tutorial并继续在本地获取安全异常,并想象当涉及Tomcat时它会变得更糟。
Axis2似乎是一个很好的解决方案,但我需要时间来加强它。
我的问题是:有一种连接2服务器的简单方法,以便我可以调用我的业务层吗?也许Tomcat内置了一些东西。
如果RMI是我应该使用的事实上的协议和API,那么有没有关于在Tomcat中使用RMI的好教程。
我正在使用的服务器都在运行Tomcat。
答案 0 :(得分:2)
我不确定您的数据层有多复杂,但您可以使用Apache CXF在业务逻辑服务器上实现REST接口。这应该比使用Axis2更容易。
答案 1 :(得分:1)
有很多选择:
如果您使用的是Linux:
考虑到你的环境,我会选择REST。
答案 2 :(得分:0)
我最终使用了RMI。使用本教程,我得到了它的工作:http://sacrosanctblood.blogspot.com/2008/11/rmi-tutorial-rmi-and-tomcat.html。关键是:在启动servlet中,你必须确保你要删除的对象是类作用域而不是方法作用域。此外,不需要安全管理器代码。
这是我正在使用的startServer servlet的代码:
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。