我有三个池(应用程序),它们按顺序转换数据并通过套接字相互通信(或获取,发布 - 永不清楚)。我有servlet,它接受数据并将数据传输到其中一个起始池。如何在一个容器(tomcat,wildfly)中运行它?制作3罐,1件战争神器或别的东西? 应该写在pom.xml中吗?
答案 0 :(得分:0)
嗯,模块之间的通信非常重要:
如果您对通过直接本地 API调用进行通信感到满意,则必须构建一个包含三个模块的单一战争(通常每个模块一个JAR)。
但是如果你想要一个分布式应用程序,通信应该是远程(通过TCP套接字,RMI,HTTP,ReST等)。通过这种方式,您可以为每个模块构建一个程序集:如果模块包含servlets / JSP,则应为WAR;如果不包含,则应为JAR。
在Maven中,这意味着:
packaging=pom
和一个<module>
声明。package=jar
或war
(取决于上述决定)为每个模块创建一个模块项目(在父模块内)。根据类型部署和启动每个模块也很重要(由@Carlitos Way评论):
每个非Web模块都应该有一个主类,它将负责从命令行接收所需的参数(至少是端口号)并启动监听类 - 不管它是什么。
package module.cmd;
public class MyMainClass
{
public static void main(String[] arguments)
{
int port=Integer.parseInt(argument[0]);
new MyListener(port).start();
}
}
要运行它,执行就足够了:
mvn exec:java -Dexec.mainClass="module.cmd.MyMainClass" -Dexec.args="8001"