1

我正在为 Eclipse 使用 GlassFish 工具包

我需要创建一个 bean 和一个测试它的客户端。bean(及其接口)如下。

package mykPK;

import java.math.BigDecimal;
import javax.ejb.*;

@Stateless
public class ConverterBean implements Converter {
    private BigDecimal yenRate = new BigDecimal("115.3100");

    private BigDecimal euroRate = new BigDecimal("0.0071");

    public BigDecimal dollarToYen(BigDecimal dollars) {
        BigDecimal result = dollars.multiply(yenRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
    public BigDecimal yenToEuro(BigDecimal yen) {
        BigDecimal result = yen.multiply(euroRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
}

界面:

package mykPK;

import java.math.BigDecimal;
import javax.ejb.Remote;

@Remote
public interface Converter {
    public BigDecimal dollarToYen(BigDecimal dollars);
    public BigDecimal yenToEuro(BigDecimal yen);
}

我在 EJB 项目中正确创建它们并“作为服务器”运行它们。一切似乎都开始正确。

现在我想创建一个客户端。我尝试将客户端放在同一个项目中,创建一个不同的项目(“应用程序客户端项目”),甚至创建一个具有两个子项目的更通用的“E 应用程序项目”。结果是一样的。

现在,客户端代码如下

import java.math.BigDecimal;
import javax.ejb.EJB;
import mykPK.Converter; /*of course to to that, i reference in the client project the 
EJB project*/

public class ConverterClient {
    @EJB private static Converter converter;

    public ConverterClient(String[] args) {
    }
    public static void main(String[] args) {
        ConverterClient client = new ConverterClient(args);
        client.doConversion();
    }
    public void doConversion() {
        try {
            BigDecimal param = new BigDecimal("100.00");
            BigDecimal yenAmount = converter.dollarToYen(param);
            System.out.println("$" + param + " is " + yenAmount
                    + " Yen.");
            BigDecimal euroAmount = converter.yenToEuro(yenAmount);
            System.out.println(yenAmount + " Yen is " + euroAmount
                    + " Euro.");
            System.exit(0);
        } catch (Exception ex) {
            System.err.println("Caught an unexpected exception!");
            ex.printStackTrace();
        }
    }
}

当我运行这个文件时,我总是得到相同的结果:

Caught an unexpected exception!
java.lang.NullPointerException
    at ConverterClient.doConversion(ConverterClient.java:17)
    at ConverterClient.main(ConverterClient.java:12)

我想这是因为我的客户端不在 bean 的同一个容器中,并且它没有“部署”(我只是运行文件)。但是当我尝试更通用的“企业应用项目”时,结果是一样的)

那么,将客户端放在哪里并让他访问(使用@EJB) Bean?

4

3 回答 3

0

这个工作的一个很好的例子可以在这里找到 打包你的客户端以与 glassfish 的应用程序客户端容器一起使用(通过“appclient”命令),就像将它打包为一个独立的 Java 应用程序一样。

于 2011-05-27T23:46:15.760 回答
0

堆栈跟踪表明您已直接启动 main 方法。为了在主类中使用注入,您必须使用应用程序客户端容器

于 2010-12-11T17:34:54.820 回答
0

您正在尝试注入非托管对象。您需要获取初始上下文并进行查找。

几乎和这里一样: 使用 InitialContext.lookup() 方法找不到我的 bean

于 2010-12-06T21:58:14.647 回答