2011-12-06 7 views
0

:ここに貼り付けることがどのようなコード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> 
} 

ここに私のプロジェクト構造です:

enter image description here

+0

EJBがサーブレットにどのように注入されているか、EJB(たとえばweb.xml)のJNDIバインディングに関連する追加の設定を確認すると便利です。あなたのEJBが期待されるJNDI名にバインドされていないか、Webプロジェクト内の参照が正しく設定されていないと思われます。 –

+0

お返事ありがとうございます。私はweb.xmlとアクションクラスを追加しました。 – 0xSina

+0

この情報は役に立ちません。前述のように、EJBがサーブレットにどのように注入されているかを確認する必要があります。あなたは実際にこのコードが何をしているのか理解していますか?あなたの立場をよりよく理解するために、あなたのコードですか?それとも他の誰かのプロジェクトですか、あなたは深く投げ込まれていますか?それとも、あなたが既に個別に理解していないインターネット上で見つけた、コピーした断片の完全に石畳の断片ですか? – BalusC

答えて

1

さて、あなたは、私は次の情報を取得することができます提供してきた情報から:

  • あなたはあなたが4つのEJBの
  • を注入サーブレット、OPRSystem.javaを持っているGlassfishの
  • を使用していますあなたのパッケージ名は忌み嫌いです - それらはすべて小文字にする必要があります)また、スタックトレースを読みにくくします(OPRSystem.OPRSystemは奇妙な内部クラスの配列のように見えます)
  • EJBは@EJB (アノテーションに属性が使用されていません)
  • web.xmlファイルにはEJB参照がありません。
  • あなたのアプリケーションが(おそらく他の人にも失敗しますAgent EJBを注入するために失敗している
  • (それが前提です)@Remote
  • でアノテートあなたのEJBが同じEARに配備されている、これはただすべき最初のものであることを起こります注入された)
  • ルックアップに失敗したJNDI名はjava:comp/env/OPRSystem.OPRSystem/agentです。

ターゲットEJBコンポーネントが内部に定義されている場合:デフォルトのEJB-REFフィールドに@EJBを使用して、同じFAQによれば<fully-qualified name of declaring class>/<field-name>

  • あるようGlassfish EJB FAQによれば、これは、正しい基準であります参照先のコンポーネントが と同じアプリケーションであり、 に関連付けられたリモートインタフェースを公開するアプリケーション内にターゲットEJBコンポーネントが1つだけある場合は、マッピングが自動的に行われます。 この場合、追加のマッピング 情報を指定する必要はありません。

  • あなたのEJBが同じアプリケーションにデプロイされていることを確認できますか?

    また、サーバーログで正しく起動しているという証拠を確認できますか?

    +0

    はい、EJBは同じアプリケーションにデプロイされています。私の元の質問をチェックして、私はそれを編集しました。 – 0xSina

    +0

    'Agent'はEJBであり、' AgentLocal'は 'Agent'が実装する(ローカル)インターフェースです。これは、1)クラスレベルのアノテーションを含むエージェントEJBクラス、2)実装するインタフェースクラス、3)任意のEJBバインディングファイル(例えば、sun-ejb-jar.xml) –