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

Reply via email to