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