On Jan 16, 2008, at 9:07 AM, wesley wrote:

> 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?

It should work with a non-singleton bean as well.

Resin will create a new instance of the bean automatically.  If the  
bean has a scope, Resin will add the new bean to the scope (or use an  
old instance from the scope if it exists.)

-- Scott

>
> ----- 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



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

Reply via email to