Hi,
after reading http://help.sap.com/saphelp_nwpi71/helpdata/en/43/a52f2e63161bbfe10000000a1553f7/frameset.htm i took the example and put a simple sample bean on the server:
package org.test;
import javax.annotation.Resource;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.sql.DataSource;
@Stateless
@Local(value=DSLocal.class)
public class DSBean implements DSLocal {
// injects a data source object
@Resource(name="jdbc/__default", type=DataSource.class)
private DataSource dataSource;
/* (non-Javadoc)
* @see org.test.DSLocal#getDS()
*/
/* (non-Javadoc)
* @see org.test.DSLocal#getDS()
*/
public DataSource getDS() {
return dataSource;
}
}
As far as I understand this should be everything needed to get the default datasource injected. As you might expect the server is following another approach:
System exception [EXCEPTION] javax.ejb.EJBException: Exception in getMethodReady() for stateless bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.services.ejb3.util.pool.PoolException: javax.ejb.EJBException: Cannot perform injection over bean instance org.test.DSBean@10d7cbc0 for bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. com.sap.engine.services.ejb3.util.pool.PoolException: javax.ejb.EJBException: Cannot perform injection over bean instance org.test.DSBean@10d7cbc0 for bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. at com.sap.engine.services.ejb3.util.pool.ContainerPool.translate(ContainerPool.java:288) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.doResizeOneStepUp(ContainerPoolImpl.java:378) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.ensureNotEmpty(ContainerPoolImpl.java:342) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.pop(ContainerPoolImpl.java:309) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager.getMethodReady(StatelessInstanceLifecycleManager.java:64) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatelessInstanceGetter.invoke(Interceptors_StatelessInstanceGetter.java:14) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_SecurityCheck.invoke(Interceptors_SecurityCheck.java:21) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ExceptionTracer.invoke(Interceptors_ExceptionTracer.java:16) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startChain(DefaultInvocationChainsManager.java:133) at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:164) at $Proxy2846.getDS(Unknown Source) at org.test.DSServlet.doGet(DSServlet.java:42) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:66) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:32) at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:145) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:66) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:32) at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:431) at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:289) at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387) at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:376) at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:85) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:160) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:67) at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.ResponseLogWriter.process(ResponseLogWriter.java:60) at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27) at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29) at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:309) at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.run(Processor.java:222) at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37) at java.security.AccessController.doPrivileged(Native Method) at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:152) at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:247) Caused by: javax.ejb.EJBException: Cannot perform injection over bean instance org.test.DSBean@10d7cbc0 for bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. at com.sap.engine.services.ejb3.runtime.impl.Interceptors_DependencyInjection.invoke(Interceptors_DependencyInjection.java:25) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_EJBContext30DependencyInjection.invoke(Interceptors_EJBContext30DependencyInjection.java:11) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatesTransition.invoke(Interceptors_StatesTransition.java:19) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ApplicationInstancesCreator.invoke(Interceptors_ApplicationInstancesCreator.java:53) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Resource.invoke(Interceptors_Resource.java:71) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:189) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_NewBeanContext.invoke(Interceptors_NewBeanContext.java:17) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startCallback(DefaultInvocationChainsManager.java:147) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager.makeExist(StatelessInstanceLifecycleManager.java:108) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager.access$000(StatelessInstanceLifecycleManager.java:23) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager$PoolUserImpl.createObject(StatelessInstanceLifecycleManager.java:34) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.doResizeOneStepUp(ContainerPoolImpl.java:373) ... 47 more Caused by: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. at com.sap.engine.lib.injection.FieldInjector.inject(FieldInjector.java:115) at com.sap.engine.lib.injection.InjectionMatrix.inject(InjectionMatrix.java:45) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_DependencyInjection.invoke(Interceptors_DependencyInjection.java:22) ... 63 more Caused by: com.sap.engine.services.connector.exceptions.BaseResourceException: ConnectionFactory "jdbc/__default" does not exist. Possible reasons: the adapter in which ConnectionFactory "jdbc/__default" is defined is not deployed or not started. at com.sap.engine.services.connector.ResourceObjectFactory.getObjectInstance(ResourceObjectFactory.java:244) at com.sap.engine.lib.injection.ReferenceObjectFactory.getObject(ReferenceObjectFactory.java:65) at com.sap.engine.lib.injection.FieldInjector.inject(FieldInjector.java:113) ... 65 more javax.ejb.EJBException: Exception in getMethodReady() for stateless bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.services.ejb3.util.pool.PoolException: javax.ejb.EJBException: Cannot perform injection over bean instance org.test.DSBean@10d7cbc0 for bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager.getMethodReady(StatelessInstanceLifecycleManager.java:66) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatelessInstanceGetter.invoke(Interceptors_StatelessInstanceGetter.java:14) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_SecurityCheck.invoke(Interceptors_SecurityCheck.java:21) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ExceptionTracer.invoke(Interceptors_ExceptionTracer.java:16) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startChain(DefaultInvocationChainsManager.java:133) at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:164) at $Proxy2846.getDS(Unknown Source) at org.test.DSServlet.doGet(DSServlet.java:42) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:66) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:32) at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:145) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:66) at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:32) at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:431) at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:289) at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387) at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:376) at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:85) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:160) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:67) at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.ResponseLogWriter.process(ResponseLogWriter.java:60) at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27) at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29) at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:71) at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:309) at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.run(Processor.java:222) at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37) at java.security.AccessController.doPrivileged(Native Method) at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:152) at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:247) Caused by: com.sap.engine.services.ejb3.util.pool.PoolException: javax.ejb.EJBException: Cannot perform injection over bean instance org.test.DSBean@10d7cbc0 for bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. at com.sap.engine.services.ejb3.util.pool.ContainerPool.translate(ContainerPool.java:288) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.doResizeOneStepUp(ContainerPoolImpl.java:378) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.ensureNotEmpty(ContainerPoolImpl.java:342) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.pop(ContainerPoolImpl.java:309) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager.getMethodReady(StatelessInstanceLifecycleManager.java:64) ... 44 more Caused by: javax.ejb.EJBException: Cannot perform injection over bean instance org.test.DSBean@10d7cbc0 for bean sap.com/DBEar*annotation|DSEjb.jar*annotation|DSBean; nested exception is: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. at com.sap.engine.services.ejb3.runtime.impl.Interceptors_DependencyInjection.invoke(Interceptors_DependencyInjection.java:25) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_EJBContext30DependencyInjection.invoke(Interceptors_EJBContext30DependencyInjection.java:11) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatesTransition.invoke(Interceptors_StatesTransition.java:19) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ApplicationInstancesCreator.invoke(Interceptors_ApplicationInstancesCreator.java:53) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Resource.invoke(Interceptors_Resource.java:71) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:189) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_NewBeanContext.invoke(Interceptors_NewBeanContext.java:17) at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:177) at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startCallback(DefaultInvocationChainsManager.java:147) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager.makeExist(StatelessInstanceLifecycleManager.java:108) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager.access$000(StatelessInstanceLifecycleManager.java:23) at com.sap.engine.services.ejb3.runtime.impl.StatelessInstanceLifecycleManager$PoolUserImpl.createObject(StatelessInstanceLifecycleManager.java:34) at com.sap.engine.services.ejb3.util.pool.ContainerPoolImpl.doResizeOneStepUp(ContainerPoolImpl.java:373) ... 47 more Caused by: com.sap.engine.lib.injection.InjectionException: Injection on field dataSource of instance org.test.DSBean@10d7cbc0 failed. Could not get a value to be injected from the factory. at com.sap.engine.lib.injection.FieldInjector.inject(FieldInjector.java:115) at com.sap.engine.lib.injection.InjectionMatrix.inject(InjectionMatrix.java:45) at com.sap.engine.services.ejb3.runtime.impl.Interceptors_DependencyInjection.invoke(Interceptors_DependencyInjection.java:22) ... 63 more Caused by: com.sap.engine.services.connector.exceptions.BaseResourceException: ConnectionFactory "jdbc/__default" does not exist. Possible reasons: the adapter in which ConnectionFactory "jdbc/__default" is defined is not deployed or not started. at com.sap.engine.services.connector.ResourceObjectFactory.getObjectInstance(ResourceObjectFactory.java:244) at com.sap.engine.lib.injection.ReferenceObjectFactory.getObject(ReferenceObjectFactory.java:65) at com.sap.engine.lib.injection.FieldInjector.inject(FieldInjector.java:113) ... 65 more
Is my server not configured correctly or do I have to mess with ejb-jar.xml and datasource-aliases.xml to get the datasource in a nice JEE-way?
Thanks