1、准备:为了完成主题中所提到的任务我们需要做如下准备:
IntelliJ IDEA 11.1.1
Maven 3.0.4
JDK 1.6.0
JBOSS 5.1.0 GA
关于安装以及环境配置请Google
2、新建项目和一键式部署
打开IntelliJ中创建一个新的Project名字命名为(maven-ejb-spike),并在Project Structure,Modules中在maven-ejb-spike下增加一个 EJB 的module。
在Deployment Descriptors中增加ejb-jar.xml, 在项目的根路径下将增加一个META-INF其中包括一个ejb-jar.xml。
在src/main下新建一个resources目录,将整个META-INF文件夹移动到resources下
打开pom.xml文件,并在其中增加以下配置:
<groupId>maven-ejb-spike</groupId>
<artifactId>maven-ejb-spike</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>2.1</ejbVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jboss-maven-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<serverName>all</serverName>
<fileName>target/maven-ejb-spike-1.0.jar</fileName>
</configuration>
</plugin>
</plugins>
</build>
然后到项目路径下,执行:mvn clean install jboss:hard-undeploy jboss:hard-deploy jboss:start
如果看到 Starting JBoss和BUILD SUCCESS的字样,就说明成功了。我们的EJB项目现在会被maven自动打包成jar包并发布到JBoss的deploy目录下。 我们可以接着进行下面的工作。
3、开始开发第一个Session
右键点击当前项目(也就是maven-ejb-spike),选择 ‘New Stateless Session Bean’,并填入必备的信息。最后点击确认,将会生成三个EJB session相关的类,remote interface 从EJB Object继承,session bean和EJB home,同时IntelliJ会自动修改ejb-jar.xml的内容。
此时我们的EJB不做任何事情,但是是一个完整可以部署的EJB session了。
执行 mvn clean install jboss:hard-undeploy jboss:hard-deploy jboss:start 看是否依然能够部署成功。
确认成功信息之后在remote interface中增加一个方法例如helloEJB, 然后在session bean中实现。
4、测试在JBoss上的EJB Session
将JBoss下client目录中所有jar加入到当前项目中。
然后在测试用例中加入如下代码:
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
environment.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
environment.put(Context.PROVIDER_URL, "jnp://localhost:1099"); //remote machine IP
InitialContext context = new InitialContext(environment);
GasCostCalculator calculator = ((GasCostCalculatorHome)context.lookup("GasCostCalculatorEJB")).create();
assertThat(calculator.calculate(0), equalTo(0));
System.out.println("-->> lookup object successfully");
运行测试用例之前确保你的JBoss在执行中。
理论上。。。。测试用例应该通过。