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