On Aug 19, 2008, at 2:56 PM, lupu.slobodu wrote:


I am not sure about this, but it looks like the container is checking for a service provider definition in service-jar.xml compatible with my type(that
would be "sample.jndi.ResourceBean")

We definitely do do that. But we only do that as a fallback if we can't find an already configured <Resource> that supplies the type you need (in this case sample.jndi.ResourceBean). When webbaps boot, we export all the Tomcat configured resources as OpenEJB <Resource> objects so they are available for injection. What we don't do is log a message when we do that which would be really handy right now.... at least I don't think we do (maybe on debug?)

Theoretically if it was imported by OpenEJB it would show up under java:openejb/Resource/. You might try listing that context and seeing if it's there.

Here's a neat little chunk of code to help:

public static void contextToMap(Context context, String baseName, Map<String,Object> results) throws NamingException { NamingEnumeration<Binding> namingEnumeration = context.listBindings("");
        while (namingEnumeration.hasMoreElements()) {
            Binding binding = namingEnumeration.nextElement();
            String name = binding.getName();
            String fullName = baseName + name;
            Object object = binding.getObject();
            results.put(fullName, object);
            if (object instanceof Context) {
contextToMap((Context) object, fullName + "/", results);
            }
        }
    }

Hopefully I can poke at this Friday.

-David



David Blevins wrote:

That definitely should work.  Let me see if I can't reproduce this.

-David

On Aug 12, 2008, at 1:45 PM, lupu.slobodu wrote:


If I declare my session bean in ejb-jar.xml, together with the
resource-env-ref like this

      <session>
          <ejb-name>CalculatorImpl</ejb-name>
          <business-local>sample.CalculatorLocal</business-local>
          <ejb-class>sample.CalculatorImpl</ejb-class>
          <transaction-type>Container</transaction-type>

                        <resource-env-ref>
                                  <description>
                                    Object factory for MyBean instances.
                                  </description>
                                
                                  <resource-env-ref-name>
                                     bean/ParamsFactory
                                  </resource-env-ref-name>
                                
                                  <resource-env-ref-type>
                                    sample.jndi.ResourceBean
                                  </resource-env-ref-type>
                        </resource-env-ref>
      </session>


it crashes at deploy time like this:

org.apache.openejb.OpenEJBException: No provider available for
resource-ref
'null' of type 'sample.jndi.ResourceBean' for 'CalculatorImpl'.
        at
org
.apache .openejb.config.AutoConfig.autoCreateResource(AutoConfig.java:
1292)
        at
org.apache.openejb.config.AutoConfig.getResourceId(AutoConfig.java:
1285)
        at
org.apache.openejb.config.AutoConfig.getResourceId(AutoConfig.java:
1236)
        at
org
.apache .openejb.config.AutoConfig.processResourceRef(AutoConfig.java:
781)
        at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:706)
        at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:133)
        at
org.apache.openejb.config.ConfigurationFactory
$Chain.deploy(ConfigurationFactory.java:148)
        at
org
.apache
.openejb
.config
.ConfigurationFactory .configureApplication(ConfigurationFactory.java:
440)
        at
org
.apache
.openejb
.tomcat.catalina.TomcatWebAppBuilder.start(TomcatWebAppBuilder.java:
233)
        at
org
.apache
.openejb
.tomcat
.catalina
.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:58)
        at
org
.apache
.catalina
.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:
4252)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java: 719)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
1045)
        at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java: 443)
        at
org.apache.catalina.core.StandardService.start(StandardService.java:
516)
        at
org.apache.catalina.core.StandardServer.start(StandardServer.java: 710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

David Blevins wrote:


On Aug 8, 2008, at 11:11 AM, lupu.slobodu wrote:


Here it is what I've been trying:

1)Resource Factory configuration in tomcat context.xml

<Resource
    name="bean/ParamsFactory"
    auth="Container"
    type="sample.jndi.ResourceBean"
    factory="sample.jndi.GenericObjectFactory"
                value="ContextResource"
    />

2)test web application's  web.xml

<resource-env-ref>
<description>
 Object factory for ResourceBean instances.
</description>
<resource-env-ref-name>
  bean/ParamsFactory
</resource-env-ref-name>
<resource-env-ref-type>
 sample.jndi.ResourceBean
</resource-env-ref-type>
</resource-env-ref>


I can look it up successfully from a servlet like this

                Context initCtx = new InitialContext();
                Context envCtx = (Context) initCtx.lookup("java:comp/env");
                ResourceBean bean = (ResourceBean) envCtx.lookup("bean/
ParamsFactory");


The same look up fails  when performed inside a session bean.

I tried to integrate the declarations in the openejb web module
web.xml
descriptor also but with no success.

If you can look it up from a Servlet, we're not too far! Post the
ejb-
jar.xml you using if you can. You would need an identical resource-
env-ref in there for your session bean.

-David




--
View this message in context:
http://www.nabble.com/Custom-Resource-Factory-tp18852971p18952298.html
Sent from the OpenEJB User mailing list archive at Nabble.com.






--
View this message in context: 
http://www.nabble.com/Custom-Resource-Factory-tp18852971p19059489.html
Sent from the OpenEJB User mailing list archive at Nabble.com.



Reply via email to