0

我正在使用另一个简单项目中使用的 bean 创建一个新的 EJB 项目。我正在使用带有 Glassfish 4.0 的 NetBeans 7.4。这是我的 EJB 项目的接口和实现:

DbBeanInt.java

package com.ejb;

import javax.ejb.Remote;

@Remote
public interface DbBeanInt {
    public void test(String asd);
}

DbBean.java

package com.ejb;

import javax.ejb.*;

@Stateless(name = "DbBean", mappedName="B")
@Remote
public class DbBean implements DbBeanInt{

@Override
public void test(String asd) {
    System.out.println(asd);
}
}

这是我调用它的代码。我在这个项目的库中包含了 EJB 项目。

package bookstoreclient;

import com.ejb.DbBeanInt;
import javax.ejb.EJB;

public class BookStoreClient {

@EJB
private static DbBeanInt db;

public static void main(String[] args) {
    db.test("Test");  
} 
}

但是,当我运行此应用程序时,我得到:

Exception in thread "main" java.lang.NullPointerException
at bookstoreclient.BookStoreClient.main(BookStoreClient.java:12)

还有什么应该包括的吗?

4

1 回答 1

1

DbBean 类和 DbBeanInt 接口看起来没问题。但 BookStoreClient 类不正确。

您正在使用 @EJB “注入” EJB 代理与远程 EJB 通信。您只能将“托管 Bean”(EJB 是由 EJB 容器管理的托管 Bean)注入“托管 Bean”。而且您的 BookStoreClient 类不是托管 bean,因为您使用 main() 方法启动它。

我在 GitHub 上创建了一个存储库,向您展示您的问题的有效示例: https ://github.com/StefanHeimberg/stackoverflow-27411885

只需克隆它并使用 Netbeans 打开 _27411885。

在这个存储库中,您将找到带有 DBService Bean 和 DBServiceRemote 接口的 db-ejb 项目。还有一个 DBServiceIT 使用嵌入式 glassfish 在本地无接口视图 (@LocalBean) 上测试 DBService。

db-client 项目只是远程调用 DBService bean。确保首先使用 glassfish 部署(“运行”)db-ejb 项目。

于 2015-02-05T22:33:59.270 回答