This is the interface for the service I am trying to write:
 
The ds class should be in ds.jar. It looks like that one is in the classpath. 
Pres is an interface which is also in the server-api.jar
 
package a.b;
import xxx.Pres;
import java.io.IOException;
import ds.DsException;

/**
 * @version 0.1
 */
public interface Service
{
  public void send(Pres p, String s)
      throws IOException, DsException;
}

 
What is strange to me is that all the code that is in the implementation of 
Service I originally wrote in a class OriginalServiceImpl. This was also 
contained in the server-api/server-impl jars. Everything ran fine. Then I 
decided that it would make sense re-factor the code into two separate classes 
so I moved some of it into ServiceImpl and tried to make OriginalServiceImpl 
use Service and things stopped working. Does this have anything to do with 
package names, maybe? OriginalService is in a different package than Service. 
 
Thank you for your help.
 
 
 

Stephen McConnell <[EMAIL PROTECTED]> wrote:


> -----Original Message-----
> From: ixxus nexxus [mailto:[EMAIL PROTECTED]
> Sent: 02 December 2004 02:20
> To: Avalon framework users
> Subject: RE: classloaders?
> 
> I think I'm using merlin-3.2.4-bis
> 
> Are there any simple instructions for switching from
> Merlin to Metro? Is it complicated? I could try it but
> I'm not sure if adding another variable into the mix
> will be constructive.

Metro provides complete binary compatibility with Avalon components
(providing you use the -Xavalon cli switch). The actual overhead is the
fact that Metro is not released yet which means you would be building of
our svn version. Upside is that we have a bunch of tools in place for
things like automatic block generation - and all of the development
community are now active on Metro - which means you will get a lot of
support from other users. Downside is that we are somewhat 'brutal' is
sorting things before a release which means you really need to follow
both the support and dev list on DPML [1] and it pays to setup a
connection to @dplml-metro on irc.freenode.net. 

In the medium term - it's a total plus proposition.

> This is the debug output:



> [DEBUG ] (xxx.classloader): classpath:
> file:/temp/xxx-1.2-src/repository/xxx/jars/server-impl-
>
1.2.jar;file:/ds/lib/ds.jar;file:${user.dir}/./repository/xxx/jars/serve
r-
> api-1.2.jar;

OK - so here we see that server-api-1.2.jar is added to the classloader.

But here we have a problem.

> [DEBUG ] (xxx.classloader.scanner): type:
> xxx.SubscriptionManagerImpl
> ---- exception report



> Exception:
> org.apache.avalon.composition.model.ModelException
> Message: Component type [a.b.ServiceImpl] contains a
> reference to the class [a/b/Service] which does not
> exist in the classloader.


So basically - a classloader is constructed based on the information
supplied in you block. When the block is mounted - each of the jar file
are scanned for component type descriptors (xinfo files). In your case
the [a.b.ServiceImpl] class is located and a xinfo loaded. The xinfo
states that the component is defined by the class a.b.ServiceImpl so the
loader attempts to load this class (simply to verify everything before
committing to the next stage). During the attempt to load the class an
exception has occurred indicating that a supporting class is not
available.

The typical reason for this is that the supporting class is referencing
another class that is not available in the classloader chain (the chain
from system classloader to your component classloader).

Could you post the source to the interface class? I'm rather interested
in seeing what the actual service dependencies are - because at the end
of the day - Merlin failed to load the service class and the real
question is why was there a service class loading failure - and why
don't you have something useful in the exception report about this. I.e.
there is something wrong with you api definition but there is also
something wrong with Merlin's reporting of the problem.

Cheers, Steve.

[1] http://www.dpml.net/central/about/resources/lists.html



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


                
---------------------------------
Do you Yahoo!?
 Yahoo! Mail - You care about security. So do we.

Reply via email to