Thanks Scott.
I've known that java_bean("myBean") would work ONLY MyBean is annotated with 
@Singleton or registed in resin-web.xml.
How can I get a MyBean instance when MyBean is a NON-SINGLETON bean?

----- Original Message ----- 
From: "Scott Ferguson" <[EMAIL PROTECTED]>
To: "General Discussion for the Resin application server" 
<resin-interest@caucho.com>
Sent: Thursday, January 17, 2008 12:36 AM
Subject: Re: [Resin-interest] How to get non-singleton WebBeans 
inQuercus/PHP?


>
> On Jan 16, 2008, at 5:27 AM, wesley wrote:
>
>> For instance:
>>
>> I want to get a configured web-bean instance by class name in php file
>> below:
>> =========================================
>> <?php
>>  echo java_bean("com.mycompany.MyBean");
>> ?>
>> =========================================
>> package com.mycompany;
>> @Component
>> // no @Singleton
>> public class MyBean {
>
> The default name of the bean is "myBean" according to the WebBeans
> specification, so try using:
>
> <?php
>
>   echo java_bean("myBean");
>
> ?>
>
> You can override the default name with @Named("my-name") as a class
> annotation.
>
> Also, if you turn on "fine" logging, you should see the bean get
> registered in the logs, and it should show the name that Resin's
> assigned.
>
> -- Scott
>
>>     private String greetings = "Hello world.";
>>     public MyBean() {
>>     }
>>     public String getGreetings() {
>>         return greetings;
>>     }
>> }
>> =========================================
>> It won't work because java_bean() method only accept a singleton
>> bean name.
>>
>>
>> I tried to add a static method in
>> com.caucho.quercus.lib.ResinModule like
>> this:
>> =========================================
>> public class ResinModule extends AbstractQuercusModule {
>>     ...
>>  public static Object webbeans(String className)
>>  {
>>   System.out.println(className);
>>   WebBeansContainer _webBeans = WebBeansContainer.create();
>>
>>   try {
>>    Class clazz = Class.forName(className);
>>
>>     ComponentFactory component = _webBeans.resolveByType(clazz);
>>
>>      if (component == null) {
>>       component = _webBeans.createTransient(clazz);
>>      }
>>      return component.get();
>>   } catch (Exception t) {
>>    t.printStackTrace(System.out);
>>    return null;
>>   }
>>  }
>>
>>     ...
>> }
>> =========================================
>> <?php
>>  echo webbeans("com.mycompany.MyBean");
>> ?>
>> =========================================
>>
>>
>> When refresh the php page, ResinModule cannot find the class, printing
>> stacktrace:
>>
>> --------------------------------------------------------------------
>> com.mycompany.MyBean
>> java.lang.ClassNotFoundException: com.mycompany.MyBean
>>  at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>>  at java.security.AccessController.doPrivileged(Native Method)
>>  at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>>  at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>>  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>>  at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>>  at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>>  at java.lang.Class.forName0(Native Method)
>>  at java.lang.Class.forName(Class.java:169)
>>  at com.caucho.quercus.lib.ResinModule.webbeans(ResinModule.java:131)
>>  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:597)
>>  at com.caucho.quercus.module.StaticFunction.invoke
>> (StaticFunction.java:129)
>>  at com.caucho.quercus.env.JavaInvoker.callMethod(JavaInvoker.java:
>> 604)
>>  at com.caucho.quercus.env.JavaInvoker.call(JavaInvoker.java:539)
>>  at com.caucho.quercus.expr.FunctionExpr.evalImpl(FunctionExpr.java:
>> 182)
>>  at com.caucho.quercus.expr.FunctionExpr.eval(FunctionExpr.java:126)
>>  at com.caucho.quercus.expr.MethodCallExpr.eval(MethodCallExpr.java:
>> 92)
>>  at com.caucho.quercus.program.EchoStatement.execute
>> (EchoStatement.java:57)
>>  at
>> com.caucho.quercus.program.BlockStatement.execute
>> (BlockStatement.java:99)
>>  at
>> com.caucho.quercus.program.QuercusProgram.execute
>> (QuercusProgram.java:239)
>>  at com.caucho.quercus.page.InterpretedPage.execute
>> (InterpretedPage.java:61)
>>  at com.caucho.quercus.page.QuercusPage.executeTop(QuercusPage.java:
>> 119)
>>  at
>> com.caucho.quercus.servlet.ResinQuercusServlet.service
>> (ResinQuercusServlet.java:146)
>>  at
>> com.caucho.quercus.servlet.QuercusServlet.service
>> (QuercusServlet.java:353)
>>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:91)
>>  at
>> com.caucho.server.dispatch.ServletFilterChain.doFilter
>> (ServletFilterChain.java:103)
>>  at
>> com.caucho.server.webapp.DispatchFilterChain.doFilter
>> (DispatchFilterChain.java:97)
>>  at
>> com.caucho.server.dispatch.ServletInvocation.service
>> (ServletInvocation.java:266)
>>  at
>> com.caucho.server.webapp.RequestDispatcherImpl.forward
>> (RequestDispatcherImpl.java:280)
>>  at
>> com.caucho.server.webapp.RequestDispatcherImpl.forward
>> (RequestDispatcherImpl.java:108)
>>  at
>> org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute
>> (ServletDispatcherResult.java:139)
>>  ....
>>
>>
>> It seems ResinModule runs in the Resin container and will not load
>> classes
>> in any webapp's library,
>> and  the WebBeansContainer only maintains singleton component
>> instances and
>> save them in
>> "private HashMap<String,ComponentImpl> _namedComponentMap".
>>
>>
>>
>> _______________________________________________
>> resin-interest mailing list
>> resin-interest@caucho.com
>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>
>
>
> _______________________________________________
> resin-interest mailing list
> resin-interest@caucho.com
> http://maillist.caucho.com/mailman/listinfo/resin-interest
> 



_______________________________________________
resin-interest mailing list
resin-interest@caucho.com
http://maillist.caucho.com/mailman/listinfo/resin-interest

Reply via email to