【问题标题】:Get NullPointerException in java EE application on Intellij Idea IDE在 Intellij Idea IDE 上的 java EE 应用程序中获取 NullPointerException
【发布时间】:2014-04-09 17:18:55
【问题描述】:

我正在尝试运行这个简单而小型的应用程序,但我不明白问题出在哪里以及如何解决它。

这里是代码。这很简单。客户端应用程序调用的一个 bean,以便在客户端打印出众所周知的消息 Hello World。我使用 Intellij Idea 13.0.3 IDE 和 Server GlassFish 4.0.0、Java JDK 8.0 和 Java EE 7 创建了应用程序。

编辑

我认为我收到这些错误是因为我没有正确部署我的应用程序。我找到了一个指南,说在 netbeans 环境中创建客户端应用程序后,您必须执行插入代码 -> 调用 Enterprise Bean。现在我怎样才能在 Intellij Idea 上做同样的事情?


package myejb;

import javax.ejb.Remote;

@Remote
public interface HelloBeanRemote
{
    public String sayHello(String name);
}

package myejb;

import javax.ejb.Stateless;

@Stateless
public class HelloBean implements HelloBeanRemote
{
    @Override
    public String sayHello(String name)
    {
        return "Hello, " + name + "!";
    }
}

和客户端应用程序

package myejbclient;

import javax.ejb.EJB;
import myejb.HelloBeanRemote;

public class HelloClient
{
    @EJB
    private static HelloBeanRemote helloBean;

    public static void main(String[] args)
    {
        HelloClient client = new HelloClient();
        client.doConversation();
    }

    public void doConversation()
    {
        System.out.println(helloBean.sayHello("World"));
    }
}

我执行 glassfish 来部署应用程序。它已正确部署,但是当我运行客户端应用程序时,我收到以下错误消息:

Exception in thread "main" java.lang.NullPointerException
    at myejbclient.HelloClient.doConversation(HelloClient.java:27)
    at myejbclient.HelloClient.main(HelloClient.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

EDIT2

在安装了 GlassFish 的 Netbeans IDE 中,相同的代码就像一个魅力。

Netbeans IDE

【问题讨论】:

  • 如果您要否决其他答案,您需要解释为什么其他答案不够好。 @arTsmarT 是正确的,你没有为你分配任何东西,你甚至没有 27 行代码(关于错误回溯),所以我猜你没有显示你的整个代码。
  • 你在这里看到的所有代码都相信我。我第二次重复,当您使用 Java EE 时,您没有实例化任何东西。这是证明netbeans.org/kb/docs/javaee/entappclient.html的指南
  • 如果我按照该指南在 Netbeans 中运行和部署此代码,一切正常,但是当我在 IntelliJ Idea 上执行时它不起作用。可见是IDE的问题
  • 以上截图证明代码在Netbeans上运行。我想在 Intellij Idea 中运行相同的代码。我能怎么做?如果您没有任何从事 Intellij Idea 工作的经验,我认为您无法帮助我
  • 从容器外运行的客户端应用程序访问 EJB 并不容易。你需要一个ACC。有关更多信息,请参阅此答案:stackoverflow.com/a/15488335/870122。此外,您需要熟悉如何在 IDE 中运行 jar。

标签: jakarta-ee intellij-idea javabeans glassfish-4


【解决方案1】:

您尚未将 hello 分配给已实例化的任何内容。

【讨论】:

  • 这个答案似乎是正确的,或者至少解决了一个重要问题,但它被否决了。
  • 如果你这么说那你就不知道java ee是怎么工作的。这是一个指南netbeans.org/kb/docs/javaee/entappclient.html你没有实例化任何东西所以这个答案是错误的
  • 正如您在指南中看到的那样 MySessionRemote 是一个接口,对象 mySession 未实例化。
  • 这可能是答案,而不仅仅是批评。该问题没有足够的信息。
  • 如果您告诉我您需要哪些信息来更好地帮助我,我将很乐意为您提供。我再说一遍,这不是代码问题,因为相同的代码在 Netbeans 中运行正确。问题是 Intellij Idea 的工作方式与 Netbeans 完全不同。
【解决方案2】:

在您客户的代码中,您可以随时将引用分配给您的 hello 服务。

当您在应用服务器中将其用作 glassfish、jboss 等时,容器会读取注解并插入可用的 EJB。

对于您的客户,您需要Application Client Container 或自行搜索参考

从 Glassfish 常见问题解答How do I access a Remote EJB ... 你需要 InitialContext,如果需要你需要配置服务器和端口

使用 ACC,您需要创建一个企业项目并在您的服务器中部署,Netbeans 的一个简单示例可以帮助您:https://netbeans.org/kb/docs/javaee/entappclient.html

【讨论】:

    猜你喜欢
    • 2019-04-08
    • 2013-04-23
    • 2019-05-09
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 2015-08-20
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多