【问题标题】:How to create a Remote EJB Bean using Glassfish 4?如何使用 Glassfish 4 创建远程 EJB Bean?
【发布时间】:2014-12-10 22:15:32
【问题描述】:

我正在使用另一个简单项目中使用的 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)

还有什么应该包括的吗?

【问题讨论】:

  • EJB 应用程序部署在 Glassfish 服务器上,第二个是简单的 java 应用程序。

标签: java jakarta-ee netbeans glassfish ejb-3.2


【解决方案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 项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多