将EJB3.0注入WebLogic 10.3.6上的Jersey 1.9

将EJB3.0注入WebLogic 10.3.6上的Jersey 1.9,jersey,weblogic,ejb-3.0,code-injection,Jersey,Weblogic,Ejb 3.0,Code Injection,我试图将EJB3.0bean注入运行在WebLogic10.3.6上的Jersey 1.9Servet中 我尝试了以下列出的技巧: 这里的直接注入技术只是给出了一个NullPointerException。@Provider技术给出了一个NameNotFoundException,因为它似乎正在提取本地接口的完全限定名。将代码更改为仅使用接口名称似乎没有帮助 我在装耳塞。EJB在JAR中,泽西岛资源在战争中 EJB注入WebLogic 10.3.6上Java EE 5上的Jersey是否可能?显

我试图将EJB3.0bean注入运行在WebLogic10.3.6上的Jersey 1.9Servet中

我尝试了以下列出的技巧:

这里的直接注入技术只是给出了一个
NullPointerException
@Provider
技术给出了一个
NameNotFoundException
,因为它似乎正在提取本地接口的完全限定名。将代码更改为仅使用接口名称似乎没有帮助

我在装耳塞。EJB在JAR中,泽西岛资源在战争中


EJB注入WebLogic 10.3.6上Java EE 5上的Jersey是否可能?

显然WebLogic 10.3.6没有将本地业务接口注入JNDI注册表

根据Oracle支持说明1175123.1,必须在
web.xml
中添加
ejb本地ref

  <ejb-local-ref>
    <ejb-ref-name>[Name of EJB local interface here]</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>[Fully qualified path to EJB local interface]</local>
  </ejb-local-ref>
import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;

import java.lang.reflect.Type;

import javax.ejb.EJB;

import javax.naming.Context;
import javax.naming.InitialContext;

import javax.ws.rs.ext.Provider;


/**
 * JAX-RS EJB Injection provider.
 */
@Provider
public class EJBProvider implements InjectableProvider<EJB, Type> {

    public ComponentScope getScope() {
        return ComponentScope.Singleton;
    }

    public Injectable getInjectable(ComponentContext cc, EJB ejb, Type t) {
        if (!(t instanceof Class))
            return null;

        try {
            Class c = (Class)t;

            Context ic = new InitialContext();

            String simpleName = String.format("java:comp/env/%s", c.getSimpleName());
            final Object o = ic.lookup(simpleName);

            return new Injectable<Object>() {
                public Object getValue() {
                    return o;
                }
            };
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}