I had this problem when converting from ComponentManager to ServiceManager.
Adding Component to the implements clause of my class solved the problem.

Ralph

-----Original Message-----
From: Joerg Buchberger [mailto:[EMAIL PROTECTED]
Sent: Monday, January 12, 2004 4:12 AM
To: [EMAIL PROTECTED]
Subject: howto properly use ServiceManager.lookup(ROLE) 


Hi there.

Using Sun-JDK-1.4.1_03(WinNT4SP6a), Phoenix-4.0.3,
ServiceManager.lookup(MyComponent.ROLE):

The ServiceManager always returns a $Proxy<number> type object, which causes
a
ClassCastException when I try to cast to my components service interface:
MyComponent mytest = (MyComponent) ServiceManager.lookup(MyComponent.ROLE);

When getting a needed component with ServiceManager, am I supposed to use
reflection to get at my services interface/impl(?!), or should the returned
object be castable as I tried above? 
Actually, reflection even tells me that MyComponent-interface is implemented
by
the returned mytest.

?! I'm somehow lost here.
Does anyone see or can anyone guess the mistake?

Cheers,
Joerg.


p.s.


Relevant parts of my assembly.xml, MyComponentImpl and qdox-generated
MyComponent.xinfo, WebServer.xinfo look like shown in snippets below.
Plus test-Servlet code and logging-output for further infos at the end.

<assembly>
        <block name="webserver"
             class="de.jb.WebServer" >
        <provide name="test" role="de.jb.compo.MyComponent"/>
        </block>     
        <block name="test"
         class="de.jb.compo.MyComponentImpl" >
        </block>
</assembly>


/**
****************************************************************************
* @phoenix:block
* @phoenix:service name="de.jb.compo.MyComponent"
*/
public class MyComponentImpl implements MyComponent


<blockinfo>

  <!-- section to describe block -->
  <block>
    <version>1.0</version>
  </block>

  <!-- services that are offered by this block -->
  <services>
    <service name="de.jb.WebServer"/>
  </services>

  <!-- interfaces that may be exported to manange this block -->
  <management-access-points>
  </management-access-points>

  <!-- services that are required by this block -->
  <dependencies>
    <dependency>
      <service name="de.jb.compo.MyComponent"/>
    </dependency>
  </dependencies>
</blockinfo>


<blockinfo>

  <!-- section to describe block -->
  <block>
    <version>1.0</version>
  </block>

  <!-- services that are offered by this block -->
  <services>
    <service name="de.jb.compo.MyComponent"/>
  </services>

  <!-- interfaces that may be exported to manange this block -->
  <management-access-points>
  </management-access-points>

  <!-- services that are required by this block -->
  <dependencies>
  </dependencies>
</blockinfo>





My servlet executes this code:

if (serviceManagerInst.hasService(MyComponent.ROLE))
{
    Object test = serviceManagerInst.lookup(MyComponent.ROLE);

    Class[]  ac;
    Method[] am;

    ac = test.getClass().getInterfaces();
    for (int i = 0; i < ac.length; i++)
    {
        Class clazz = ac[i];
        loggerInst.debug("iface "+ clazz.getName());
    } 
    am = test.getClass().getMethods();
    for (int i = 0; i < am.length; i++)
    {
        Method meth = am[i];
        loggerInst.debug("metho "+ meth.getName());
    } 
    loggerInst.debug(test.getClass().getName());
    loggerInst.debug(test.getClass().getPackage().toString());

    if (test instanceof MyComponent)
    {
        loggerInst.debug("recognized MyComponent");
        Results = ((MyComponent) test).doStuff();
    }
    else
    {
        loggerInst.debug("why was MyComponent NOT recognized");
    }
}


snippet from mylog.txt:

iface de.jb.compo.MyComponent                   <-- !
iface org.apache.avalon.phoenix.Block
metho hashCode
metho equals
metho toString
metho doStuff                                   <-- !
metho isProxyClass
metho newProxyInstance
metho getProxyClass
metho getInvocationHandler
metho getClass
metho wait
metho wait
metho wait
metho notify
metho notifyAll
$Proxy0
why was MyComponent NOT recognized


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

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

Reply via email to