当前位置: 首页 > 知识库问答 >
问题:

将EJB 3.0注入WebLogic 10.3.6上的Jersey 1.9中

干旺
2023-03-14

我已经尝试了这里列出的技术:将EJB注入JAX-RS(RESTful服务)

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

我在耳朵里包装。EJB在JAR中,Jersey资源在WAR中。

在WebLogic10.3.6上的Java EE5上EJB注入到Jersey中是可能的吗?

共有1个答案

叶桐
2023-03-14

显然,WebLogic10.3.6没有将本地业务接口注入JNDI注册中心。

根据Oracle支持说明1175123.1,必须将ejb-local-ref添加到web.xml:

  <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>

ejb-ref-name与接口名匹配是很重要的,因为下面的代码可以获得接口名来允许注入。

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;
        }
    }
}
 类似资料:
  • SimpleSession Bean类(EJB)的代码片段: EJB没有weblogic-ejb-jar.xml部署描述符,因此它是完全注释的EJB。 在管理控制台中部署WAR之后,在servlet中直接注入后,我得到了一个空引用。 http://docs.oracle.com/cd/e14571_01/web.1111/e14529/compatibility.htm “ WebLogic Se

  • 问题内容: 使用Glassfish,我可以设置一个字符串jndi条目: 然后,我可以将此容器配置的字符串注入到我的EJB中: lookup =似乎在内部执行InitialContext.lookup(…)。但是,它使用ejb3.1,但是不幸的是,我的产品环境仅为ejb3.0。 我想我想找出一种方法可以使用@Resource(name =)或@Resource(mappedName =)做类似的事情

  • 我有一个云实例,我已经安装了Jboss5.0.1GA服务器。服务器实例包含一个公共 IP 和一个 nat 地址。我已经使用带有IP(nat)地址的-b运行Jboss服务器,并且网址工作正常。现在我正在创建Java外部客户端来访问部署在Jboss服务器中的EJB3 bean,在那里我得到了例外,并使用谷歌尝试解决方案,这对我的情况没有帮助。找到下面的代码,它告诉我在外部客户端中使用什么来访问EJB3

  • 我在用Spring 奇怪的是:

  • 问题内容: 我是公司产品之一的最终用户。它不太适合集成到Spring中,但是我能够获取上下文的句柄并按名称检索所需的bean。但是,我仍然想知道是否可以将bean注入到此类中,即使该类不是由Spring本身管理的。 说明:管理某个类MyClass的生命周期的同一应用程序也正在管理Spring上下文的生命周期。Spring没有MyClass实例的知识,我想了解如何将实例提供给上下文,但是不能在上下文

  • 我们有一个带有@EJB字段的Spring托管bean 在我们的spring xml中 这在WebLogic和Glassfish中有效,但在JBoss 7.1.2中无效(请参阅stacktrac@[1])。 仔细研究Spring代码,似乎它将JNDI名称(即“MyService”)转换为Java EE标准容器前缀“Java:comp/env/”[2],JBoss似乎不支持这个前缀。从JBoss日志来