EJB versus servlet

Hello everyone,
I'm hoping you can point me in the right direction. I'm looking for
articles or books that cover the pros and cons of implementing solutions
using EJBs and/or servlets. More specifically, when and where it makes the
most sense to use EJBs or servlets or both, and how the two compare. Also,
how well regarded are EJBs in the marketplace (seems to be a love/hate
relationship).
I've read some of Jason Hunter and Richard Monson-Haefel's older material
but I'm hoping you might know of (or have) something more recent.
Thanks in advance!
Joe

          Of course the best article is the one that Xiang suggested, J2EE blueprints.
          If you want something quickly to read, I enjoyed this one very much:
          "How to Build a Really Big Distributed J2EE System Using Tools You Have Around
          the Office"
          http://www.javasuccess.com/design_wp.html
          And of course this one:
          "J2EE Design Considerations for Weblogic Server"
          http://www.bea.com/products/weblogic/server/papers.shtml
          Regards,
          David
          "Joe Martins" <[email protected]> wrote:
          >Hello everyone,
          >
          >I'm hoping you can point me in the right direction. I'm looking for
          >articles or books that cover the pros and cons of implementing solutions
          >using EJBs and/or servlets. More specifically, when and where it makes
          >the
          >most sense to use EJBs or servlets or both, and how the two compare.
          > Also,
          >how well regarded are EJBs in the marketplace (seems to be a love/hate
          >relationship).
          >
          >I've read some of Jason Hunter and Richard Monson-Haefel's older material
          >but I'm hoping you might know of (or have) something more recent.
          >
          >Thanks in advance!
          >
          >Joe
          >
          >
          

Similar Messages

  • Access EJB from Servlet that in different archive?

    <font class="mediumtxt">package kyro.ejb.session;
    import javax.ejb.*;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    @Stateless(name="StandAlone")
    @Remote(StandAlone.class)
    public class StandAloneBean
    implements StandAlone, StandAloneLocal
    public StandAloneBean() {
    public String sayHello() {     
    return "sayHello";
    I want to access ejb from servlet that .war and .jar not in single .ear. I want to try that just with annotation not xml descriptor cause is easy to understand for me. I use Glassfish. But i can't lookup that ejb. How can i lookup that ejb with jndi? Can't you give me example of servlet to access that? I not use JNDI.properties, are that caused i can't access my ejb? I just thing .war and.jar in one server, are i have to used JNDI.properties. can you explain how to use JNDI.properties in servlet or separate file?
    </font>

    But i can't lookup that ejb. How are you trying and what exception is occurring?
    How can i lookup that ejb with jndi? [https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html|https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html]
    m

  • How to inject ejb in servlet

    hi all
    How to inject ejb in servlet ?
    please explain how to config my servlet and my paroject
    I have an ear file with two jar files
    Thanks in advance

    hi
    I have this error in my project
    I have an ear file ,two war file and three jar file in it
    and I did configuration
    but there was this error
    14:19:45,398 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[conference-servlet].[enterLet]] Allocate exception for servlet enterLet: javax.naming.NameNotFoundException: ITrmnlAuthenticationBL not bound
    @Remote
    public interface ITrmnlAuthenticationBL{
    @Stateless
    public class TrmnlAuthenticationBL implements ITrmnlAuthenticationBL{
    public class EnterLet extends HttpServlet {
         @EJB(mappedName = "ITrmnlAuthenticationBL")
         private ITrmnlAuthenticationBL trmnlMg;
    please explain my mistake

  • How to set classpath to EJB and Servlets

    Hi all,
    How can I add a classpath to EJB and Servlets in Weblogic 6.1, so that that classpath
    can be achieved by both EJB jar and war file? I have deployed a .ear file having
    the jar and war files. Now the EJBs inside the jar file are not reaching the class
    files of the war file and the class files in the war file are not reaching to
    the EJBs. Please let me know at the earliest.
    Atanu

    Hi.
    You might try looking at the petstore example which combines webapps (war files) with
    ejbs in an ear file to see how to do this. It may be a simple config problem.
    Regards,
    Michael
    Atanu Dey wrote:
    Hi all,
    How can I add a classpath to EJB and Servlets in Weblogic 6.1, so that that classpath
    can be achieved by both EJB jar and war file? I have deployed a .ear file having
    the jar and war files. Now the EJBs inside the jar file are not reaching the class
    files of the war file and the class files in the war file are not reaching to
    the EJBs. Please let me know at the earliest.
    Atanu--
    Michael Young
    Developer Relations Engineer
    BEA Support

  • Newbie ?: EJB vs servlets

    I'm just starting out teaching myself J2EE related technologies. I have extensive development experience in other environments. I've only dabbled in Java quite a few years ago.
    I have a general sense of the difference between EJB and servlets but couldn't find an official description/comparison in any of the FAQs that I've read. Could someone please compare and contrast the two technologies?
    Also, I'd welcome any tips/suggestions regarding my learning experience, including but not limited to:
    - suggested sequence of learning supporting/related technologies (e.g. Java, JSP, servlets, JavaBeans, EJB, JDBC, JavaServer Faces, CORBA, OOAD, UML etc.)
    - recommended/popular development tools/IDEs etc.
    - learning resources/books etc.
    I'm currently reading the free PDF version of "Core Servlets and JSP" by Marty Hall.
    Thanks,
    Gary White

    Few Diffs:-
    1. Servlets run in a web container and EJBs run in a EJB Container.
    2. Use of Servlets is thru HTTP protocol and EJBs by look-up(internally RMI-IIOP)
    3. Developers has to explicity code for dattabaase transaction and security. EJBs: Container will manage every thing.
    4. Mainly: Servlets are server side code that generate dydnamic web page content to display. But EJBs are reusable component run in container.
    The sequence is: Java, JavaBeans, JDBC, Servlets, JSP, JSF & EJB
    I recommened JCreator LE IDE as it is developed in VC++ which runs fast. But another powerfull IDE is the Eclipse.
    Books:
    Java. Thinking in Java, Sun Tutorial
    JSP & Servlets: the book you are following work fine
    EJB> Mastering EJB by Ed Romans

  • EJB and Servlets

    Hi there,
    A frontend processing of HTTP request that pass thru WebLogic server that make
    API calls thru tuxedo to the application servers that eventually running C, C++
    that retrieve data from a backend database of Oracle.
    Being the services of EJB and Servlets, EJB is more kind of processes inside the
    server but Servlets can handle better in request and respond (talk to the client),
    whats your opinions in this kind of integration? Go for pure EJB or Servlets?
    Or shall mixed matched? and how should the architecture should looks like?
    Thanks
    Neo

    Sorry, wrong question, just ignore it.

  • Whether java component (Not ejb, not servlet) can be deployed in App Server and get the services provided by App Server

    As I mentioned in subject, I am just wondering Whether the java component (Not
    ejb, not servlet) can be deployed in App Server and get the services provided
    by App Server or not?

    Nevermind folks - I got it to work. All my configuration was correct; I had other issues with the ejb-jar file that the verifier informed me of (my previous deployments were with the verifier turned-off).

  • EJB and Servlets on different clusters

              Say I set up two clusters, one for servlets and one for EJBs.
              To lookup to EJBs, the servlets must look up an initial context and provide a URL.
              Should the URL be hardcoded in the servlet to the EJB cluster name, or is there a way
              to specify this URL at a higher level?
              Can you specify something like this in the properties file?
              What's the best way to do this?
              Please advise,
              Dave
              

    David,
              How about specifying the EJB cluster URL in the servlets init argument in the
              weblogic.properties ??
              Sam
              David Mrozek wrote:
              > Say I set up two clusters, one for servlets and one for EJBs.
              > To lookup to EJBs, the servlets must look up an initial context and provide a URL.
              > Should the URL be hardcoded in the servlet to the EJB cluster name, or is there a way
              > to specify this URL at a higher level?
              > Can you specify something like this in the properties file?
              > What's the best way to do this?
              > Please advise,
              > Dave
              

  • Sequence of deployment for EJBs and Servlets....

    Is there any way to control the order in which weblogic 6.0 deploys EJBs
              and servlets?
              We have a few startup servlets which use EJBs, however, weblogic 6.0
              seems to start the Servlets before it deploys the EJBs and thus our
              servlets fail.
              Haider Abbas Kazmi - Java Mobile App. Developer
              [haider.kazmi.vcf]
              

    6.1 solves this problem:
              http://e-docs.bea.com/wls/docs61/adminguide/appman.html#1030797
              Haider Abbas Kazmi <[email protected]> wrote:
              > This is a multi-part message in MIME format.
              > --------------9AC9295410C7463D3A71C1A6
              > Content-Type: text/plain; charset=us-ascii
              > Content-Transfer-Encoding: 7bit
              > Is there any way to control the order in which weblogic 6.0 deploys EJBs
              > and servlets?
              > We have a few startup servlets which use EJBs, however, weblogic 6.0
              > seems to start the Servlets before it deploys the EJBs and thus our
              > servlets fail.
              > --
              > Haider Abbas Kazmi - Java Mobile App. Developer
              > --------------9AC9295410C7463D3A71C1A6
              > Content-Type: text/x-vcard; charset=us-ascii;
              > name="haider.kazmi.vcf"
              > Content-Transfer-Encoding: 7bit
              > Content-Description: Card for Haider Abbas Kazmi
              > Content-Disposition: attachment;
              > filename="haider.kazmi.vcf"
              > begin:vcard
              > n:Kazmi;Haider
              > tel;cell:(416)9864702
              > tel;fax:(416) 6434832
              > tel;work:(416) 3666425 x315
              > x-mozilla-html:FALSE
              > url:http://www.everypath.com/
              > org:Everypath Canada;Research & Development
              > adr:;;260 King St;Toronto;Ontario;M5A 4L5;Canada
              > version:2.1
              > email;internet:[email protected]
              > title:Java Mobile App. Developer
              > fn:Haider Kazmi
              > end:vcard
              > --------------9AC9295410C7463D3A71C1A6--
              Dimitri
              

  • Unable to access EJB from servlet

    Hi,
    I have in service method my servlet code.
    Hashtable env = new Hashtable();
                        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.ApplicationInitialContextFactory");
                        env.put(Context.PROVIDER_URL, "ormi://localhost/hello");
                        env.put(Context.SECURITY_PRINCIPAL, "admin");
                        env.put(Context.SECURITY_CREDENTIALS, "mypwd");
                        Context ctx = new InitialContext(env);
              Object obj = ctx.lookup("HelloName");
                        HelloHome home = (HelloHome) javax.rmi.PortableRemoteObject.narrow(obj, HelloHome.class);
                        Hello hello = home.create();
    this is how i have orion-ejb-jar.xml
         <enterprise-beans>
              <session-deployment name="Hello" location="HelloName" >
              </session-deployment>
         </enterprise-beans>
         ejb-jar.xml
              <session>
                   <ejb-name>Hello</ejb-name>
                   <home>examples.HelloHome</home>
                   <remote>examples.Hello</remote>
                   <local-home>examples.HelloLocalHome</local-home>
                   <local>examples.HelloLocal</local>
                   <ejb-class>examples.HelloBean</ejb-class>
                   <session-type>Stateless</session-type>
                   <transaction-type>Container</transaction-type>
              </session>
    When i access the servlet i get this error.
    javax.naming.NameNotFoundException: HelloName not found
         at com.evermind.server.rmi.RMIContext.lookup(RMIContext.java:149)
         at com.evermind.server.ApplicationContext.lookup(ApplicationContext.java:217)
         at com.evermind.server.ApplicationContext.lookup(ApplicationContext.java:88)
         at javax.naming.InitialContext.lookup(InitialContext.java:345)
         at examples.HelloServlet.service(Unknown Source)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:772)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
         at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:782)
         at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)
         at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186)
         at java.lang.Thread.run(Thread.java:479)
    Is location attribute in orion-ejb-jar.xml used to specify JNDI name? Can i get the JNDI tree showing the name mappings in oc4j? How do i correct this error?
    Ravi

    Ravi --
    The most portable and standards oriented solution is to define an ejb-ref in the web.xml for the servlet, and then look up the name using the formal EJB UNC model.
    web.xml:
    <ejb-ref>
    <ejb-ref-name>ejb/AppSessionFacadeHome</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <home>faqapp.ejb.AppSessionFacadeHome</home>
    <remote>faqapp.ejb.AppSessionFacade</remote>
    </ejb-ref>
    servlet lookup
    InitialContext ctx = new InitialContext();
    Object homeObject = ctx.lookup("java:comp/env/ejb/AppSessionFacadeHome");
    EJBHome ejbHome = (EJBHome)
    portableRemoteObject.narrow (homeObject, AppSessionFacadeHome.class);
    cheers
    -steve-

  • Ias support for EJB, JSP/servlets,JDBC, connection pooling, XML, SOAP, load balancing etc

    Please let me know where I can find more information regarding iPlanet usage/deployment/configuring/tuning etc for support of technologies - like EJB, JSP/servlets, JDBC, connection pooling, XML, load balancing, JDBC & Transactions
    (I have already read the 'Getting Started with the iPlanet Application Server' part five and six - http://developer.iplanet.com/appserver/testdrive/partfive.jsp and partsix.jsp)(I am using the ias testdrive version).

    Hi,
    It's difficult to explain unless the J2EE architecture is understood. Also, explaining things like load balancing, Transactions, tuning, are bit vague and could blow the disk space of this site.
    To get started, the best way is to test the sample applications and the best part is you don't require internet connection to follow each steps. Install iWS and iAS, open browser, type in http://hostname:port/ias-samples/index.html. You can find links to the sample applications bundled. Please follow the steps given on deploying the application. This will enable you to a higher level.
    Regards
    Ganesh .R
    Developer Technical Support
    Sun Microsystems
    http://www.sun.com/developers/support

  • Connecting to Remote EJB from Servlet in same application

    Please help!
    I was able to connect to SessionBeans and EJB from my sample java client in OCJ4 but when I try to do same thing from my web application using servlets, I get the below NullPointerException error.
    The JNDI lookup works fine using java client but difficult from a servlet.
    I am sure there is something I am missing.
    Thanks
    This is what I do in the servlet:
    public void init() throws ServletException, NamingException, CreateException, RemoteException
    Context jndiContext = getInitialContext();
    SessionCartEJBHome home = (SessionCartEJBHome)jndiContext.lookup("SessionCartEJBBean");
    sessionEJB = null;
    try{
    sessionEJB = (SessionCartEJB) home.create();
    }catch (Exception e)
    e.printStackTrace();
    private static Context getInitialContext() throws NamingException
    Hashtable env = new Hashtable();
    // Standalone OC4J connection details
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory");
    env.put(Context.SECURITY_PRINCIPAL, "admin");
    env.put(Context.SECURITY_CREDENTIALS, "admin");
    env.put(Context.PROVIDER_URL, "ormi://Princeton/ejb1");
    return new InitialContext(env);
    And when I call the following procedure, it blow up at the line sessionEJB.getLineItem(new Long(1304));
    sessionEJB is a class variable.
    void processCatalogPage(HttpServletRequest request,
    HttpServletResponse response,
    ActionMapping mapping,
    HttpSession session
    throws ServletException, IOException , Exception, FinderException{
    try {
    ActionForward actFor = null;
    String itemId = request.getParameter("id");
    if ( itemId != null ) {
    String[] itemIds = new String[1];
    itemIds[0] = itemId;
    sessionEJB.getLineItem(new Long(1304));
    actFor = mapping.findForward("catalog");
    return (mapping.findForward("success"));
    } catch (Exception ex)
    ex.printStackTrace();
    System.err.println(ex.toString());
    throw new EJBException(ex.toString());
    04/12/11 23:45:24 java.lang.NullPointerException
    04/12/11 23:45:24 at com.alashoofi.Cart.processCatalogPage(Cart.java:187)
    04/12/11 23:45:24 at com.alashoofi.Cart.execute(Cart.java:86)
    04/12/11 23:45:24 at org.apache.struts.action.RequestProcessor.processActi
    onPerform(RequestProcessor.java:484)
    04/12/11 23:45:24 at org.apache.struts.action.RequestProcessor.process(Req
    uestProcessor.java:274)
    04/12/11 23:45:24 at org.apache.struts.action.ActionServlet.process(Action
    Servlet.java:1482)
    04/12/11 23:45:24 at org.apache.struts.action.ActionServlet.doGet(ActionSe
    rvlet.java:507)
    04/12/11 23:45:24 at javax.servlet.http.HttpServlet.service(HttpServlet.ja
    va:740)
    04/12/11 23:45:24 at javax.servlet.http.HttpServlet.service(HttpServlet.ja
    va:853)
    04/12/11 23:45:24 at com.evermind.server.http.ServletRequestDispatcher.inv
    oke(ServletRequestDispatcher.java:765)
    04/12/11 23:45:24 at com.evermind.server.http.ServletRequestDispatcher.for
    wardInternal(ServletRequestDispatcher.java:317)
    04/12/11 23:45:24 at com.evermind.server.http.HttpRequestHandler.processRe
    quest(HttpRequestHandler.java:790)
    04/12/11 23:45:24 at com.evermind.server.http.HttpRequestHandler.run(HttpR
    equestHandler.java:270)
    04/12/11 23:45:24 at com.evermind.server.http.HttpRequestHandler.run(HttpR
    equestHandler.java:112)
    04/12/11 23:45:24 at com.evermind.util.ReleasableResourcePooledExecutor$My
    Worker.run(ReleasableResourcePooledExecutor.java:192)
    04/12/11 23:45:24 at java.lang.Thread.run(Thread.java:534)
    04/12/11 23:45:24 java.lang.NullPointerException
    Dec 11, 2004 11:45:24 PM org.apache.struts.action.RequestProcessor processExcept
    ion
    WARNING: Unhandled Exception thrown: class javax.ejb.EJBException

    Avi,
    Thanks for your response. I am actually returning a new InitialContext in a function call in the servlet. What I have noticed though is that JDeveloper creates two ear files for the application. One for the ejbs called ejb1.ear and another for the web files webapp1.ear. These are located in the applications subdirectory in OC4J directory.
    I know I have two projects in the application, model and viewController. I am just trying to follow the MVC pattern.
    In short, I don't think the web and the ejbs are in same ear file. I made the web project depend on the ejbs though. There is an option to set such. I don't know how to tell JDeveloper to put them all in one ear file.
    I will appreciate any suggestion.
    Thanks
    Matilda

  • Unable to call EJB from servlet

    Fillowing is my ejb module
    package univesity;
    import java.rmi.RemoteException;
    import javax.ejb.*;
    public interface EnrollmentCartHome extends javax.ejb.EJBHome
         EnrollementCartObject create() throws CreateException,RemoteException;
    package univesity;
    import java.rmi.RemoteException;
    public interface EnrollementCartObject extends javax.ejb.EJBObject
         public void addCourse(int courseID) throws RemoteException;
    package univesity;
    import java.rmi.RemoteException;
    import javax.ejb.CreateException;
    import javax.ejb.EJBException;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    public class EnrollementCartEJBBean implements SessionBean
         int courseID;
         public void ejbActivate() throws EJBException, RemoteException {
              // TODO Auto-generated method stub
         public void ejbPassivate() throws EJBException, RemoteException {
              // TODO Auto-generated method stub
         public void ejbRemove() throws EJBException, RemoteException {
              // TODO Auto-generated method stub
         public void setSessionContext(SessionContext arg0) throws EJBException,
                   RemoteException {
              // TODO Auto-generated method stub
         public void addCourse(int courseID)
              System.out.println("i am in add course");
              System.out.println("i am in add course--->"+courseID);
         public void ejbCreate() throws CreateException
              System.out.println("i am in ejbCreate");
              courseID=0;
    }ejb-jar.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
              "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
              <jndi-name>ejb/EnrollmentCartHome</jndi-name>
    <ejb-jar>
         <description>Simplest Statefull Session Bean</description>
         <display-name>University EJB</display-name>
         <enterprise-beans>
           <session>
             <ejb-name>Enrollement</ejb-name>
             <home>university.EnrollementCartHome</home>
             <remote>university.EnrollementCartObject</remote>
             <ejb-class>university.EnrollementCartEJBBean</ejb-class>
             <session-type>Statefull</session-type>
             <transaction-type>Bean</transaction-type>
           </session>
         </enterprise-beans>
    </ejb-jar>here is my servlet
    package university;
    import javax.naming.InitialContext;
    import javax.servlet.*;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class EnrollCourse extends javax.servlet.http. HttpServlet
         public void doGet(HttpServletRequest req,HttpServletResponse res)
         public void doPost(HttpServletRequest req,HttpServletResponse res)
              try {
                        InitialContext ic = new InitialContext();
                        Object objRef = ic.lookup("ejb/EnrollmentCartHome");
                        university.EnrollementCartHome home=(university.EnrollementCartHome)javax.rmi.PortableRemoteObject.narrow(objref, university.EnrollementCartHome.class);
                        university.EnrollementCartObject obj=(university.EnrollementCartObject)home.create();
                        obj.addCourse(5);
              catch (Exception ex)
              { ex.printStackTrace(); }
    }i am getting following error
    java.lang.Error: Unresolved compilation problems:
         university.EnrollementCartHome cannot be resolved to a type
         university.EnrollementCartHome cannot be resolved to a type
         objref cannot be resolved
         university.EnrollementCartHome cannot be resolved to a type
         university.EnrollementCartObject cannot be resolved to a type
         university.EnrollementCartObject cannot be resolved to a type
         university.EnrollCourse.doPost(EnrollCourse.java:24)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
         org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

    Thanks for your continuous reply
    i solved all problems i have posted but now i am facing new problem that "EJB is already registerd"
    giving you stack trace
    15:21:22,109 WARN  [ServiceController] Problem creating service jboss.j2ee:module=UniversityProjectEJBModule.jar,uid=22223562,service=EjbModule
    javax.management.InstanceAlreadyExistsException: jboss.j2ee:jndiName=ejb/EnrollmentCartHome,service=EJB already registered.
         at org.jboss.mx.server.registry.BasicMBeanRegistry.add(BasicMBeanRegistry.java:761)
         at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:225)
         at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
         at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
         at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
         at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
         at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
         at org.jboss.mx.server.MBeanServerImpl$3.run(MBeanServerImpl.java:1422)
         at java.security.AccessController.doPrivileged(Native Method)
         at org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:1417)
         at org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:376)
         at org.jboss.ejb.EjbModule.createService(EjbModule.java:373)
         at org.jboss.system.ServiceMBeanSupport.jbossInternalCreate(ServiceMBeanSupport.java:260)
         at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:243)
         at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
         

  • Security Problem when call EJB in servlet:[Security:090398]Invalid Subject

    Hi guys,
    I have several years experience with Java and EJB developing,but still I cann't explain this problem although I already knew the fix...
    Please,can anyone help me to explain why? Thanks very much!
    Ok,the problem is when I call a remote EJB in one method ,that is everything about EJB is in one method,then everything is ok.But when I just return the
    *remote service object from an helper class's static method, and call the service in servlet ,then I get java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[sundan076],which sundan076 is username login into the web application.*
    The right way, call method directCall(param) ; The wrong way, call  method staticToolCall(final Map param) .
    public class EJBServletClient extends HttpServlet
         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
              this.doPost(request, response);
         protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
                   IOException
              try
                   Map<String, String> param = new HashMap<String, String>();
                   param.put("CTS_CUSTOMER_ID", request.getParameter("CTS_CUSTOMER_ID"));
                   param.put("CTS_TASK_ID", request.getParameter("CTS_TASK_ID"));
                   param.put("SERIALNO", request.getParameter("SERIALNO"));
                   param.put("CUSTOMER_SERVICE_UM", request.getParameter("CUSTOMER_SERVICE_UM"));
                   Map result = this.directCall(param);
                   System.out.println(result);
              } catch (Exception e)
                   e.printStackTrace();
                   throw new ServletException(e);
         private Map directCall(Map param) throws Exception
              Context context = null;
              try
                   Properties p = new Properties();
                   p.put(Context.PROVIDER_URL, "t3://10.25.32.13:31256");
                   p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
                   p.put(Context.SECURITY_PRINCIPAL, "username");
                   p.put(Context.SECURITY_CREDENTIALS, "password");
                   context = new InitialContext(p);
                   BizApplyServiceHome home = (BizApplyServiceHome) PortableRemoteObject.narrow(
                             context.lookup("ejb/rcs-css/BizApplyService"), BizApplyServiceHome.class);
                   BizApplyService bizApplyService = home.create();
                   return bizApplyService.modifyApplyCustomerInfo(param);
              } finally
                   if (context != null)
                        context.close();
         private Map staticToolCall(final Map param) throws Exception
              BizApplyService bizApplyService = EJBTool.getBizApplyService();
              return bizApplyService.modifyApplyCustomerInfo(param);
    public class EJBTool
         public static BizApplyService getBizApplyService() throws Exception
              Context context = null;
              try
                   Properties p = new Properties();
                   p.put(Context.PROVIDER_URL, "t3://10.25.32.13:31256");
                   p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
                   p.put(Context.SECURITY_PRINCIPAL, "username");
                   p.put(Context.SECURITY_CREDENTIALS, "password");
                   context = new InitialContext(p);
                   BizApplyServiceHome home = (BizApplyServiceHome) PortableRemoteObject.narrow(
                             context.lookup("ejb/rcs-css/BizApplyService"), BizApplyServiceHome.class);
                   return home.create();
              } finally
                   if (context != null)
                        context.close();
    java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[sundan076]
         at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:234)
         at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348)
         at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)
         at com.pingan.rcs.css.biz.service.remote.ejb.bizApplyService_u7jjbk_EOImpl_1032_WLStub.modifyApplyCustomerInfo(Unknown Source)
         at com.pingan.pafax.web.EJBServletClient.staticToolCall(EJBServletClient.java:80)
         at com.pingan.pafax.web.EJBServletClient.doPost(EJBServletClient.java:43)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
         at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
         at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
         at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
         at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3594)
         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
         at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202)
         at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108)
         at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
    Caused by: java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[sundan076]
         at weblogic.security.service.SecurityServiceManager.seal(SecurityServiceManager.java:835)
         at weblogic.security.service.SecurityServiceManager.getSealedSubjectFromWire(SecurityServiceManager.java:524)
         at weblogic.rjvm.MsgAbbrevInputStream.getSubject(MsgAbbrevInputStream.java:315)
         at weblogic.rmi.internal.BasicServerRef.acceptRequest(BasicServerRef.java:875)
         at weblogic.rmi.internal.BasicServerRef.dispatch(BasicServerRef.java:310)
         at weblogic.rmi.cluster.ClusterableServerRef.dispatch(ClusterableServerRef.java:242)
         at weblogic.rjvm.RJVMImpl.dispatchRequest(RJVMImpl.java:1138)
         at weblogic.rjvm.RJVMImpl.dispatch(RJVMImpl.java:1020)
         at weblogic.rjvm.ConnectionManagerServer.handleRJVM(ConnectionManagerServer.java:240)
         at weblogic.rjvm.ConnectionManager.dispatch(ConnectionManager.java:882)
         at weblogic.rjvm.MsgAbbrevJVMConnection.dispatch(MsgAbbrevJVMConnection.java:453)
         at weblogic.rjvm.t3.MuxableSocketT3.dispatch(MuxableSocketT3.java:322)
         at weblogic.socket.BaseAbstractMuxableSocket.dispatch(BaseAbstractMuxableSocket.java:298)
         at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:915)
         at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:854)
         at weblogic.socket.EPollSocketMuxer.dataReceived(EPollSocketMuxer.java:215)
         at weblogic.socket.EPollSocketMuxer.processSockets(EPollSocketMuxer.java:177)
         at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
         at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)
         at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
    Edited by: 993478 on 2013-3-12 下午8:40

    I tried your way,it works! Still ,does anyone know why staticToolCall() raised exception?
    By the way,here is the code as you suggested:
    public class EJBServletClient extends HttpServlet
         protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
                   IOException
              Context context = null;
              try
                   Map<String, String> param = new HashMap<String, String>();
                   param.put("CTS_CUSTOMER_ID", request.getParameter("CTS_CUSTOMER_ID"));
                   param.put("CTS_TASK_ID", request.getParameter("CTS_TASK_ID"));
                   param.put("SERIALNO", request.getParameter("SERIALNO"));
                   param.put("CUSTOMER_SERVICE_UM", request.getParameter("CUSTOMER_SERVICE_UM"));
                   //Map result = this.staticToolCall(param);
                   Properties p = new Properties();
                   p.put(Context.PROVIDER_URL, "t3://10.25.32.13:31256");
                   p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
                   p.put(Context.SECURITY_PRINCIPAL, "username");
                   p.put(Context.SECURITY_CREDENTIALS, "password");
                   context = new InitialContext(p);
                   Map result=EJBTool.modifyApplyCustomerInfo(context, param);
                   System.out.println(result);
              } catch (Exception e)
                   e.printStackTrace();
                   throw new ServletException(e);
              }finally
                   if (context != null)
                        try{context.close();} catch (NamingException e){e.printStackTrace();}
    public class EJBTool
         public static Map modifyApplyCustomerInfo(Context context, Map param) throws Exception
              BizApplyServiceHome home = (BizApplyServiceHome) PortableRemoteObject.narrow(
                        context.lookup("ejb/rcs-css/BizApplyService"), BizApplyServiceHome.class);
              BizApplyService bizApplyService = home.create();
              Map result = bizApplyService.modifyApplyCustomerInfo(param);
              return result;
    }

  • Reference EJB from servlet's action/helper classes

    Hello
    How to make a reference to stateless session bean from one of the helper classes of a servlet WITHOUT using any of these:
    * dependency injection (like @EJB) - I think this is not supported in this kind of class, EJB references can be injected only to servlets themselves or some other things (but not objects of classes "accompanying" a servlet)
    * home or local home interfaces (I would like to avoid writing them)
    * using mappedName (either in @Stateless or in ejb-jar) - since meaning of this is application-server dependent and thus not portable.
    By a "class accompanying a servlet" / "helper class" I mean utility or action classes, like MyActionClass, which would be instantiated and then used by a aforementioned servlet.
    Thanks.

    The EJB dependency must be looked up via the java:comp/env namespace since as you point out
    Java EE 5 environment annotations are not supported on POJOs. However, the dependency itself
    can either be defined using @EJB on some other managed class in the .war or within the
    web.xml. We have an entry in our EJB FAQ that has the details :
    https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#POJOLocalEJB
    Also, whenever the client component resides in the same application as the target EJB (which is
    required for Local access but not for Remote access) there is no need to use mappedName to
    resolve the EJB dependency. It is either automatically resolved if the business interface type of
    the EJB dependency is only exposed by a single EJB in the application, OR the beanName()
    / ejb-link attributes can be used to unambiguously identify the target EJB using ejb-name.
    You can find more about this in the FAQ as well.

Maybe you are looking for

  • Integration of client machines into Win2003 DC

    Hi everyone, we have a eDirectory and ZW 7 environment with server based profiles and Windows XP client machines. Everythings just fine at the moment but now we want to integrate the client machines with a newly set up Windows 2003 SP 2 Domain Contro

  • How do i change to another task when an exercise is running in Garageband?

    When i played an exercise and want to change by example sound settings from system preferences, i cannot change to System preferences, the dock isn't there so i can only exit the lesson and later on start it again.

  • Automatic Goods Receipt from for a Plant

    Hi Experts        We are doing shipment from one plant to another plant. Now my requirement is, when i do PGI(Post Goods Issue) activity from one plant to   other plant using VL02N, i need to do automatic GR for other plant.          The PO number wi

  • Can items from Spotlight be deleted?

    Hi One more question for the day before I go sleep. I can open FCP projects from Spotlight but I can not delete them. Is there a way to do this. Good night. Faruk.

  • Pls help me in debugging!

    Hi experts, I am poor in ABAP debugging skills i am in need of learning debugging can somebody help me in learning debugging skills below i am pasting some code generated after i executed RSRT debug can someone explain the meaning of this code. QUERY