我是J2EE / EJB领域的新手,我正在尝试使用JSP模块调用的无状态远程EJB3模块部署和运行一个简单的项目。
这里有你的bean的远程业务接口
package converter.ejb;
import java.math.BigDecimal;
import javax.ejb.Remote;
@Remote
public interface Converter {
public BigDecimal dollarToYen(BigDecimal dollars);
public BigDecimal yenToEuro(BigDecimal yen);
}
这里有你的bean的代码:
package converter.ejb;
import java.math.BigDecimal;
import javax.ejb.Stateless;
@Stateless
public class ConverterBean implements Converter {
private BigDecimal yenRate = new BigDecimal("83.0602");
private BigDecimal euroRate = new BigDecimal("0.0093016");
@Override
public BigDecimal dollarToYen(BigDecimal dollars) {
BigDecimal result = dollars.multiply(yenRate);
return result.setScale(2, BigDecimal.ROUND_UP);
}
@Override
public BigDecimal yenToEuro(BigDecimal yen) {
BigDecimal result = yen.multiply(euroRate);
return result.setScale(2, BigDecimal.ROUND_UP);
}
}
这两个类部署在一个包“converter.ejb”和一个jar文件“converter-ejb.jar”中
我想从这个JSP页面访问我的bean
<%@page import="java.util.Properties"%>
<%@ page import="converter.ejb.Converter,java.math.*,javax.naming.*"%>
<%!private Converter converter = null;
public void jspInit() {
try {
InitialContext ic = new InitialContext();
converter = (Converter) ic.lookup(Converter.class.getName());
} catch (Exception ex) {
System.out.println("Couldn't create converter bean."
+ ex.getMessage());
}
}
public void jspDestroy() {
converter = null;
}%>
<html>
<head>
<title>Converter</title>
</head>
<body bgcolor="white">
<h1>Converter</h1>
<hr>
<p>Enter an amount to convert:</p>
<form method="get">
<input type="text" name="amount" size="25"> <br>
<p>
<input type="submit" value="Submit"> <input type="reset"
value="Reset">
</form>
<%
String amount = request.getParameter("amount");
if (amount != null && amount.length() > 0) {
BigDecimal d = new BigDecimal(amount);
BigDecimal yenAmount = converter.dollarToYen(d);
%>
<p>
<%=amount%>
dollars are
<%=yenAmount%>
Yen.
<p>
<%
BigDecimal euroAmount = converter.yenToEuro(yenAmount);
%>
<%=yenAmount%>
Yen are
<%=euroAmount%>
Euro.
<%
}
%>
</body>
</html>
部署在另一个jar文件“converter-jsp.jar”中。
我在运行时执行期间遇到异常,说无法找到包“converter.ejb”和类“Converter”。
请帮帮我。
更新
我用这种结构打包了我的应用程序:
converter-ejb.jar
├── converter
│ └── ejb
│ ├── ConverterBean.class
│ └── Converter.class
└── META-INF
├── ejb-jar.xml
├── MANIFEST.MF
└── sun-ejb-jar.xml
converter-jsp.war
├── index.jsp
├── META-INF
│ └── MANIFEST.MF
└── WEB-INF
├── classes
├── lib
└── sun-web.xml
converter-jsp-app.ear
├── converter-ejb.jar
├── converter-jsp.war
└── META-INF
├── application.xml
└── MANIFEST.MF
我正在使用Eclipse IDE,编译converter-jsp项目的唯一方法是添加对项目converter-ejb的引用。运行我的jsp应用程序的唯一方法是创建一个EAR项目,其中包含对converter-ejb.jar文件和converter-jsp.war文件的引用。
我想知道我是否可以在不创建新的EAR项目的情况下部署我的应用程序,但同时保持EJB与JSP代码分离。我试图在converter-jsp项目中添加对converter-ejb.jar文件的引用,但在运行时我得到一个异常,说无法找到Converter类。
更新2
Oracle Application Deployment Guide的第39页描述了我想要实现的目标。我想在应用程序服务器上部署所有不同的模块并运行应用程序,而无需创建和部署“EAR”应用程序。
更新3 我不知道我想做什么是否可能。但我认为使用RMI远程调用远程EJB上的方法就好了。
答案 0 :(得分:1)
您的converter-jsp.jar
应该将ejb接口作为依赖项。我建议将接口放在不同的包中,并将它们作为jsp jar的依赖项。
这些是否部署在不同的EAR / WAR文件中?你能描述一下包装结构吗?
如果您更新问题,我会相应更新我的答案。