1. WildFly介紹:
WildFly,前身是JBoss AS,從V8開始為區別於JBoss EAP,更名為WildFly. 由紅帽 (Red Hat)開發,是另一個功能齊全且經過認證的應用服務器.
Wildfly是一個開源的基於JavaEE的輕量級應用服務器。可以在任何商業應用中免費使用。
WildFly是一個靈活的、輕量的、強大管理能力的應用程序服務器。Wildfly是一個管理EJB的容器和服務器,但JBoss核心服務不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。
特點
- 無與倫比的速度:快速啟動,無限的網絡性能和可擴展性。
- 非常的輕量級:瘦內存管理,運行時間可定制化。
- 強大的管理功能:統一的配置和管理。
下載安裝
wildfly下載地址:https://wildfly.org/downloads/
目前,最新版本是18.0.1.Final,選擇“Java EE Full & Web Distribution”項對應的ZIP版本,點擊下載即可。
安裝java環境要求Java8或更高版本。下載好后, 直接解壓, 放到一個目錄下,
standalone目錄下存放的應用將單獨占用進程,可單獨啟動和關閉,之間沒有關聯性。旗下有許多xml文件可供啟動時選擇。
domain目錄下的應用之間有關聯性,managing multiple servers from a single control point。
modules目錄,jboss采用module加載驅動。
啟動
首先配置WildFly到系統變量和path里, 這里是方便之后的操作
現在啟動wildFly, 打開cmd, 直接輸入standalone
或則到bin目錄下找到standalone這個bat腳本,運行它,也可以
運行成功輸出如下:
最后在瀏覽器輸入 http://localhost:8080, 結果如下圖,說明運行成功。
2. Eclipse配置WildFly
2.1 下載wildFly
直接在Eclipse Marketplace搜索jboss, 然后選擇下載JBoss Tools 4.5.3.Final
2.2 運用WildFly
參考文: https://blog.csdn.net/qq_17058993/article/details/83027234
先看下最后搭建的目錄,
第一個是要部署的項目, 類似於服務環境(server)
第二個是客戶端, 調用第一個項目的實例(client)
1. 搭建第一個實例
File->new->project->EJB->EJB project, 創建一個EJB的項目,
最后要勾上Generate ejb-jar.xml這個選項
要引入Jboss EJB3 library
點擊項目HelloWidFly右鍵->properties, 配置Library, 最后對HelloWildFly重新build一次就可以了.
HelloWidfly.java文件內容如下:
package com.xum.demo; import javax.ejb.LocalBean; import javax.ejb.Stateless; /** * Session Bean implementation class HelloWidfly */ @Stateless @LocalBean public class HelloWildfly implements HelloWildflyRemote { /** * Default constructor. */ public HelloWildfly() { // empty constructor } @Override public String hello(String s) { return "hello," + s + " wildFly remote"; } }
HelloWildflyRemote.java的內容:
package com.xum.demo; import javax.ejb.Remote; @Remote public interface HelloWildflyRemote { public String hello(String s); }
2. 搭建第二個實例
創建一個Java的project, 不再是EJB的prokect,而是java的project
同時要配置library, jboss-cli-client和jboss-client兩個jar文件
HelloWildFlyClient.java文件里的內容:
package com.xum.demo; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; public class HelloWildFlyClient { // https://blog.csdn.net/qq_17058993/article/details/83027234 public static void main(String[] args) { Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); props.put(Context.PROVIDER_URL, "http-remoting://localhost:8080"); props.put("jboss.naming.client.ejb.context", true); InitialContext context; try { context = new InitialContext(props); //For stateless beans: //ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface> //For stateful beans: //ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful //JNDI路徑 查看控制台輸出文件 @remote 注解的 String fullEJBName = "HelloWildFly/HelloWildfly!com.xum.demo.HelloWildflyRemote"; HelloWildflyRemote helloWorld; helloWorld = (HelloWildflyRemote) context.lookup(fullEJBName); System.out.println(helloWorld.hello("xum")); } catch (NamingException e1) { e1.printStackTrace(); } } }
HelloWildflyRemote.java文件里的內容:
package com.xum.demo; import javax.ejb.Remote; @Remote public interface HelloWildflyRemote { public String hello(String s); }
到目前為止, 兩個實例搭建成功, 現在運行起來, 如下步驟:
1. 先運行第一個實例, HelloWildFly項目右鍵 –> Export –> Export EJB file
一定要導入到wildfly-18.0.1.Final\standalone\deployments這個目錄下, 要不然這個實例起不來
導入成功后,運行這個實例,通過之前的standalone或則standalone.bat腳本運行起來
運行成功,會看到有如下類似的信息, 這個對客戶端調用非常重要.
java:global/HelloWildFly/HelloWildfly!com.xum.demo.HelloWildflyRemote java:app/HelloWildFly/HelloWildfly!com.xum.demo.HelloWildflyRemote java:module/HelloWildfly!com.xum.demo.HelloWildflyRemote java:jboss/exported/HelloWildFly/HelloWildfly!com.xum.demo.HelloWildflyRemote ejb:/HelloWildFly/HelloWildfly!com.xum.demo.HelloWildflyRemote java:global/HelloWildFly/HelloWildfly!com.xum.demo.HelloWildfly java:app/HelloWildFly/HelloWildfly!com.xum.demo.HelloWildfly java:module/HelloWildfly!com.xum.demo.HelloWildfly
ejb:/HelloWildFly/HelloWildfly!com.xum.demo.HelloWildfly
2. 最后運行第二個實例, 就是java project, Ctrl + F11,運行內容如下:
十二月 07, 2019 4:17:41 下午 org.jboss.naming.remote.client.InitialContextFactory <clinit> INFO: WFNAM00025: org.jboss.naming.remote.client.InitialContextFactory is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead 十二月 07, 2019 4:17:41 下午 org.wildfly.naming.client.Version <clinit> INFO: WildFly Naming version 1.0.11.Final 十二月 07, 2019 4:17:41 下午 org.wildfly.security.Version <clinit> INFO: ELY00001: WildFly Elytron version 1.10.4.Final 十二月 07, 2019 4:17:41 下午 org.xnio.Xnio <clinit> INFO: XNIO version 3.7.3.Final 十二月 07, 2019 4:17:41 下午 org.xnio.nio.NioXnio <clinit> INFO: XNIO NIO Implementation Version 3.7.3.Final 十二月 07, 2019 4:17:43 下午 org.jboss.threads.Version <clinit> INFO: JBoss Threads version 2.3.3.Final 十二月 07, 2019 4:17:43 下午 org.jboss.ejb.client.legacy.RemotingLegacyConfiguration getConfiguredEndpoint INFO: EJBCLIENT000070: Using legacy jboss-ejb-client.properties Remoting configuration 十二月 07, 2019 4:17:43 下午 org.jboss.remoting3.EndpointImpl <clinit> INFO: JBoss Remoting version 5.0.15.Final 十二月 07, 2019 4:17:43 下午 org.jboss.ejb.client.legacy.ElytronLegacyConfiguration getConfiguredAuthenticationContext INFO: EJBCLIENT000069: Using legacy jboss-ejb-client.properties security configuration 十二月 07, 2019 4:17:46 下午 org.jboss.ejb.client.legacy.LegacyPropertiesConfiguration configure INFO: EJBCLIENT000072: Using legacy jboss-ejb-client.properties EJB client configuration hello,xum wildFly remote
最后一行就是程序調用第一個實例打印出來的結果.
至此,WildFly運行成功,並調用成功.