Eclipse+Wildfly10 创建第一个EJB项目
參考博客:http://www.micmiu.com/j2ee/ejb/eclipse-jboss-ejb-demo/
https://blog.csdn.net/taiyangdao/article/details/50826865
http://www.zzqq.org/p/0326280574d92f13b11c3bce0eb785b0.html?最后 遇到問題 部分
?
一、Eclipse安裝?Wildfly 10服務器
下載Wildfly 10?在eclipse中 配置 Server Runtime Environments
?
二、創建Server
File → New → Other → Server →?Wildfly 10.0
?
三、創建EJB工程
?File →?New →?Other … →?EJB →?EJB Project
?
輸入工程名字,下面默認。
?
【Next】→【Next】(選中?Generate ejb-jar.xml deployment descriptor)→【Finish】
?
目錄如下:
?
ejbModule就是編寫JAVA源碼的地方(即EJB代碼)
在ejbModule 目錄上右鍵【New】→【Other…】→【EJB】→?Session Bean(EJB 3.x)
?
→【Next】輸入包名:com.micmiu.ejb、EJB類名:HelloWorld ,選中 Remote選項??→【Finish】.
?
自動生成兩個類:HelloWorldRemote.java? ? ?
這里添加了方法
接口類?需要打jar包?后面客戶端訪問的時候會用到??
package com.micmiu.ejb;import javax.ejb.Remote;@Remote public interface HelloWorldRemote {String sayHello(String username); }HelloWorld.java
這是實現類
實現接口類方法
package com.micmiu.ejb;import javax.ejb.LocalBean; import javax.ejb.Stateless;/*** Session Bean implementation class HelloWorld*/ @Stateless @LocalBean public class HelloWorld implements HelloWorldRemote {/*** Default constructor. */public HelloWorld() {// TODO Auto-generated constructor stub}@Overridepublic String sayHello(String username) {// TODO Auto-generated method stubreturn "Hello," + username + " welcome to EJB.";}}?
四、部署?
兩種方式:
1、eclipse中啟動wildfly服務器? server?start?
2、將EJB工程打包?放到wildfly?的server中?
( 我電腦路徑是:E:\ews\wildfly-10.1.0.Final\standalone\deployments )
在工程上右鍵→【Export】→【EJB JAR file】?Destination處:→【Browse…】→?選擇Wildfly服務器的部署目錄:wildfly-10.1.0.Final\standalone\deployments→【完成】即可
再運行:E:\ews\wildfly-10.1.0.Final\bin?中的??standalone.bat
?
五、獲取JNDI?路徑
?
1、獲取JNDI的規則:
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第一個是appname 第二個是module name,distinct name可以設空,bean name就是實現remote/local 接口的bean類名
?
2、獲取JNDI路徑的方法有兩種:
?
第一種 查看console?獲取JNDI路徑
①eclipse中啟動
第一行標注的是客戶端訪問用到的JNDI路徑,只有準確寫入之后才可以訪問到ejb對象。
?
②在wildfly上部署啟動
運行:E:\ews\wildfly-10.1.0.Final\bin?中的??standalone.bat
其中第二行才是需要的JNDI路徑?原因:
HelloWorldRemote?接口類中有@Remote注解?才可以找到
分析路徑:EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote
EJB-HelloWorld?是ejb項目的名字,是編譯部署到wildfly的名字,HelloWorld是你注解name的ejb名字,com.micmiu.ejb.HelloWorldRemote是@Remote注解的完整路徑。
?
第二種?查看wildfly?console??獲取JNDI路徑
打開wildFly administrator console界面,需要輸入wildfly服務器用戶的用戶名和密碼。
Runtime->Standalone Server->Subsystems->JNDI view?
進入JNDI視圖后,最下面點開 applications,就是你發布成功的ejb。
?
?
?
?
配置完成的JNDI:EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote
?
擴展:
wildfly?配置JNDI的時候?到底用什么方法???
wildfly配置不能使用JBoss那一套了,反正我之前嘗試了很多都報錯。然而網上大部分還都是JBOSS那一套,JBOSS的升級版是wildfly。參考:Java EE 遠程客戶的訪問EJB實現實例(Jboss wildfly)? 需要查閱wildfly的文檔?找了半天沒找到?
網上又有說法是,在用wildfly做開發時,完全可以照搬照看wildfly企業版jbossEAP官方的資料: https://developers.redhat.com/products/eap/docs-and-apis/
還有oracle 官方的Java EEtutorial也甚為經典:?
https://docs.oracle.com/javaee/7/tutorial/
?
?
六、創建客戶端工程
?1、創建java? 類
File → New → Other …?→ Java Project
接下來很關鍵,需要添加兩個jar包。這里是理解EJB的重點,一個是接口類jar包,說明請求訪問EJB的哪個具體方法,具體實現方法 在這里不需要單獨打包,部署的時候已經把整個EJB工程打包過了放到服務器上了,其中包括具體實現。
再一個就是?wildfly的Client的jar包,應該是client和wildfly的溝通規則,我理解是相當于對方的電話號碼。
2、將EJB工程中的接口類?Export ->?jar包 ,添加到客戶端工程classpath中
在接口文件上右鍵——【Export】——java中的jar
?
3、添加wildfly?Client的jar包 (E:\ews\wildfly-10.1.0.Final\bin\client)
這里存在兩個?jboss-client.jar?和 jboss-cli-client.jar?測試發現??jboss-client.jar是必須的?第二個不知道有啥用?都添進去也不影響
?
4、創建客戶端測試類?HelloWorldTest
package com.ews.ejb;import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import com.micmiu.ejb.HelloWorldRemote;public class HelloWorldTest {public static void main(String[] args) throws NamingException {Properties props = new Properties();props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); props.put(Context.PROVIDER_URL, "http-remoting://localhost:8081");props.put("jboss.naming.client.ejb.context", true);InitialContext context = new InitialContext(props);//JNDI路徑 查看控制臺輸出文件 @remote 注解的String fullEJBName = "EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote";HelloWorldRemote helloWorld = (HelloWorldRemote) context.lookup(fullEJBName);System.out.println(helloWorld.sayHello("wls"));}}其中??Properties?為常規配置
fullEJBName?為前面從控制臺中獲取到的JNDI的路徑,通過該路徑成功獲取到ejb對象。
?
設置JNDI上下文參數
JNDI上下文的參數與使用的遠程JNDI類型相關。具體可以分為http-remoting方式和ejb方式2種。
ejb方式測試以后報錯,所以這里使用 http-remoting方式,來實現客戶端通過JNDI遠程調用EJB的方法
?
七、測試?
前面已經啟動了wildfly 服務器(兩種方法都可以)
再運行客戶端,成功打印如下:
總結
以上是生活随笔為你收集整理的Eclipse+Wildfly10 创建第一个EJB项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云弹性计算对视觉计算的思考与实践
- 下一篇: 怎么把学校计算机室的电脑连上网,笔记本电