代码之家  ›  专栏  ›  技术社区  ›  cringe

使用打开的EJB配置JNDI名称

  •  2
  • cringe  · 技术社区  · 15 年前

    我正在尝试(单元)测试EJB类,而不必启动我的WebSphere环境。现在我在用 Open EJB 但是在解决我的EJB中使用的其他EJB的JNDI名称时存在一些问题…现在我无法从我的测试中注入模拟类。

    获取初始上下文

    final Properties properties = new Properties();
    properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
    properties.setProperty("log4j.category.OpenEJB.options ", "debug");
    properties.setProperty("log4j.category.OpenEJB.startup ", "debug");
    properties.setProperty("log4j.category.OpenEJB.startup.config ", "debug");
    properties.setProperty("MyOwnDatasource.JdbcDriver ", "com.ibm.as400.access.AS400JDBCDriver");
    properties.setProperty("MyOwnDataSource.JdbcUrl ", "jdbc:as400:MYHOSTNAME;database name=MYDATABASE;libraries=MYDEFAULTTABLE");
    ic = new InitialContext(properties);
    

    在我的受测班级中有一个查找 java:comp/env/ejb/PrefixEjbNameLocalHome 我不能设置open ejb以生成这种格式的JNDI名称。

    JNDI名称格式的附加属性

    我尝试设置如下格式规则:

    properties.setProperty("openejb.jndiname.format ", "comp/env/ejb/{interfaceClass}");
    

    未使用属性?

    另外,不使用日志配置。我只看到 信息 警告 来自开放EJB的消息,尽管我设置了 log4j.category.OpenEJB.* 诸如此类 调试 痕迹 .

    1 回复  |  直到 15 年前
        1
  •  3
  •   David Blevins    15 年前

    正是“Java”部分正在扰乱测试用例。基本上,ExtReal.RealAlxOnExtIX工厂和“Java:”是互斥的。PrimalCurror类对“Java”或任何“Fo:”查找有特殊的理解,如果它们位于名称的开头,它将 使用您指定的初始_-context_工厂。JNDI中有点令人沮丧的部分。

    如果您查找的名称与日志中打印的名称完全相同,它将起作用。例如,这个日志消息:

    INFO - Jndi(name=WidgetBeanRemote) --> Ejb(deployment-id=WidgetBean)
    

    然后在代码中:

    Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
    // set any other properties you want
    Context context = new InitialContext(p);
    
    Object o = context.lookup("WidgetBeanRemote");