EJB实现本地接口怎么会报错,已经引用接口了

错误提示:15:09:35,206 ERROR [[jsp]] Servlet.service() for servlet jsp threw exceptionorg.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 14 in the jsp file: /test.jspHelloWorld cannot be resolved to a type11: <%12: try{13: InitialContext ctx= new InitialContext();14: HelloWorld helloworld =(HelloWorld) ctx.lookup("HellloWorld.local");15: out.println(helloworld.sayHello("sss"));16: }catch(NamingException e){17: out.println(e.getMessage());An error occurred at line: 14 in the jsp file: /test.jspHelloWorld cannot be resolved to a type11: <%12: try{13: InitialContext ctx= new InitialContext();14: HelloWorld helloworld =(HelloWorld) ctx.lookup("HellloWorld.local");15: out.println(helloworld.sayHello("sss"));16: }catch(NamingException e){17: out.println(e.getMessage());
麻烦大神们解决一下!!!!

首先,我们看一下下面这张图片,了解一下通过远程调用接口的过程,从而知道远程调用接口和本地调用的区别,从而能够更好的 根据不同的情况而不同的方式调用EJB。

前面我们已经说了怎么开发远程调用的无状态的会话bean,所以现在我们就讲一下本地接口的无状态bean的开发吧。首先我们可以直接套用前面的例子,稍微做一下修改,让大家在了解开发本地调用接口的同时能够更好的发现他们之间的区别。

(1)当然,一开始我们就应该先新建一个java项目,然后我们新建一个本地接口,继承前面的远程接口HelloWorld.java的方法。让不管是本地接口调用或者是远程接口调用,其效果保持一致。

Helloworldlocal.java代码
package com.ejb;

public interface HelloWorldLocal extends HelloWorld{

}

(2)新建一个EJB。

Helloworldbean.java代码
package com.ejb.impl;

import javax.ejb.Local;
import javax.ejb.Stateless;
import com.ejb.HelloWorldLocal;
import com.ejb.Other;

@Stateless //表示无状态会话 , 一定要记得这两个注解
@Local(HelloWorldLocal.class)//标识本地接口,默认也是为本地接口,括号中说明的是此时实现的是哪个接口
public class HelloWorldBean implements HelloWorldLocal {
@Override
public String sayHello(String name) {
return name + "说:Hello,世界!" ;
}
}

3)新建一个web项目EJB_HelloWorldClient,然后新建一个jsp文件。

Index.jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="javax.naming.*, com.ejb.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>EJB本地客户端调用</title>
</head>

<body>
<%
try {
//在new这个工厂的时候,他会自动寻找jndi.properties
InitialContext ctx = new InitialContext();
HelloWorldLocal helloWorld = (HelloWorldLocal) ctx.lookup("HelloWorldBean/local");//调用本地接口
out.println(helloWorld.sayHello("本地人"));
} catch (NamingException e) {
e.printStackTrace();
}
%>
</body>
</html>
4)此时因为项目没有包含那些接口,肯定会报错,所以需要把之前的java项目引入。

5)然后两个项目都部署到同一个jboss中。然后在浏览器中访问。

本地无状态会话Bean开发就是这么简单。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-16
接口名必须一致。类名一致。包名一致。
第2个回答  2013-09-16
ctx.lookup()中间应该是 HelloWorldBean/local 吧追问

这个自己看了,改了,,也不行,

追答

你项目是分开部署的前后台,还是整体部署的项目,要是整体部署的话还要在前面加个项目名

相似回答