gpt4 book ai didi

java - 简单单例 EJB 示例

转载 作者:行者123 更新时间:2023-11-30 06:21:20 28 4
gpt4 key购买 nike

我正在学习 EJB,并使用 GlassFish 4 编写了一个示例程序,但由于某些原因它无法正常工作。

index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="javax.ejb.EJB" %>
<%@ page import="ejbtest.utility.Utility" %>
<%@ page import="ejbtest.action.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EJB Test</title>
</head>
<body>
<%
try {
Utility utility = new Utility();
out.println("count: " + utility.getCount() + "<br/><br/>");
Trigger1 trigger1 = new Trigger1();
out.println("trigger1 count: " + trigger1.getTriggerCount());
} catch (NullPointerException npe) {
out.println("Nullpointer caught");
}
%>
</body>
</html>

Utility.java:

package ejbtest.utility;

import javax.ejb.Singleton;
import javax.ejb.Startup;

@Startup
@Singleton
public class Utility {

int count;

public Utility() throws NullPointerException {
count = 0;
count++;
}

public int getCount() {
return count;
}

public void setCount(int count) {
this.count = count;
}
}

Trigger1.java:

package ejbtest.action;

import ejbtest.utility.Utility;
import javax.faces.bean.ApplicationScoped;
import javax.inject.Inject;

@ApplicationScoped
public class Trigger1 {

@Inject
Utility utility;

public Integer getTriggerCount() {
return utility.getCount();
}

}

不需要的输出:

count: 1

Nullpointer caught

最佳答案

首先,您在标准 JVM 中启动您的 EJB。但是 EJB 只能存在于 EJB 容器中。当您仅使用 main 方法启动应用程序时,将忽略所有 EJB 注释。您需要像 glassfish 或 JBoss 这样的应用程序服务器来测试您的应用程序。
这里是您改进的示例:

Trigger1.java

package ejbtest.action;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import ejbtest.utility.Utility;

@Stateless
public class Trigger1 {

@EJB
private Utility utility;

public Integer getTriggerCount() {
return utility.getCount();
}
}

Utility.java

package ejbtest.utility;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;

@Singleton
public class Utility {
int count = 0;

@PostConstruct
public void init() {
count++;
}

public int getCount() {
return count;
}

public void setCount(int count) {
this.count = count;
}
}

index.jsp

<%@page import="ejbtest.action.Trigger1"%>
<%@page import="ejbtest.utility.Utility"%>
<%@page import="javax.naming.InitialContext"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EJB Test</title>
</head>
<body>
<%
InitialContext ic = new InitialContext();
Utility utility = (Utility) ic.lookup("java:module/Utility");
out.println("count: " + utility.getCount() + "<br/><br/>");
Trigger1 trigger1 = (Trigger1) ic.lookup("java:module/Trigger1");
out.println("trigger1 count: " + trigger1.getTriggerCount());
%>
</body>
</html>

关于java - 简单单例 EJB 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678056/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com