文章目录
一、环境配置
写在前面
jdk1.8和jboss-as-7.1.1并不兼容(尽管在网上找到了有说不需要换jdk的方法,但是至少我是失败了),这里的内容是:在不改变其他项目使用jdk1.8的情况下,对jboss项目使用jdk1.7.
下载jboss-as-7.1.1.final并配置环境变量
配置环境变量:(右键我的电脑-属性-高级系统设置-环境变量)
1、在“系统变量”里添加JBOSS_HOME变量,值为Jboss的路径。例如我的路径在D盘根目录下,则值为D:\jboss-as-7.1.1.Final。
2、在path变量中新增:%JBOSS_HOME%\bin
验证是否配置成功:
1、打开jboss-as-7.1.1.Final下的子目录bin,运行standlone.bat,启动JBoss服务器。注意不是运行run.bat。
2、JBoss服务器启动完毕之后,打开浏览器并输入地址http://localhost:8080, 如出现JBoss欢迎页面,则表示JBoss安装并运行成功;
如果你是jdk1.8,那么安装jdk1.7并修改standlone.bat
如果是jdk1.8的话,点击standlone.bat,会卡在JBoss AS 7.1.1.Final “Brontes” starting。
1、下载jdk1.7并安装:网盘链接 提取码:0jv1
注意不需要为jdk1.7配环境
2、修改standlone.bat,下图第60行修改为 set "JAVA=你的jdk7安装路径(在安装时选择的那个)\bin\java"
在eclipse中安装JBoss Tools开发插件
Help -> Eclipse Marketplace -> 搜索jboss,如下图,点击右下角install
如果在search这里没有找到的话,那么这里的第三栏popular中也应该有它。
在弹出的窗口中选择[JBossASTools],点击按钮[Confirm],接着在安装许可协议窗口中选择accept,然后finish等它自动下载(需要联网)
eclipse配置
1、Window -> preferences -> Java -> installed JREs -> add,跳出的窗口点击next,会如下图所示:
图中的JRE name取个你自己能分辨出来哪个版本的就行,JRE home还是填jdk安装目录,和之前修改的standlone.bat中的路径一致。
2、依旧是Window -> preferences,然后找到server -> Runtime Environment -> add -> jboss7.1 -> next
注意下图框起来的地方:
Home Directory使用的是jboss的路径,和前面JBOSS_HOME的值相同
Runtime JRE这里需要选择刚才在 installed JREs那里设置的那个名称(希望你还记得)
二、第一个EJB程序
编写EJB工程
1、file -> new -> EJB project,这里我就叫它HelloEJB了,注意这里选择一下Target Runtime,不选的话就只能去build path里面加了
2、右键项目名添加包,这里我的包叫com.hello.ejb,右键包名 -> new -> session bean
这里我叫它Hello,(ps:下图中的stateless意为无状态,选择stateful则为有状态
3、finish之后我们看到这个包下生成了一个Hello.java和它的remote接口HelloRemote.java
HelloRemote.java:
package com.hello.ejb;
import javax.ejb.Remote;
@Remote
public interface HelloRemote {
public String hello(String s);
}
Hello.java:
package com.hello.ejb;
import javax.ejb.Stateless;
/**
* Session Bean implementation class Hello
*/
@Stateless
public class Hello implements HelloRemote {
/**
* Default constructor.
*/
public Hello() {
// TODO Auto-generated constructor stub
}
public String hello(String s) {
return "hello " + s;
}
}
将工程部署到JBoss服务器
右键工程名选择export -> EJB jar file,显示如下图所示
Browser选择路径为jboss目录下的standalone\deployments文件夹
非常重要的一点!!!如果代码有改动,那么需要重新部署,也就是重新export,不然你的客户端不会知道改动的!!
编写客户端工程
就建一个普通的java project,这里我们叫它HelloEJB-Client
新建包com.hello.ejb和com.hello.ejb.client
1、把刚才EJB工程文件中的HelloRemote复制到com.hello.ejb下
2、右键项目名-build path,导入jboss-client.jar包
3、在com.hello.ejb.client下新建java类HelloClient.java
package com.hello.ejb.client;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.hello.ejb.HelloRemote;
public class HelloClient {
private static HelloRemote lookupRemoteStatelessEjbBean() throws NamingException{
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put("jboss.naming.client.ejb.context", true);
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
final String appName = "";
//moduleName是EJB工程名
final String moduleName = "HelloEJB";
final String distinctName = "";
//beanName是EJB工程下的sessionBean名
final String beanName = "Hello";
final String viewClassName=HelloRemote.class.getName();
//如果EJB工程下的sessionBean是有状态的,则后面还需要加`+"?stateful"`
final String namespace = "ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName;
return (HelloRemote) context.lookup(namespace);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
//查找目录
HelloRemote hello = lookupRemoteStatelessEjbBean();
System.out.println(hello);
String s = hello.hello("EJB");
System.out.println(s);
}catch(NamingException e){
e.printStackTrace();
}
}
}
4、jboss-ejb-client.properties文件(放在src目录下
注意这里port是4447 但是jboss6及以前版本应该是1099
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
启动服务器,运行程序
servers当中启动Jboss7,如下图
启动成功后将会看到:
整体目录结构
另外需要注意的地方
当客户端程序是web工程时一定要右键工程名-properties-java compiler 改成1.7版本的,不然会报错。