JRebel允许您将应用程序立即部署到您选择的应用程序服务器,从而跳过构建和重新部署过程。 所有主要的IDE(例如NetBeans,Eclipse和IntelliJ)都支持它。 它在各种应用程序服务器中也受支持,例如JBoss EAP,WildFly,WebLogic,WebsFear(err,WebSphere),Tomcat等。
您可以轻松地在JBoss Developer Studio中开始使用JRebel,也可以在本地桌面上将JRebel与JBoss集成 。 它也可以轻松地与OpenShift上的JBoss Developer Studio和Ticket Monster一起使用 。
本技术提示将说明如何使用Docker容器设置JRebel。 具体来说,我们将使用Java EE 7动手实验(jrebel分支)提供的示例应用程序,带有Eclipse Mars M5的 JBoss Tools和在WildFly Docker容器中运行示例应用程序。
非常感谢Adam Koblentz( @akoblentz )帮助我完成了所有步骤!
让我们开始吧!
在Eclipse中安装JRebel
JRebel以三种模式运行:
- 本地:应用服务器从IDE内部运行
- 外部:应用服务器从IDE外部运行,例如使用CLI,但在同一台计算机上运行
- 远程 :应用程序服务器在其他计算机,VM,容器或云上运行
Docker容器需要使用“远程”模式进行配置。
- 按照tools.jboss.org/downloads/中的说明安装JBoss Tools。 JRebel的远程模式只能使用IDE启用。 从Eclipse Marketplace安装JRebel插件 。
使用WAR打包rebel.xml和rebel-remote.xml
这些文件定义了类和资源在存档中的位置。
- 克隆Java EE 7 HOL回购:
git clone https://github.com/javaee-samples/javaee7-hol.git
- (从
solution
目录中)在IDE中导入Maven项目,右键单击该项目,选择JRebel菜单,然后单击“启用JRebel Nature”。 这将在src/main/resources
目录中生成rebel.xml
,看起来类似于:<?xml version="1.0" encoding="UTF-8"?> <application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd"> <classpath> <dir name="/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/target/classes"> </dir> </classpath> <web> <link target="/"> <dir name="/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/target/m2e-wtp/web-resources"> <exclude name="/"/> </dir> </link> <link target="/"> <dir name="/Users/arungupta/workspaces/javaee7-hol/solution/movieplex7/src/main/webapp"> </dir> </link> </web> </application>
- 再次右键单击该项目,然后选择“启用远程处理”。 这将再次在
src/main/resources
目录中生成rebel-remote.xml
,看起来像:<?xml version="1.0" encoding="UTF-8"?> <rebel-remote> <id>movieplex7</id> <publicKey>XXXXXXX</publicKey> </rebel-remote>
这需要在将要在IDE中使用JRebel的计算机上完成。 这将确保适当生成公共密钥。
- 将您的应用程序打包为
mvn package
这会将
rebel.xml
和rebel-remote.xml
在WAR文件中。
配置和运行应用程序服务器
应用服务器需要了解JRebel代理和特定于平台的库。 如果较早安装了JRebel,则可以从Eclipse获得这两个文件。 在Mac上,这些文件位于eclipse/mars/m5/eclipse/plugins/org.zeroturnaround.eclipse.embedder_6.1.1.RELEASE-201503121801/jr6/jrebel/
目录中。 确切的名称可能会因您的情况而有所不同。
- 使用Dockerfile构建映像:
FROM jboss/wildfly COPY jrebel.jar $JBOSS_HOME/jrebel.jar COPY libjrebel64.so $JBOSS_HOME/libjrebel64.so RUN echo "JAVA_OPTS=\"\$JAVA_OPTS -Drebel.remoting_plugin=true -agentpath:\$JBOSS_HOME/libjrebel64.so\"" >> $JBOSS_HOME/bin/standalone.conf CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0"] RUN curl -L https://github.com/javaee-samples/javaee7-hol/blob/jrebel/solution/movieplex7-1.0-SNAPSHOT.war?raw=true -o /opt/jboss/wildfly/standalone/deployments/movieplex7-1.0-SNAPSHOT.war
该图中的关键部分是:
- 使用官方的jboss / wildfly Docker映像
- 将JRebel代理程序和特定于平台的库复制到映像
- 配置应用程序服务器,使其了解“远程”模式和特定于平台的库
- 启动WildFly
- 从GitHub下载预构建的WAR文件。 这对您不起作用,您需要将其替换为以下内容:
COPY movieplex7-1.0-SNAPSHOT.war $JBOSS_HOME/standalone/deployments/moviexplex7-1.0-SNAPSHOT.war
该WAR文件与之前生成的文件相同。
- 实际将图像构建为:
docker build -t javaee7-hol .
- 将容器运行为:
docker run -it -p 8080:8080 javaee7-hol
并且应该显示类似以下内容:
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Drebel.remoting_plugin=true -agentpath:/opt/jboss/wildfly/libjrebel64.so ========================================================================= Mar 18, 2015 8:37:30 PM java.util.prefs.FileSystemPreferences$1 run INFO: Created user preferences directory. 2015-03-18 20:37:40 JRebel: 2015-03-18 20:37:40 JRebel: ############################################################# 2015-03-18 20:37:40 JRebel: 2015-03-18 20:37:40 JRebel: JRebel Agent 6.1.1 (201503111716) 2015-03-18 20:37:40 JRebel: (c) Copyright ZeroTurnaround AS, Estonia, Tartu. 2015-03-18 20:37:40 JRebel: 2015-03-18 20:37:40 JRebel: Over the last 1 days JRebel prevented 2015-03-18 20:37:40 JRebel: at least 0 redeploys/restarts saving you about 0 hours. 2015-03-18 20:37:40 JRebel: 2015-03-18 20:37:40 JRebel: Server is running with JRebel Remoting. 2015-03-18 20:37:40 JRebel: 2015-03-18 20:37:40 JRebel: 2015-03-18 20:37:40 JRebel: ############################################################# 2015-03-18 20:37:40 JRebel: 20:37:46,219 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.3.Final 20:37:47,340 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.2.Final
JRebel许可证信息表明所有配置均正确。
如果您使用Docker Machine设置Docker Host,那么现在应该可以通过192.168.99.100:8080/movieplex7/访问该应用程序。
配置Eclipse
最后一步是配置Eclipse,以便它知道应用程序的部署位置。
- 在Eclipse中,右键单击项目,选择JRebel,高级属性
- 单击“部署URL”旁边的“编辑”
- 单击“添加”,然后指定应用程序的URL,在本例中为192.168.99.100:8080/movieplex7/。
- 单击继续,应用,确定。
瞧,配置现已完成。
现在更改任何类,添加任何方法,更新任何实体,HTML或JSF页面将立即将更改推送到Docker容器。 无需重新部署应用程序。
请享用!
翻译自: https://www.javacodegeeks.com/2015/03/configure-jrebel-with-docker-containers.html