(4)通过注解方式 注入并使用 其他EJB或者服务
2012-06-22 11:51
543 查看
package cn.itm.ejb3; public interface Other { public String sayMe(); }
package cn.itm.ejb3.impl; import javax.ejb.Stateless; import cn.itm.ejb3.Other; @Stateless public class OtherBean implements Other { public String sayMe() { return "Other"; } }
需求:helloworldbean 如何调用 otherbean里面的方法。
package cn.itm.ejb3; public interface HelloWorld { // 业务方法: public String sayHello(String name); }
package cn.itm.ejb3; public interface HelloWorldLocal extends HelloWorld { }
第一种方式:通过 JNDI方式:
package cn.itm.ejb3.impl; import javax.ejb.EJB; import javax.ejb.Local; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.naming.InitialContext; import javax.naming.NamingException; import cn.itm.ejb3.HelloWorld; import cn.itm.ejb3.HelloWorldLocal; import cn.itm.ejb3.Other; @Stateless // 指明EJB他是一个无状态的会话bean。 @Remote(HelloWorld.class) // @Local(HelloWorldLocal.class) // 如果客户端 和 EJB是部署在同一个 jboss 内,我们优先调用 本地接口。 public class HelloWorldBean implements HelloWorld,HelloWorldLocal{ // @EJB Other other; public String sayHello(String name) { try { InitialContext ic = new InitialContext(); Other other = (Other)ic.lookup("OtherBean/local"); return name + "说:您好," + other.sayMe(); } catch (NamingException e) { e.printStackTrace(); } // return name + "说:您好," + other.sayMe(); return null; } }
测试类,通用的。
package cn.itm.test; import javax.naming.InitialContext; import javax.naming.NamingException; import cn.itm.ejb3.HelloWorld; public class EJBTest { /** * @param args */ public static void main(String[] args) { try { InitialContext ic = new InitialContext( ); HelloWorld hw = (HelloWorld) ic.lookup("HelloWorldBean/remote"); // 不在同一个jvm类 只能通过远程。 String message = hw.sayHello("注入者"); System.out.println(message); } catch (NamingException e) { e.printStackTrace(); } } }
<?xml version="1.0" encoding="UTF-8"?> <!-- name中指的是项目名称。basedir指的是与build.xml的同级目录 --> <!-- (1)basedir 代表 项目所在的路径。 --> <project name="HelloWorld" basedir="."> <!-- 项目源文件 所在的目录。--> <property name="src.dir" value="${basedir}\src" /> <!-- 指向环境变量中系统变量 --> <property environment="env" /> <!-- 指向系统变量中的JBOSS_HOME变量 ,可以得知JBOSS_HOME的安装地址 --> <property name="jboss.home" value="${env.JBOSS_HOME}" /> <property name="jboss.server.config" value="default" /> <!-- class文件存在的目录 --> <property name="build.dir" value="${basedir}\build" /> <path id="build.classpath"> <!-- 包含 client路径下的所有 jar文件--> <fileset dir="${jboss.home}\client"> <include name="*.jar" /> </fileset> <pathelement location="${build.dir}" /> </path> <target name="prepare"> <delete dir="${build.dir}" /> <mkdir dir="${build.dir}" /> </target> <!-- depends="prepare" 确保 先执行上面的代码,在执行下面的代码 --> <target name="compile" depends="prepare" description="编译"> <!-- class 存放到 destdir这个目录。在调用javac 这个目录就必须建立起来--> <javac srcdir="${src.dir}" destdir="${build.dir}" > <classpath refid="build.classpath" /> </javac> </target> <target name="ejbjar" depends="compile" description="创建EJB发布包"> <jar jarfile="${basedir}\${ant.project.name}.jar"> <fileset dir="${build.dir}"> <include name="**/*.class" /> </fileset> </jar> </target> <target name="deploy" depends="ejbjar" description="发布ejb"> <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" /> </target> <target name="undeploy" description="卸载ejb"> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar" /> </target> </project>
第二种方式:通过注解:@EJB Other other;
package cn.itm.ejb3.impl; import javax.ejb.EJB; import javax.ejb.Local; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.naming.InitialContext; import javax.naming.NamingException; import cn.itm.ejb3.HelloWorld; import cn.itm.ejb3.HelloWorldLocal; import cn.itm.ejb3.Other; @Stateless // 指明EJB他是一个无状态的会话bean。 @Remote(HelloWorld.class) // @Local(HelloWorldLocal.class) // 如果客户端 和 EJB是部署在同一个 jboss 内,我们优先调用 本地接口。 public class HelloWorldBean implements HelloWorld,HelloWorldLocal{ @EJB Other other; public String sayHello(String name) { try { InitialContext ic = new InitialContext(); Other other = (Other)ic.lookup("OtherBean/local"); return name + "说:您好," + other.sayMe(); } catch (NamingException e) { e.printStackTrace(); } return name + "说:您好," + other.sayMe(); } }
测试类依旧用上面的。
package cn.itm.test; import javax.naming.InitialContext; import javax.naming.NamingException; import cn.itm.ejb3.HelloWorld; public class EJBTest { /** * @param args */ public static void main(String[] args) { try { InitialContext ic = new InitialContext( ); HelloWorld hw = (HelloWorld) ic.lookup("HelloWorldBean/remote"); // 不在同一个jvm类 只能通过远程。 String message = hw.sayHello("注入者"); System.out.println(message); } catch (NamingException e) { e.printStackTrace(); } } }
打印结果:注入者说:您好,Other。调用成功。
相关文章推荐
- 通过注解方式注入并使用其他EJB或者服务
- EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源
- EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源
- 通过注解方式在ejb中注入其它ejb或者服务
- 从头认识Spring-2.4 基于java的标准注解装配-@Inject(2)-通过set方法或者其他方法注入
- 从头认识Spring-2.3 注解装配-@autowired(2)-通过set方法或者其他方法注入
- Spring中使用注解的方式注入方式1
- 被事务代理的spring service 使用注解方式发布Dubbo服务
- MyBatis+Spring在注解@Autowried后通过反射的方式调用方法获取注入的Service或DAO对象为空
- Spring通过@Value注解注入属性的几种方式
- 继承hibernateDaoSupport之后通过注解方式注入SessionFactory
- 使用Spring的注解方式注入Struts所管理的action
- spring详解:使用注解方式注入属性
- 从头认识Spring-2.6 在注解中使用表达式@Value(2)-使用表达式注入其他对象的值
- Git 远程仓库(Github) Git 并不像 SVN 那样有个中心服务器。 目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要
- action控制层,使用spring注解方式注入业务bean报空指向错误
- Catalog以Local方式使用其他机器发布的ArcGIS Server地图服务
- spring使用注解通过子类注入父类的私有变量
- 继承hibernateDaoSupport之后通过注解方式注入SessionFactory
- 使用在控制器中的方法上添加注解的方式来对添加注解的方法执行前做一些预处理操作或者后处理操作