EJB学习日志

EJB学习日志第一天:经典的:HelloWord 1. 编写helloword接口packagecom.ejb;publicinterfaceHelloWord{ publicStringsayHello(Stringname);}2.HelloWord的实现packagecom.ejb.impl;importjavax.ejb.Remote;impor

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

第一天:

经典的:HelloWord 

1. 编写helloword接口

package com.ejb;

public interface HelloWord {

 public String sayHello(String name);
}

2.HelloWord的实现

package com.ejb.impl;

import javax.ejb.Remote;
import javax.ejb.Stateless;

import com.ejb.HelloWord;

@Stateless
// 声明这个bean是无状态的会话bean  Stateless 声明这个bean是有状态的会话bean 两种状态的会话bean 代码没多大区别 但在调用的时候 他们俩个在对bean的管理的技术是不一样的  无状态bean使用实例池技术管理bean  有状态bean使用激活(activation)管理bean
/**
 *
@Remote 注释指明实现的接口是远程接口,
 *  @Local 注释指明实现的接口是本地接口。
 *  当@Local 和@Remote 注释都不存在时,会话 Bean 实现的接口默认为 Local接口。
 *  如果在本地用 EJB(确保客户端与 EJB 容器运行在同一个 JVM),采用 Local 接口访问 EJB 优于 Remote 接口,
 *  因为 Remote接口访问 EJB 需要经过远程方法调用(RPCs)环节,而 Local 接口访问 EJB 直接从 JVM 中返回 EJB 的引用。
 */
@Remote(HelloWord.class)
// 指定远程接口 可以不写 默认是 本地接口
public class HelloWordBean implements HelloWord {

 @Override
 public String sayHello(String name) {

  // TODO Auto-generated method stub
  return name + “说: 你好!!!”;
 }

}

 

3.把上面的类打包成*.jar 如helloword.jar 放到jboss的\server\default\deploy文件下 运行jboss

4.编写测试类

package com.ejb.test;

import java.util.Properties;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.ejb.HelloWord;

public class EJBCilent {

 /**
  *
  * @param args
  */
 public static void main(String[] args) {

  Properties properties = new Properties();
  // java.naming.factory.initial 固定写法 有JNDI规定 也是JNDI也是java的一种规范
  // org.jnp.interfaces.NamingContextFactory jboss的JNDI连接工厂
  properties.setProperty(“java.naming.factory.initial”,
    “org.jnp.interfaces.NamingContextFactory”);
  // 设置连接命名服务器的url java.naming.provoder.url 也是由JNDI规定

//localhost:1099 jboss的连接字符串

//1099  jndi的端口 jboss的命名服务端口  不是jboss端口 测试该例子是 端口号是9090 自己修改
  properties.setProperty(“java.naming.provider.url”, “localhost:1099”);
  /**
   * 如果应用服务器不是jboss的话 上面两项要查看应用服务器的帮助文档 看上面2个key对应的值
   */
  try {

   InitialContext initialContext = new InitialContext(properties);
   // 设置完JNDI得上下文信息之后 可以调用lookup方法 去寻找HelloWordBean/remote绑定的对象 并返回客户端
   /**
    * 如果把EJB应用打包成*.jar文件后,默认的JNDI全局名称是 :<br>
    * 1 本地接口 EJB_CLASS_NAME/local <br>
    * 2:远程接口:EJB_CLASS_NAME/remote
    */
   /**
    * 如果把EJB应用打包成*.ear的java企业应用文件 默认全局JNDI的名称是:<br>
    * 1:本地接口:EAR_FILE_BASE_NAME/EJB_CLASS_NAME/local<br>
    * 2:远程接口:EAR_FILE_BASE_NAME/EJB_CLASS_NAME/remote
    */
   HelloWord helloWord = (HelloWord) initialContext
     .lookup(“HelloWordBean/remote”);
   System.out.println(helloWord.sayHello(“hxy”));
  //为了测试helloWord对象不是本例的helloword类的实例对象  可输出代理对象的类名  结果是$Proxy0
   HelloWordBean hello = new HelloWordBean();
   System.out.println(helloWord.getClass().getName());
   System.out.println(hello.getClass().getName());
  } catch (NamingException e) {

   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

 

还可以通过一个properties属性文件来设置JNDI  在项目的src目录下创建jndi.properties文件 并写入

   java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

   java.naming.provider.url=localhost:1099

 

这样main方法就可以直接这样写了 它会自己默认去找jndi.properties文件  就像Struts.xml文件一样

public static void main(String[] args) {

  try {

   InitialContext initialContext = new InitialContext();
   HelloWord helloWord = (HelloWord) initialContext
     .lookup(“HelloWordBean/remote”);
   System.out.println(helloWord.sayHello(“哈哈”));
  } catch (NamingException e) {

   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 

如果调用 HelloWord helloWord = (HelloWord) initialContext.lookup(“HelloWordBean/remote”)报错 空值或者异常找不到EJB 可以进入到jboss的localhost主页 在JMX console    jboss栏位中的service=JNDIView   java.lang.String list()栏位中 invoke按钮   在Global JNDI Namespace 栏位里可以找到自己发布的EJB应用 如果没有 就是EJB没发不好 如果有的话 就要看客户端的环境设置 和代码  还有就是把jboss的包全部在重新导入一遍

 第二天:

EJB注解

    @EJB EJB实现的接口 实例名称  如@EJB HelloWord  helloword

  如果以个接口被2个或者2个以上的EJB实现 那么可以用 @EJB(beanName=”EJBName”) EJB实现的接口  实例的名字   但是 如果一个接口被不在同一个包 但是EJB的类名是一样的 又该怎么注解呢  不过这种事情貌似不怎么会发生 蛋疼的问题 嘎嘎   如果要注解jboss自己内置的EJB的话 就要是使用@resource 命令 如 @Resource TimerService timerService   @Resource(mappedName=”数据源的jndi名称 调用方法 java:xxxx”) DataSource datasource

 

配置jboss数据源 在jboss_home/docs/examples/jca 的文件夹下有各种数据源的配置方案 本例一mysql为例 复制一份mysql_ds.xml  并修改里面的配置项 像url uid pwd driver 这些相信都看的懂  里面的 jndi-name  就上上面dataSource中mappedName中 java:xxx  xxxx的名字  这个可以自定义  还有不要mysql的jar包  一定要放在server里使用的那个服务器中的lib目录里而不是jboss_home的lib目录    配置*_ds.xml数据源文件之后放到server中使用服务器类型的deploy的目录里 这个文件包的名字也是有规则的  如mysql_ds.xml  hxy_ds.xml  jboss默认_ds.xml为默认的数据源配置 上面完成之后需要重新启动jboss  然后可以再控制台看到connectionManager’jboss.jca.service=dataSourceBinding,name=上面该文件jndi-name标签里的值’ to JNDI name’java:上面该文件jndi-name标签里的值’  jboss中 一java开头的JNDI 只能是就boos内部调用  重启jboss之后 进入到jboss的主页 在点击  jmx-console 在jboss.jca一栏中可以看到数据源的属性  在managerdConnectionPool可以对数据源进行详细的设置 如连接数 连接最大值 最小值等

怎么有两个:

20:37:58,591 INFO  [DLQ] Bound to JNDI name: queue/DLQ
20:37:58,761 INFO  [ConnectionFactoryBindingService]
BoundConnectionManager’jboss.jca:service=ConnectionFactoryBinding,name=JmsXA’ to JNDI name ‘java:JmsXA’

20:37:58,815 INFO  [ConnectionFactoryBindingService] BoundConnectionManager‘jboss.jca:service=DataSourceBinding,name=hxy_mysql_DS’ to JNDI name ‘java:hxy_mysql_DS’


20:37:59,311 INFO  [JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.stateless.StatelessContainer

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187680.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java定时器的几种实现方式

    java定时器的几种实现方式1前言在开始正题之前,先闲聊几句。有人说,计算机科学这个学科,软件方向研究到头就是数学,硬件方向研究到头就是物理,最轻松的是中间这批使用者,可以不太懂物理,不太懂数学,依旧可以使用计算机作为自己谋生的工具。这个规律具有普适应,看看“定时器”这个例子,往应用层研究,有Quartz,SpringSchedule等框架;往分布式研究,又有SchedulerX,ElasticJob等分布式任务调度;往底层实现看,又有多种定时器实现方案的原理、工作效率、数据结构可以深究…简单上手使用一个框架,并不能体

    2022年7月8日
    54
  • intellij idea 怎么查看方法在哪里被调用_进入接口

    intellij idea 怎么查看方法在哪里被调用_进入接口在接口的左边有个向下的小箭头,点击小箭头就能看到接口的实现类和方法的实现:在实现类的左边有个向上的小箭头,可以查看被实现的接口和被覆盖重写的方法:

    2022年8月15日
    14
  • 回归算法应用场景实例二十则「建议收藏」

    回归算法应用场景实例二十则「建议收藏」回归算法应用场景实例二十则

    2022年4月21日
    42
  • EVE-NG模拟器教程(二)——模拟器安装

    EVE-NG模拟器教程(二)——模拟器安装上一篇文章已经介绍了如何获取EVS-NG模拟器安装包,同时我们知道EVS-NG提供两种类型的安装包,一种是OVF包,另一种是ISO镜像文件,我们可以根据不同需要选择不同类型的安装包,这里我们已经把最新的两种类型的安装包都准备好了,如下,EVE-COMM-VM-112为OVF包,EVE-20171007为ISO镜像文件:接下来就分别介绍一下这两种类型安装包的使用场景和使用方法。一、通过OVF包安装EVS-NG模拟器…

    2022年5月29日
    43
  • 软件著作权申请流程_如何申请软件著作权

    软件著作权申请流程_如何申请软件著作权现在越来越多的安卓市场需要软著才能注册或者是才能上线,申请软著势在必行。最简单的方式,简单的准备资料,找第三方代理,不过这样可能花费数百毛爷爷,如果是急需加急,可能是几千。现在简单说一下自己申请的流程:首先贴出中国版权保护中心网站中国版权保护中心:http://apply.ccopyright.com.cn/cpcc/column_list_bqdj.jsp请使用IE浏览器打开一.注册

    2022年9月23日
    4
  • 基于Java swing+mysql+eclipse的【图书管理系统】

    基于Java swing+mysql+eclipse的【图书管理系统】一、效果演示:主要功能:①基本数据维护:图书类别管理>>图书类别添加、图书类别维护图书管理>>图书添加、图书维护②关于我们1、登录界面2、主界面:3、图书类别维护4、图书类别添加5、图书维护6、图书添加7、关于我们可全部缩小到左下角二、核心代码:1、Util包【存放数据库连接工具】①DBTool(数据库连接工具类)packagecn.ac.azure.util;importjava.io.IOException

    2022年6月9日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号