:ここに貼り付けることがどのようなコードJava EE NameNotFoundException;私は私のJava EE Webアプリケーションからこの注入/ JNDIルックアップエラーを取得しています
type Exception report
message
descriptionThe server encountered an internal error() that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: PWC1392: Error instantiating servlet class OPRSystem.OPRSystem
root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class OPRSystem.OPRSystem
root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=OPRSystem.OPRSystem/agent,Remote 3.x interface =AccountManager.Agent,ejb-link=null,lookup=,mappedName=,jndi-name=AccountManager.Agent,refType=Session into class OPRSystem.OPRSystem: Lookup failed for 'java:comp/env/OPRSystem.OPRSystem/agent' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
root cause
javax.naming.NamingException: Lookup failed for 'java:comp/env/OPRSystem.OPRSystem/agent' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=OPRSystem.OPRSystem/agent,Remote 3.x interface =AccountManager.Agent,ejb-link=null,lookup=,mappedName=,jndi-name=AccountManager.Agent,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'AccountManager.Agent#AccountManager.Agent' [Root exception is javax.naming.NamingException: Lookup failed for 'AccountManager.Agent#AccountManager.Agent' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: AccountManager.Agent#AccountManager.Agent not found]]]
root cause
javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=OPRSystem.OPRSystem/agent,Remote 3.x interface =AccountManager.Agent,ejb-link=null,lookup=,mappedName=,jndi-name=AccountManager.Agent,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'AccountManager.Agent#AccountManager.Agent' [Root exception is javax.naming.NamingException: Lookup failed for 'AccountManager.Agent#AccountManager.Agent' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: AccountManager.Agent#AccountManager.Agent not found]]
root cause
javax.naming.NamingException: Lookup failed for 'AccountManager.Agent#AccountManager.Agent' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: AccountManager.Agent#AccountManager.Agent not found]
root cause
javax.naming.NameNotFoundException: AccountManager.Agent#AccountManager.Agent not found
わからない、おかげで、私に知らせてください。
ここに私のweb.xmlです:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>OPRSystem</servlet-name>
<servlet-class>OPRSystem.OPRSystem</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OPRSystem</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
これは、EJBをintanties私のアクションクラスである:
package OPRSystem;
import AccountManager.Agent;
import AccountManager.Customer;
import AccountManager.Owner;
import RentalManager.FinancialInstitution;
import javax.servlet.http.HttpServletRequest;
/**
*
* @author ssome
*/
public abstract class Action {
private final String successpage;
private final String failpage;
protected Agent agent;
protected Customer customer;
protected Owner owner;
protected FinancialInstitution fi;
public Action(String success, String fail) {
this.successpage = success;
this.failpage = fail;
}
public abstract String perform(HttpServletRequest req);
/**
* @return the successpage
*/
public String getSuccesspage() {
return successpage;
}
/**
* @return the failpage
*/
public String getFailpage() {
return failpage;
}
/**
* @param agent the agent to set
*/
public void setAgent(Agent agent) {
this.agent = agent;
}
/**
* @param customer the customer to set
*/
public void setCustomer(Customer customer) {
this.customer = customer;
}
/**
* @param owner the owner to set
*/
public void setOwner(Owner owner) {
this.owner = owner;
}
/**
* @param fi the fi to set
*/
public void setFi(FinancialInstitution fi) {
this.fi = fi;
}
}
は、ここに私のOPRSystemクラスです:
package OPRSystem;
import AccountManager.Agent;
import AccountManager.Customer;
import AccountManager.Owner;
import RentalManager.FinancialInstitution;
import java.io.IOException;
import java.util.HashMap;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="OPRSystem", urlPatterns={"*.do"})
public class OPRSystem extends HttpServlet {
@EJB
private Agent agent;
@EJB
private Customer customer;
@EJB
private Owner owner;
@EJB
private FinancialInstitution fi;
private HashMap<String,Action> actions;
@Override
public void init() throws ServletException {
java.util.Date date = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
java.sql.Time sqlTime = new java.sql.Time(date.getTime());
agent.createAdmin(sqlDate, sqlTime);
actions = new HashMap<String,Action>();
LoginAction la = new LoginAction("/Welcome.jsp", "/index.jsp");
la.setAgent(agent);
la.setCustomer(customer);
la.setOwner(owner);
actions.put("login", la);
}
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String next = "";
String op = getOperation(request.getRequestURL());
Action act = actions.get(op);
if (act != null) {
next = act.perform(request);
}
// Get the dispatcher
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(next);
if (dispatcher != null)
dispatcher.forward(request, response);
}
public String getOperation(StringBuffer requestURL) {
int lastslash = requestURL.lastIndexOf("/");
int lastdot = requestURL.lastIndexOf(".");
String op = requestURL.substring(lastslash+1, lastdot);
return op;
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
ここに私のプロジェクト構造です:
EJBがサーブレットにどのように注入されているか、EJB(たとえばweb.xml)のJNDIバインディングに関連する追加の設定を確認すると便利です。あなたのEJBが期待されるJNDI名にバインドされていないか、Webプロジェクト内の参照が正しく設定されていないと思われます。 –
お返事ありがとうございます。私はweb.xmlとアクションクラスを追加しました。 – 0xSina
この情報は役に立ちません。前述のように、EJBがサーブレットにどのように注入されているかを確認する必要があります。あなたは実際にこのコードが何をしているのか理解していますか?あなたの立場をよりよく理解するために、あなたのコードですか?それとも他の誰かのプロジェクトですか、あなたは深く投げ込まれていますか?それとも、あなたが既に個別に理解していないインターネット上で見つけた、コピーした断片の完全に石畳の断片ですか? – BalusC