错误:java.lang.IllegalStateException(EJB3,jboss7.1)

时间:2014-06-25 18:14:39

标签: java ejb-3.0

问题因为我用servlet调用远程接口的方法,但是当我使用java项目时,调用在void main()中成功。 映射成功。

EJB项目(01_CatalogueEJB)

class Produit

package metier;
import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Produit implements Serializable{
@Id
@GeneratedValue
private long idProduit;
private String nomProduit;
private double prix;


public long getIdProduit() {
    return idProduit;
}
public void setIdProduit(long idProduit) {
    this.idProduit = idProduit;
}
public String getNomProduit() {
    return nomProduit;
}
public void setNomProduit(String nomProduit) {
    this.nomProduit = nomProduit;
}
public double getPrix() {
    return prix;
}
public void setPrix(double prix) {
    this.prix = prix;
}
public Produit() {
    super();
    // TODO Auto-generated constructor stub
}
public Produit(String nomProduit, double prix) {
    super();
    this.nomProduit = nomProduit;
    this.prix = prix;
}


 }

接口远程

package metier;
import java.util.List;
import javax.ejb.Remote;

@Remote
public interface ICatalogueRemote {
public void addProduit(Produit p);
public List<Produit> getAllproduits();
public List<Produit> getProduitParMC(String mc);
public Produit getProduit(long idproduit);
public void removeProduit(long idproduit);
public void updateProduit(Produit p);
 }

界面本地

package metier;
import java.util.List;
import javax.ejb.Local;
@Local
public interface ICatalogueLocal {

public void addProduit(Produit p);
public List<Produit> getAllproduits();
public List<Produit> getProduitParMC(String mc);
public Produit getProduit(long idproduit);
public void removeProduit(long idproduit);
public void updateProduit(Produit p);
}

会话bean

package metier;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Stateless(name="CAT")
public class CatalogueEJBImp implements ICatalogueLocal,ICatalogueRemote{
@PersistenceContext(unitName="UP_CAT")
private EntityManager em;

@Override
public void addProduit(Produit p) {     em.persist(p);  }

@Override
public List<Produit> getAllproduits() {
    Query req=em.createQuery("select p from Produit p");
    return req.getResultList();
}

@Override
public List<Produit> getProduitParMC(String mc) {
    Query req=em.createQuery("select p from Produit p where p.nomProduit like :x");
    req.setParameter("x", "%"+mc+"%");
    return req.getResultList();
}

@Override
public Produit getProduit(long idproduit) {
    Produit p=em.find(Produit.class, idproduit);
    return p;
}

@Override
public void removeProduit(long idproduit) {
    Produit p=em.find(Produit.class, idproduit);
    em.remove(p);
}

@Override
public void updateProduit(Produit p) {
    Produit p1=em.find(Produit.class, p.getIdProduit());
    p1.setNomProduit(p.getNomProduit());
    p1.setPrix(p.getPrix());
    em.persist(p);
}

 }

的persistence.xml

  <?xml version="1.0" encoding ="UTF-8"?>
 <persistence>
<persistence-unit name="UP_CAT">
<jta-data-source>java:/dsCatalogue</jta-data-source>
    <properties>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>
 </persistence>

动态网络项目(01CatalogueEJB_web) 我使用页面index.jsp来调用servlet&#34; AjouterProduit&#34;

servlet AjouterProduit

import java.io.IOException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import metier.ICatalogueRemote;
import metier.Produit;

@WebServlet("/AjouterProduit")
public class AjouterProduit extends HttpServlet {
private static final long serialVersionUID = 1L;

public AjouterProduit() {        super();    }

String appname="";String moduleName="01_CatalogueEJB";
String distinctName="CAT";String viewclassName=ICatalogueRemote.class.getName();


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    try{
        Context ctx=new InitialContext();
        String ejbRemoteJNDIName="ejb:"+appname+"/"+moduleName+"/"+distinctName+"!"+viewclassName;
        ICatalogueRemote stub=(ICatalogueRemote)ctx.lookup(ejbRemoteJNDIName);
        stub.addProduit(new Produit("HP", 8000));
        stub.addProduit(new Produit("DELL", 9000));
        stub.addProduit(new Produit("ACER", 6000));
        stub.addProduit(new Produit("SONY", 10000));

    }catch (NamingException e) {    e.printStackTrace();    }
}

}

文件jboss-ejb-client.properties

  endpoint.name=client-endpoint
  remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
  remote.connections=default
  remote.connection.default.host=127.0.0.1
  remote.connection.default.port = 4447
  remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
  remote.connection.default.username=ram
  remote.connection.default.password=azerty

档案jndi.properties

java.naming.factory.url.pkgs=org.jboss.ejb.client.naming

我使用servlet时的异常:

 16:08:53,374 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/01CatalogueEJB_web].[AjouterProduit]] (http-localhost-127.0.0.1-8080-2) "Servlet.service()" pour la servlet AjouterProduit a généré une exception: java.lang.IllegalStateException: No EJB receiver available for handling [appName:,modulename:01_CatalogueEJB,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1005412e
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at com.sun.proxy.$Proxy17.addProduit(Unknown Source)
at AjouterProduit.doPost(AjouterProduit.java:30)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_45]

映射成功:

19:02:19,816 INFO  [org.jboss.modules] JBoss Modules version 1.1.1.GA
19:02:20,178 INFO  [org.jboss.msc] JBoss MSC version 1.0.2.GA
19:02:20,278 INFO  [org.jboss.as] JBAS015899: JBoss AS 7.1.1.Final "Brontes" starting
19:02:21,556 INFO  [org.xnio] XNIO Version 3.0.3.GA
.............................................
...............................................

java:global/01_CatalogueEJB/CAT!metier.ICatalogueRemote
java:app/01_CatalogueEJB/CAT!metier.ICatalogueRemote
java:module/CAT!metier.ICatalogueRemote
java:jboss/exported/01_CatalogueEJB/CAT!metier.ICatalogueRemote
java:global/01_CatalogueEJB/CAT!metier.ICatalogueLocal
java:app/01_CatalogueEJB/CAT!metier.ICatalogueLocal
java:module/CAT!metier.ICatalogueLocal
................................................
................................................

 19:02:24,033 INFO  [org.jboss.as] (MSC service thread 1-3) JBAS015951: Admin console listening on http://127.0.0.1:9990
  19:02:24,035 INFO  [org.jboss.as] (MSC service thread 1-3) JBAS015874: JBoss AS 7.1.1.Final     "Brontes" started in 4749ms - Started 223 of 304 services (78 services are passive or on-demand)
 19:02:24,093 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed  "01_CatalogueEJB.jar"
 19:02:24,094 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "01CatalogueEJB_web.war"

0 个答案:

没有答案