b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

EJB client读取EJB3 的问题

电脑杂谈  发布时间:2019-09-05 18:01:51  来源:网络整理

ejb3 programmer guide_programmer 壁纸_programmer

看到一篇文章《EJB3.0入门---第一个程序,HelloWorld!》

第一步:

新建一个项目.这个工程为EJB模块.

新建一个接口,名为HelloWorld.java,代码如下:

HelloWorld.java 代码

package com.sample.ejb3;

public interface HelloWorld {

public String SayHello(String name);

}

然后新建一个无关态会话Bean,一般的命名规则是:接口名+Bean。实现里面的接口要加入两个注释@Remote和@Stateless。

@Stateless表示无状态会话Bean,@Remote表示这个无状态会话Bean的remote接口。。无状态会话Bean 是一个简单的POJO(纯粹的面向对象思想的java 对象),EJB3.0 容器自动地实例化及管控这个Bean。HelloWorldBean.java代码如下:

HelloWorldBean.java 代码

package com.sample.ejb3.impl;

import com.sample.ejb3.HelloWorld;

import javax.ejb.Remote;

programmer_ejb3 programmer guide_programmer 壁纸

import javax.ejb.Stateless;

@Stateless

@Remote ({HelloWorld.class})

public class HelloWorldBean implements HelloWorld {

public String SayHello(String name) {

return name +"说:Hello World.";

}

}

这样,就把EJB模块研发完成!可以公布到Jboss中去,(注意:Jboss的版本要在4.0.5以上,以前的版本或许发生报错现象)。 第二步:开了一个客户端来访问这个EJB。当一个无状况会话Bean 发布到EJB 容器时,容器都会为她建立一个对象stub,并把她注册进容器的JNDI 目录,客户端代码使用她的JNDI 名从容器获取他的stub。通过这个stub,客户端可以读取她的业务技巧。例子代码如下:index.jsp代码如下:

index.jsp 代码

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@ page import="com.sample.HelloWorld, javax.naming.*, java.util.Properties"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

programmer 壁纸_programmer_ejb3 programmer guide

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JSP Page</title>

</head>

<body>

<h2>

<%

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");

//props.setProperty("", "");

System.getProperties();

try{

InitialContext ctx=new InitialContext(props);

ejb3 programmer guide_programmer 壁纸_programmer

HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

out.println(helloworld.SayHello("大家"));

}

catch(Exception ex){

out.println(ex.getMessage());

}

%>

</h2>

</body>

</html>

然后部署到服务器上ejb3 programmer guide,访问这个页面!

有如下疑问:

你在客户端是借助新建一个工程ejb3 programmer guide,然后访问EJB的,但客户端的com.sample.HelloWorld接口并没有定义啊,执行<%@ page import="com.sample.HelloWorld>可能会报错吧,因为你也是在EJB模块中定义了com.sample.ejb3.HelloWorld,而在客户端没有定义com.sample.HelloWorld接口。

执行 HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

应该会报HelloWorld cannot be resolved to a type 的异常。

programmer_ejb3 programmer guide_programmer 壁纸

是不是楼主在客户端也定义了com.sample.HelloWorld接口,这个接口跟EJB模块的com.sample.ejb3.HelloWorld接口完全一样?

问题补充:

lizhi92574 写道

你说的没错,客户端需要com.sample.ejb3.HelloWorld 接口。一般都是服务器吧相应接口打个jar包给客户端使用。

但是在令一篇文章《EJB client调用EJB3》中看到, 如果是公布在jboss的web app作为client来调用EJB,不需要把EJB 的接口类放入/WEB-INF/classes/目录中,否则在调用Stateful Bean 就会出现类型冲突,引发以下的例外

java.lang.ClassCastException: $Proxy84

org.apache.jsp.StatefulBeanTest_jsp._jspService(org.apache.jsp.StatefulBeanTest_jsp:55) ,那这种的话EJB Client如何获取EJB接口的定义呢?

问题补充:

lizhi92574 写道

那也是对于EBJ 和 web应用在同一环境下而言。其他环境都应该提供相应接口。

同一环境指的是哪个?都部署在同一台机器上的jboss里算是同一环境下吗?

问题补充:

lizhi92574 写道

是的·

可是这种一旦不提供EJB接口类的class的话client还是会报错啊


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-121816-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      每日福利
      热点图片
      拼命载入中...