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.