[jboss-user] [Beginners Corner] - problem in EJB example in JBoss 4.0.5 or JBoss 4.2.1

vkviswanadh do-not-reply at jboss.com
Fri Sep 21 13:53:17 EDT 2007


Hi all, I am a new bie in JBoss world. I am trying to run a small application which prints current time .

I am trying to do this work using EJB 2.0 and JSP.

I created a jar file which is having EJB class files as well as ejb deployment descriptors, JBoss required DDs. (i.e., ejb-jar.xml and jboss.xml)

Then I made a jsp page which contains a JNDI call from that to access the EJB Home interface (normal EJB client call).With this I prepared a war file with all the required DD files (web.xml etc).

Now I prepared a ear file with jar file and war file , application.xml file and trying to deploy the application in JBoss. Once it was deployed in the server (deploying properly with out throwing any error), and trying to call the jsp page from browser

http://localhost:8080/test/firstEJB.jsp 

it is throwing error at the browser as 

-----------------------------------------------------------------------------
org.apache.jasper.JasperException: An exception occurred processing JSP page /firstEJB.jsp at line 14

11:         props.put(Context.PROVIDER_URL, "localhost:1099");
12: 
13:     Context ctx = new InitialContext(props);
14:     FirstHome home = (FirstHome)ctx.lookup("ejb/First");
15:     First bean = home.create();
16:     String time = bean.getTime();
17:     bean.remove();


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:518)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


root cause 

javax.servlet.ServletException: java.lang.LinkageError: loader constraints violated when linking javax/ejb/Handle class
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:855)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:784)
	org.apache.jsp.firstEJB_jsp._jspService(firstEJB_jsp.java:94)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:387)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


root cause 

java.lang.LinkageError: loader constraints violated when linking javax/ejb/Handle class
	java.lang.Class.getDeclaredFields0(Native Method)
	java.lang.Class.privateGetDeclaredFields(Class.java:2232)
	java.lang.Class.getDeclaredField(Class.java:1852)
	java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1555)
	java.io.ObjectStreamClass.access$600(ObjectStreamClass.java:47)
	java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:381)
	java.security.AccessController.doPrivileged(Native Method)
	java.io.ObjectStreamClass.(ObjectStreamClass.java:373)
	java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:268)
	java.io.ObjectStreamClass.initProxy(ObjectStreamClass.java:464)
	java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1502)
	java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1457)
	java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
	java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
	java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
	java.rmi.MarshalledObject.get(MarshalledObject.java:135)
	org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:72)
	org.jnp.interfaces.NamingContext.lookup(NamingContext.java:652)
	org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
	javax.naming.InitialContext.lookup(InitialContext.java:351)
	org.apache.jsp.firstEJB_jsp._jspService(firstEJB_jsp.java:68)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:387)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
-----------------------------------------------------------------------------------

my EJBHOme is 
------------------
package com.stardeveloper.ejb.session;

import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

// Referenced classes of package com.stardeveloper.ejb.session:
//            First

public interface FirstHome
    extends EJBHome
{

    public abstract First create()
        throws CreateException, RemoteException;
}
------------------------------------------------------------
my Remote Interface is 

package com.stardeveloper.ejb.session;

import java.rmi.RemoteException;
import javax.ejb.EJBObject;

public interface First
    extends EJBObject
{

    public abstract String getTime()
        throws RemoteException;
}
--------------------------------------------------------
my EJB Sesion Bean is 

package com.stardeveloper.ejb.session;

import java.util.Date;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class FirstEJB
    implements SessionBean
{

    public FirstEJB()
    {
    }

    public String getTime()
    {
        return "Time is : " + (new Date()).toString();
    }

    public void ejbCreate()
    {
    }

    public void ejbPassivate()
    {
    }

    public void ejbActivate()
    {
    }

    public void ejbRemove()
    {
    }

    public void setSessionContext(SessionContext sessioncontext)
    {
    }
}
-------------------------------------------------

My JSP page which is trying to access the EJB is 

<%@ page import="javax.naming.InitialContext,
                 javax.naming.Context,
                 java.util.Properties,
                 com.stardeveloper.ejb.session.First,
                 com.stardeveloper.ejb.session.FirstHome"%>
<%
    long t1 = System.currentTimeMillis();
    Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY,
            "org.jnp.interfaces.NamingContextFactory");
        props.put(Context.PROVIDER_URL, "localhost:1099");

    Context ctx = new InitialContext(props);
    FirstHome home = (FirstHome)ctx.lookup("ejb/First");
    First bean = home.create();
    String time = bean.getTime();
    bean.remove();
    ctx.close();
    long t2 = System.currentTimeMillis();
%>


    p { font-family:Verdana;font-size:12px; }


Message received from bean = "<%= time %>".Time taken :
    <%= (t2 - t1) %> ms.


---------------------------------
my ejb-jar.xml is 

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">

<ejb-jar>
   
   <enterprise-beans>
      
         <display-name>FirstEJB</display-name>
         <ejb-name>First</ejb-name>
         com.stardeveloper.ejb.session.FirstHome
         com.stardeveloper.ejb.session.First
         <ejb-class>com.stardeveloper.ejb.session.FirstEJB</ejb-class>
         <session-type>Stateless</session-type>
		<transaction-type>Container</transaction-type>
      
   </enterprise-beans>

   <assembly-descriptor>
      <container-transaction>
        
            <ejb-name>First</ejb-name>
            <method-name>*</method-name>
        
        <trans-attribute>Supports</trans-attribute>
      </container-transaction>

      <security-role>
         Users
         <role-name>users</role-name>
      </security-role>
   </assembly-descriptor>
</ejb-jar>
----------------------------------------
my jboss.xml is 

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN" 
	"http://www.jboss.org/j2ee/dtd/jboss.dtd">

	<enterprise-beans>
		
			<ejb-name>First</ejb-name>
			<jndi-name>ejb/First</jndi-name>
		
	</enterprise-beans>



--------------------------------------

One of the solution for  this would be , if I put the EJB jar file (the jar file which is having all the ejb classes as well as deployment descriptors inside  that ) inside the war file WEB-INF\lib folder. Then it is working fine , showing the page at the browser.

Suppose if it is a very big application and I can't put that at war\WEB-INF\lib folder. This is not the way to put. 

SO any body please put some light on this...What I need to do to work with out putting my ejb jar file inside the war file.

Thanks!
vvk





View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4087368#4087368

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4087368



More information about the jboss-user mailing list