"type" 在 jsp 中使用 ejb 时无法解析为类型

"type" cannot be resolved to a type, while using ejb in jsp

我用的是 eclipse Neon。
我使用以下代码创建了简单的 EJB 项目:

package com.clientManager;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 * Session Bean implementation class ClientManager
 */
@Stateless
@LocalBean
public class ClientManager {

    /**
     * Default constructor. 
     */
    public ClientManager() {
        // TODO Auto-generated constructor stub
    }

    public String test() {
        return "test";
    }
}  

它自动创建并驻留在 ejbModule 文件夹中。
它使用 EJB 3.2 并在 WildFly 服务器上成功部署:

11:25:50,360 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) WFLYSRV0028: Stopped deployment Neoflex.jar (runtime-name: Neoflex.jar) in 9ms
11:25:50,370 WARN  [org.jboss.as.controller] (DeploymentScanner-threads - 2) WFLYCTL0357: Notification of type deployment-undeployed is not described for the resource at the address []
11:25:50,370 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) WFLYSRV0009: Undeployed "Neoflex.jar" (runtime-name: "Neoflex.jar")
11:25:55,380 INFO  [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) WFLYDS0004: Found Neoflex.jar in deployment directory. To trigger deployment create a file called Neoflex.jar.dodeploy
11:25:55,380 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-7) WFLYSRV0027: Starting deployment of "Neoflex.jar" (runtime-name: "Neoflex.jar")
11:25:55,400 INFO  [org.jboss.weld.deployer] (MSC service thread 1-6) WFLYWELD0003: Processing weld deployment Neoflex.jar
11:25:55,400 INFO  [org.jboss.as.ejb3.deployment] (MSC service thread 1-6) WFLYEJB0473: JNDI bindings for session bean named 'ClientManager' in deployment unit 'deployment "Neoflex.jar"' are as follows:

    java:global/Neoflex/ClientManager!com.clientManager.ClientManager
    java:app/Neoflex/ClientManager!com.clientManager.ClientManager
    java:module/ClientManager!com.clientManager.ClientManager
    java:global/Neoflex/ClientManager
    java:app/Neoflex/ClientManager
    java:module/ClientManager

11:25:55,523 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) WFLYSRV0010: Deployed "Neoflex.jar" (runtime-name : "Neoflex.jar")

现在我为将使用 EJB 的 JSP 页面创建了 DynamicWebProject:

<%@page import="com.clientManager.*"%>
<%
    ClientManager c = new ClientManager(); 
%>
<%= c.test() %>

我在 JSP 项目的构建路径中配置了 EJB 项目 (!)
请看截图。

当我发布 JSP 并访问页面 (main.jsp) 时,我有:

JBWEB004060: An error occurred at line: 3 in the jsp file: /main.jsp
ClientManager cannot be resolved to a type
1: <%@page import="com.clientManager.*"%>
2: <%
3:  ClientManager c = new ClientManager(); 
4: %>
5: <%= c.test() %>

怎么了?

您不应该直接实例化 EJB bean,而是由 EJB 容器管理它的生命周期,获取 EJB bean 句柄的正确方法是通过它的查找方法。

确保你选择了正确的查找名称,我随机使用了你的 post 尝试更改为如下内容。

<%
    ClientManager cm;
    cm = (ClientManager) ctx.lookup("java:module/ClientManager");
%>