This week's book giveaways are in the Java EE and JavaScript forums.
We're giving away four copies each of The Java EE 7 Tutorial Volume 1 or Volume 2(winners choice) and jQuery UI in Action and have the authors on-line!
See this thread and this one for details.
The moose likes EJB and other Java EE Technologies and the fly likes Error deploying EJB Model Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Java » EJB and other Java EE Technologies
Bookmark "Error deploying EJB Model" Watch "Error deploying EJB Model" New topic
Author

Error deploying EJB Model

Kevin P Smith
Ranch Hand

Joined: Feb 18, 2005
Posts: 362
hi guys,

I'm having real trouble deplying my ejb-jar.xml file onto my Sun WebApp Server 9.0

The file structure of the ejb module jar is:-
+module.jar
+meta-inf
-ejb-jar.xml
-Manifest.mf
+lib
-j2ee.jar
-ejb-3_0-api.jar
+com\myproject\sample1
-SampleRemote
-SampleLocal
-SampleModel

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

<ejb-jar>
<description>
Sample
</description>
<enterprise-beans>
<session>
<description>
Sample Bean for testing
</description>
<display-name>
SampleBean
</display-name>
<ejb-name>SampleModel</ejb-name>
<home>com.myproject.sample1.SampleLocal</home>
<remote>com.myproject.sample1.SampleRemote</remote>
<ejb-class>com.myproject.sample1.SampleModel</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>

And the error I get is:
[#|2007-10-06T11:39:16.544+0100|SEVERE|sun-appserver-pe9.0|javax.enterprise.system.tools.deployment|_ThreadID=17;_ThreadName=Thread-31;_RequestID=ae20b5ad-3d0d-4c6a-8009-e11a14b53e63;|Exception occured in J2EEC Phase
com.sun.enterprise.deployment.backend.IASDeploymentException: Error loading deployment descriptors for module [sample] -- Error processing EjbDescriptor
at com.sun.enterprise.deployment.backend.Deployer.loadDescriptors(Deployer.java:362)
at com.sun.enterprise.deployment.backend.AppDeployerBase.loadDescriptors(AppDeployerBase.java:327)
at com.sun.enterprise.deployment.backend.AppDeployer.explodeArchive(AppDeployer.java:332)
at com.sun.enterprise.deployment.backend.AppDeployer.deploy(AppDeployer.java:182)
at com.sun.enterprise.deployment.backend.AppDeployer.doRequestFinish(AppDeployer.java:129)
at com.sun.enterprise.deployment.phasing.J2EECPhase.runPhase(J2EECPhase.java:169)
at com.sun.enterprise.deployment.phasing.DeploymentPhase.executePhase(DeploymentPhase.java:95)
at com.sun.enterprise.deployment.phasing.PEDeploymentService.executePhases(PEDeploymentService.java:871)
at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:266)
at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:739)
at com.sun.enterprise.management.deploy.DeployThread.deploy(DeployThread.java:174)
at com.sun.enterprise.management.deploy.DeployThread.run(DeployThread.java:210)
Caused by: java.lang.RuntimeException: Error processing EjbDescriptor
at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:160)
at com.sun.enterprise.deployment.EjbDescriptor.visit(EjbDescriptor.java:2036)
at com.sun.enterprise.deployment.EjbBundleDescriptor.visit(EjbBundleDescriptor.java:674)
at com.sun.enterprise.deployment.Application.visit(Application.java:1734)
at com.sun.enterprise.deployment.archivist.ApplicationArchivist.validate(ApplicationArchivist.java:457)
at com.sun.enterprise.deployment.backend.Deployer.loadDescriptors(Deployer.java:342)
... 11 more
Caused by: java.lang.ClassNotFoundException: com.myproject.sample1.SampleModel
at com.sun.enterprise.loader.EJBClassLoader.findClassData(EJBClassLoader.java:697)
at com.sun.enterprise.loader.EJBClassLoader.findClass(EJBClassLoader.java:595)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:117)
... 16 more
|#]


Any advice?

[ October 06, 2007: Message edited by: Keith Seller ]
[ October 06, 2007: Message edited by: Keith Seller ]
Jaikiran Pai
Marshal

Joined: Jul 20, 2005
Posts: 10067
    
163

Caused by: java.lang.ClassNotFoundException: com.myproject.sample1.SampleModel


Is this class present inside the module.jar ejb jar file? Can you post the output of the following:

- From the command prompt, move the folder containing module.jar
- Run the following command



Post the output here.


[My Blog] [JavaRanch Journal]
Kevin P Smith
Ranch Hand

Joined: Feb 18, 2005
Posts: 362
Sorted it, cheers!

My error, the classpath was wrong.
Kevin P Smith
Ranch Hand

Joined: Feb 18, 2005
Posts: 362
Hi guys

More problems with deploying EJB3.0 module!!!

I've created and EJB module/client simple sample system just to try out the basics (very basic) of EJB3.0, the classes were written/compiled in Eclipse-Europa using J2EE5 i took the java2ee.jar file from Sun's WebApp 9 (which I am using as my WebApp) so the classes were compiled using the same jar as the WebApp, the WAR & JAR both deployed OK (seemingly, but when I start-up the Web Server I get the following errors (the 3rd error comes when running the system, but I expect is related)...

Error 1:
[#|2007-10-08T13:06:41.360+0100|SEVERE|sun-appserver-pe9.0|javax.enterprise.system.core.classloading|_ThreadID=10;_ThreadName=main;_RequestID=1b7fb4d2-d492-46b6-9e3e-dc2234590025;|LDR5004: UnExpected error occured while creating ejb container
java.lang.NoSuchMethodException: com.myproject.sample1.SampleLocal.create()
at java.lang.Class.getMethod(Class.java:1581)
at com.sun.ejb.containers.BaseContainer.initializeEjbInterfaceMethods(BaseContainer.java:1467)
at com.sun.ejb.containers.BaseContainer.<init>(BaseContainer.java:622)
at com.sun.ejb.containers.StatelessSessionContainer.<init>(StatelessSessionContainer.java:163)
at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:515)
at com.sun.enterprise.server.AbstractLoader.loadEjbs(AbstractLoader.java:486)
at com.sun.enterprise.server.EJBModuleLoader.load(EJBModuleLoader.java:158)
at com.sun.enterprise.server.AbstractManager.load(AbstractManager.java:206)
at com.sun.enterprise.server.ApplicationLifecycle.onStartup(ApplicationLifecycle.java:198)
at com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:326)
at com.sun.enterprise.server.ondemand.OnDemandServer.onStartup(OnDemandServer.java:112)
at com.sun.enterprise.server.PEMain.run(PEMain.java:326)
at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
|#]

[#|2007-10-08T13:06:41.360+0100|WARNING|sun-appserver-pe9.0|javax.enterprise.system.core|_ThreadID=10;_ThreadName=main;module;_RequestID=1b7fb4d2-d492-46b6-9e3e-dc2234590025;|CORE5021: Application NOT loaded: [module]|#]


----------
Error 2:
[#|2007-10-08T13:06:44.555+0100|INFO|sun-appserver-pe9.0|org.apache.catalina.loader.WebappClassLoader|_ThreadID=10;_ThreadName=main;|validateJarFile(C:\Java\Sun\AppServer\domains\domain1\applications\j2ee-modules\client\WEB-INF\lib\j2ee.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class|#]

----------
Error 3:
[#|2007-10-08T13:10:48.095+0100|INFO|sun-appserver-pe9.0|javax.enterprise.system.stream.out|_ThreadID=12;_ThreadName=httpWorkerThread-8080-1;|
Naming Exception: javax.naming.NameNotFoundException: No object bound to name java:/com/myproject/sample1/SampleModel|#]

I know it isn't much to go on but it's all the info I have.

Why does the SampleModel (Session bean) need this create Method?
Why dies the j2ee.jar file's Servlet.jar 'offend'?

Cheers for any help possible.

KS
Shailesh Kini
Ranch Hand

Joined: Oct 17, 2001
Posts: 153
Keith,

Your ejb-jar.xml file is still using EJB 1.1 dtd, as a result your appserver is trying to call the create method of the EJB to create and instance and pool it. Also EJB 1.1 spec did not have support for EJB Local interfaces. You should change it to use ejb3.0 schema.

This is what your have now in ejb-jar.xml.
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise
JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">

Change this to
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee"
version = "3.0"
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/ejb-jar_3_0.xsd">

hope this helps.


Shailesh Kini.
Kevin P Smith
Ranch Hand

Joined: Feb 18, 2005
Posts: 362
Cheers for that, that's really bad! I took the ejb-jar.xml from a sample tutorial online, so that's been there from the start (I never even bothered to look).

I sorted the Servlet.class error too (never ever deploy the j2ee.jar file to your webapp! :-D )

Unfortuneatley I still get the .create() error for the Home Interface (SampleLocal)

ejb-jar.xml looks like:
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee" version="3.0" 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/ejb-jar_3_0.xsd">
<description>
Sample
</description>
<enterprise-beans>
<session>
<description>
Sample Bean for testing
</description>
<display-name>
SampleBean
</display-name>
<ejb-name>SampleModel</ejb-name>
<local>com.myproject.sample1.SampleLocal</local>
<local-home>com.myproject.sample1.SampleRemote</local-home>
<ejb-class>com.myproject.sample1.SampleModel</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
Jaikiran Pai
Marshal

Joined: Jul 20, 2005
Posts: 10067
    
163

EJB3 no longer requires home/local-home interfaces. The ejb-jar.xml looks a bit incorrect:

<ejb-name>SampleModel</ejb-name>
<local>com.myproject.sample1.SampleLocal</local>
<local-home>com.myproject.sample1.SampleRemote</local-home>
<ejb-class>com.myproject.sample1.SampleModel</ejb-class>


Change it to:

Kevin P Smith
Ranch Hand

Joined: Feb 18, 2005
Posts: 362
<home> not <local>

<ejb-name>SampleModel</ejb-name>
<home>com.myproject.sample1.SampleLocal</home>
<remote>com.myproject.sample1.SampleRemote</remote>
<ejb-class>com.myproject.sample1.SampleModel</ejb-class>

But still get the same damn error!

Rapidly coming to the conclusion EJB3.0 is a pile of...!

If I can't even deploy the thing, how the hell are you meant to develop anythign with it?
[ October 08, 2007: Message edited by: Keith Seller ]
Shailesh Kini
Ranch Hand

Joined: Oct 17, 2001
Posts: 153
Hi Keith,

Sorry you feel that way about EJB 3.0. It is very easy and definitely not a pile of ....!

Couple of questions before you completely give up on EJB 3.0.

Are you writing your own tutorial or was it downloaded from the internet?

If your project has SampleLocal and SampleRemote interfaces... I have to agree with Jai you need <local> and <Remote> tags. <home> tags were required for EJB2.1 and 2.0 and are provived for backward compatibility. A pure EJB 3.0 application would never need to use <home> interfaces.

An important feature of EJB 3.0 is the support for annotations. This relieves you from creating a deployment descriptor. You might want to look into it.
Kevin P Smith
Ranch Hand

Joined: Feb 18, 2005
Posts: 362
Maybe not a pile (certainly seems an improvment on 2.1 - from what I can remember, 2001 I last used EJB)

But does seem very frustrating to set up.

It's also seems quite hard to find an accrate tutorial on EJB 3.0 (I prefer sites that just give working example I can build on).

this was a tutorial I found b ut it seems to have it's faults (obviously), as for the annotations, I've seen the annotations for @Remote/Local etc, but how can you completely eliminate the descriptor and is it wise (XMLs are easier to update than code on a working system).

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

Saying that, I have found a tutorial on JBoss whoch seems to work (minus the ejb-jar-xml) using @Remote/@Local annotations.

However there is still a problem with my 'lient' (Servlet in this case), which uses the following:

InitialContext ctx = new InitialContext();
SampleRemote remote = (SampleRemote) ctx.lookup("com.myproject.sample1.SampleModel/remote");

but I get this error:

[#|2007-10-08T22:49:49.707+0100|INFO|sun-appserver-pe9.0|javax.enterprise.system.stream.out|_ThreadID=19;_ThreadName=httpWorkerThread-8080-1;|
Naming Exception: javax.naming.NameNotFoundException|#]
[ October 08, 2007: Message edited by: Keith Seller ]
Shailesh Kini
Ranch Hand

Joined: Oct 17, 2001
Posts: 153
Hi Keith,

You might want to try the petstore application at j-petstore. Petstore allways has been very simple to understand. Hope this get you started in the right direction.
Kevin P Smith
Ranch Hand

Joined: Feb 18, 2005
Posts: 362
Saying that, I have found a tutorial on JBoss which seems to work (minus the ejb-jar-xml) using @Remote/@Local annotations.

However there is still a problem with my 'Client' (Servlet in this case), which uses the following:

InitialContext ctx = new InitialContext();
SampleRemote remote = (SampleRemote) ctx.lookup("com.myproject.sample1.SampleModel/remote");

but I get this error:

[#|2007-10-08T22:49:49.707+0100|INFO|sun-appserver-pe9.0|javax.enterprise.system.stream.out|_ThreadID=19;_ThreadName=httpWorkerThread-8080-1;|
Naming Exception: javax.naming.NameNotFoundException|#]
[ October 08, 2007: Message edited by: Keith Seller ]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Error deploying EJB Model