原文:Intellij Idea 创建EJB项目入门(一)
相关软件:
1、JBoss(jboss-as-7.1.1.Final):http://jbossas.jboss.org/downloads
2、Intellij IDEA 13.02
3、JDK 1.7
4、Tomcat 6
1)首先下载JBossAS,解压到C盘,如C:\jboss-as-7.1.1.Final。
2)安装JBossas,可以参考:http://jingyan.baidu.com/article/15622f247f1607fdfcbea5b2.html
3)安装完成后,在Idea中对JBoss进行热部署,可以参考:
http://blog.csdn.net/z_dendy/article/details/42296385
====================================================================
1、新建一个项目,即作业空间:
项目名称为j2ee_ejb,项目类型为简单的Java,Next,Finish。
2、点击项目名,右键 New -> Module -> 输入模块名为EBJTest -> 点击“Next” -> 选择“Web Application” 和“EJB:Enterprise Java Bean(3.2)” -> Finish:
勾“Create ejb-jar.xml”,选择Download。
3、创建一个接口:HelloWorld
注意标注@Remote
package com.ejb; import javax.ejb.Remote; /** * Created by gao on 16-3-27. */ @Remote public interface HelloWorld { public String sayHello(String world); }
4、创建一个无状态Bean,右击src,New -> Stateless Session Bean。
输入名称为HelloWorld。
实现HelloWorld接口,完成编程:
package com.ejb; import javax.ejb.Stateless; /** * Created by gao on 16-3-27. */ @Stateless(name = "HelloWorldEJB") public class HelloWorldBean implements HelloWorld { public HelloWorldBean() { } @Override public String sayHello(String world) { return "Hello " + world + "!"; } }
5、部署JBoss,选择JBoss -> Local
弹出Run/Debug Configuration,输入Name为ejbtest,然后选择Deployment:
选择右边的“+”号,选择“EJBTest:war exploded”,发现下面出现一行红色字,为出错:
点“Fix”,弹出Project Structure:
只需要将Output directory的目录最后以.war结尾即可。
6、运行JBoss,成功部署,并生成war文件。
此时JBoss被成功启动,浏览器输入:http://localhost:8080可以看到以下界面。
其实这时候JBoss服务器端的代码就已经部署成功的了,如果你不想用IDEA部署的话,可以关闭IDEA 中的JBoss,将刚刚生成的war文件复制到JBoss安装目录中的statndalone\deployments,
即C:\jboss-as-7.1.1.Final\standalone\deployments,当启动JBoss时,它会自动加载里面的项目文件。启动JBoss,点击C:\jboss-as-7.1.1.Final\bin下的standalone.dat文件。
7、编写Java类进行测试——HelloWorldClient.java
注意:JBOSS 6,7调用通过JNDI查找EJB的方法和JBOSS5不一样
所以可以先好好参考一些文章:
http://www.aichengxu.com/view/1730590
http://share.zhbor.com/article/18176.html
http://weli.iteye.com/blog/1282169
http://www.micmiu.com/j2ee/ejb/eclipse-jboss-ejb-demo/
http://blog.csdn.net/xiaokui_wingfly/article/details/8729086
http://blog.csdn.net/zjtyxy2007/article/details/9952095
http://blog.csdn.net/zhanglu_king/article/details/12251279
http://www.cnblogs.com/yjmyzz/p/intellij-idea-13-getting-started.html
1)我本来是在一个新的Project中建立Java类测试的,但是后来发现在和EJB Module同一个Project下也是可以的,所以我就在刚刚新建的项目j2ee_ejb中新建一个Module。
点击项目名j2ee_ejb,右键 -> New -> Module -> 选择Java -> 输入Module名称“EJBTestJava” -> Next -> Finish。
2)在Module下新建一个文件夹lib,复制粘贴两个jar包,一个是从刚刚生成的EJB文件中,将javax.ejb-api.jar复制进来,另外一个是从JBoss安装路径中,即从C:\jboss-as-7.1.1.Final\bin\client目录中复制jboss-client.jar。
3)新建一个接口HelloWorld,即和EJB项目中的接口一样,包括包名:
package com.ejb; import javax.ejb.Remote; /** * Created by gao on 16-3-28. */ @Remote public interface HelloWorld { public String sayHello(String world); }
4)新建一个测试类
import com.ejb.HelloWorld; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Hashtable; public class HelloWorldClient { public static void main(String[] args) throws NamingException { // Properties props = new Properties(); // props.setProperty("java.naming.factory.initial", // "org.jnp.interfaces.NamingContextFactory"); // props.setProperty("java.naming.provider.url", "localhost:1099"); // props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); // try { // InitialContext ctx = new InitialContext(props); // HelloWorldRemote helloworld = (HelloWorldRemote) ctx // .lookup("HelloWorld/remote"); // System.out.println(helloworld.sayHello("World")); // System.out.println(helloworld.sayHello("China")); // } catch (NamingException e) { // e.printStackTrace(); // } HelloWorld helloWorld = lookupRemoteStatelessEjbBean(); System.out.println(helloWorld); String s = helloWorld.sayHello("world"); System.out.println(s); } private static HelloWorld lookupRemoteStatelessEjbBean() throws NamingException { final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties); final String appName = ""; final String moduleName = "EJBTest_war_exploded"; final String distinctName = ""; final String beanName = "HelloWorldEJB"; final String viewClassName = HelloWorld.class.getName(); final String namespace = "ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName; System.out.println(namespace); return (HelloWorld) context.lookup(namespace); /* return (RemoteCounter) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful"); */ } }
注意:注释掉的是JBoss5之前的访问模式,可以对比一下。
5)在src路径下新建一个文件:jboss-ejb-client.properties,注意最后的username和password换上你在安装JBoss时新建的用户名和密码。
endpoint.name=client-endpoint remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false remote.connection.default.username=yang remote.connection.default.password=123456
6)项目目录:
7)运行测试。注意,这时JBoss是已经启动的了,你可以在IDEA启动,也可以用JBoss的命令启动。
直接点击HelloWorldClient类名,右键,选择Run "HelloWorldClient... "即可。
运行结束后可在控制台中看到以下输出: