Geoff

If you are just learning this stuff put everything in one big jar file. The
problem you have is that you have to tell jBoss where to find the beans in
the other jar file. You need to add <ejb-ref> in both your jboss.xml and
ejb-jar.xml like this 

jboss.xml
         <ejb-ref>
           <ejb-ref-name>ejb/InternalAccount</ejb-ref-name>
           <jndi-name>account/InternalAccount</jndi-name>
         </ejb-ref>

ejb-jar.xml
         <ejb-ref>
           <description>Link to InternalAccount</description>
           <ejb-ref-name>ejb/InternalAccount</ejb-ref-name>
           <ejb-ref-type>Session</ejb-ref-type>
           <home>com.uni.account.InternalAccountHome</home>
           <remote>com.uni.account.InternalAccountRemote</remote>
         </ejb-ref>

This is not all. You need to add the interfaces (home and remote) of the
referenced ejb in your jar file. This still gave me errors and seems pretty
ugly and messy. Another solution is to have the two jar's in the jboss
CLASSPATH. I did not try this and went for the one big jar solution. When I
have more time I will try for more elegant solutions.

-----Original Message-----
From: Geoff Jacobsen [mailto:[EMAIL PROTECTED]]
Sent: Saturday, November 18, 2000 4:31 PM
To: jBoss
Subject: [jBoss-User] ClassNotFoundException: com.titan.cabin.CabinHome


Hi all,

I'm am learning EJBs from Richard Monson-Haefel's Enterprise
JavaBeans.

I am doing the example from chapter 4 which has one entity bean and
one session bean which are deployed as separate jar files.


The entity bean seems to work fine when accessed from a client program
but when I try and look it up from the session bean I get the error:

javax.naming.CommunicationException.  Root exception is
java.lang.ClassNotFoundException: com.titan.cabin.CabinHome
[TravelAgentBean]       at java.lang.Throwable.<init>(Throwable.java:96)
[TravelAgentBean]       at java.lang.Exception.<init>(Exception.java:44)
[TravelAgentBean]       at
java.lang.ClassNotFoundException.<init>(ClassNotFoundException.java:71)
[TravelAgentBean]       at
java.net.URLClassLoader.findClass(URLClassLoader.java:205)
[TravelAgentBean]       at
java.lang.ClassLoader.loadClass(ClassLoader.java(Compiled Code))
[TravelAgentBean]       at
java.lang.ClassLoader.loadClass(ClassLoader.java:257)
[TravelAgentBean]       at java.lang.Class.forName0(Native Method)
[TravelAgentBean]       at java.lang.Class.forName(Class.java:212)
[TravelAgentBean]       at
sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:
206)
[TravelAgentBean]       at
java.io.ObjectInputStream.inputProxyClassDescriptor(ObjectInputStream.java:9
88)
[TravelAgentBean]       at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:376)
[TravelAgentBean]       at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:242)
[TravelAgentBean]       at
java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1192)
[TravelAgentBean]       at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:392)
[TravelAgentBean]       at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:242)
[TravelAgentBean]       at
java.rmi.MarshalledObject.get(MarshalledObject.java:144)
[TravelAgentBean]       at
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:299)
[TravelAgentBean]       at
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:279)
[TravelAgentBean]       at
javax.naming.InitialContext.lookup(InitialContext.java:351)
[TravelAgentBean]       at
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:367)
[TravelAgentBean]       at
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:403)
[TravelAgentBean]       at
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:279)
[TravelAgentBean]       at
javax.naming.InitialContext.lookup(InitialContext.java:351)
[TravelAgentBean]       at
com.titan.travelagent.TravelAgentBean.listCabins(TravelAgentBean.java:21)
...


Here is the relevant code:


TravelAgentBean.java:
...
   public String [] listCabins(int shipID, int bedCount) {
        try {
            javax.naming.Context jndiContext = new InitialContext();
            Object obj = jndiContext.lookup("java:comp/env/ejb/Cabin");

            CabinHome home = (CabinHome)
                javax.rmi.PortableRemoteObject.narrow(obj, CabinHome.class);
...

   private javax.naming.Context getInitialContext() 
   throws javax.naming.NamingException{
     System.setProperty("java.naming.factory.initial", 
                        "org.jnp.interfaces.NamingContextFactory");
     System.setProperty("java.naming.provider.url", 
                        "localhost:1099");

     return new InitialContext();
   }
    
... 

ejb-jar.xml:
<ejb-jar>
 <enterprise-beans>
  <session>
    <ejb-name>TravelAgentBean</ejb-name>
   <home>com.titan.travelagent.TravelAgentHome</home>
   <remote>com.titan.travelagent.TravelAgent</remote>
   <ejb-class>com.titan.travelagent.TravelAgentBean</ejb-class>
   <session-type>Stateless</session-type>
   <transaction-type>Container</transaction-type>

   <ejb-ref>
     <ejb-ref-name>ejb/Cabin</ejb-ref-name>
     <ejb-ref-type>Entity</ejb-ref-type>
     <home>com.titan.cabin.CabinHome</home>
     <remote>com.titan.cabin.Cabin</remote>
   </ejb-ref>

  </session>
 </enterprise-beans>

jboss.xml:
<jboss>
     <secure>false</secure>
     <container-configurations />
     <resource-managers />
     <enterprise-beans>
       <session>
         <ejb-name>TravelAgentBean</ejb-name>
         <jndi-name>TravelAgent</jndi-name>
         <configuration-name></configuration-name>
         <ejb-ref>
           <ejb-ref-name>ejb/Cabin</ejb-ref-name>
           <jndi-name>Cabin</jndi-name>
         </ejb-ref>
       </session>
     </enterprise-beans>
   </jboss>


and from CabinBean:

tulip:/usr/local/jboss/deploy$ jar tvf cabin.jar 
     0 Sun Nov 19 09:19:22 GMT+13:00 2000 META-INF/
    62 Sun Nov 19 09:19:22 GMT+13:00 2000 META-INF/MANIFEST.MF
   479 Sun Nov 19 09:19:20 GMT+13:00 2000 com/titan/cabin/Cabin.class
  1468 Sun Nov 19 09:19:20 GMT+13:00 2000 com/titan/cabin/CabinBean.class
   395 Sun Nov 19 09:19:20 GMT+13:00 2000 com/titan/cabin/CabinHome.class
   573 Sun Nov 19 09:19:20 GMT+13:00 2000 com/titan/cabin/CabinPK.class
  1724 Sun Nov 19 09:19:22 GMT+13:00 2000 META-INF/ejb-jar.xml
  2849 Sun Nov 19 09:19:22 GMT+13:00 2000 META-INF/jaws.xml
   340 Sun Nov 19 09:19:22 GMT+13:00 2000 META-INF/jboss.xml


ejb-jar.xml:

<ejb-jar>
 <enterprise-beans>
   <entity>
      <description>
            This Cabin enterprise bean entity represents a cabin on 
            a cruise ship.
      </description>
      <ejb-name>Cabin</ejb-name>
      <home>com.titan.cabin.CabinHome</home>
      <remote>com.titan.cabin.Cabin</remote>
      <ejb-class>com.titan.cabin.CabinBean</ejb-class>
      <persistence-type>Container</persistence-type>
      <prim-key-class>com.titan.cabin.CabinPK</prim-key-class>
      <reentrant>False</reentrant>

      <cmp-field><field-name>id</field-name></cmp-field>
      <cmp-field><field-name>name</field-name></cmp-field>
      <cmp-field><field-name>deckLevel</field-name></cmp-field>
      <cmp-field><field-name>ship</field-name></cmp-field>
      <cmp-field><field-name>bedCount</field-name></cmp-field>
   </entity>
 </enterprise-beans>
 ...

jboss.xml:

<jboss>
     <secure>false</secure>
     <container-configurations />
     <resource-managers />
     <enterprise-beans>
       <entity>
         <ejb-name>Cabin</ejb-name>
         <jndi-name>Cabin</jndi-name>
         <configuration-name></configuration-name>
       </entity>
     </enterprise-beans>
   </jboss>


I'm and running this on Debian GNU/Linux x86 (woody) using
jboss2.0_FINAL:

[Info] Java version: 1.3.0,IBM Corporation
[Info] Java VM: Classic VM 1.3.0,IBM Corporation
[Info] System: Linux 2.2.13,x86

the complete cabin example (that I have edited) can be download from:

http://casquet.inet.net.nz/cabinejb.tar.gz

Thanks for your help.

-- 
Geoff Jacobsen.                         http://casquet.inet.net.nz/geoff


--
--------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
Problems?:           [EMAIL PROTECTED]


--
--------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
Problems?:           [EMAIL PROTECTED]

Reply via email to