在JavaDelegate中使用远程EJB时出错 - Activiti

时间:2018-03-07 11:02:17

标签: java java-ee ejb alfresco activiti

我遇到以下问题:

我需要从实现Activity的JavaDelegate(alfresco)的类中使用EJB Remote。

当我的工作流到达ServiceTask时我会发生这种情况(我正在使用“任务类型”:ExpressionDelegate,但它也发生在“任务类型”:Class),此任务使用FooDelegate,在此类中它包含一个EJB我无法使用它,它在使用EJB时​​总是给我NullPointerException错误。

enter image description here

在服务任务的属性中: enter image description here

但也使用了“任务类型:类”

我的HelloWorldBean代码是:

    @Stateless
    public class DemoImpl implements JavaDelegate {

        @EJB(name = "FooServ")
        private FooInterface fooServ;

        @Override
        public void execute(DelegateExecution execute) throws Exception {
            System.out.println(">>>> hello world my name is " + fooServ.getNameDefault() + " <<<<");
        }
    }

在我的文件“Activiti.cfg.xml”中有这个:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
  ...
  ..

  <bean id="HelloWordBean" class="com.development.workflow.HelloWordClass"/>
  <jee:remote-slsb id="FooServ" resource-ref="false" business-interface="com.production.FooInterface" jndi-name="java:global/production-ejb/FooServ" />

  ..
  ...

</beans>

我还在jboss-web.xml中声明我的远程ejb:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web version="8.0" xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/schema/jbossas/jboss-web_8_0.xsd">
  <context-root>/demo</context-root>
  <virtual-host>demo-host</virtual-host>
  <security-domain>demo-realm</security-domain>
  <resource-ref>
    <res-ref-name>jdbc/demo</res-ref-name>
    <jndi-name>java:/platform/jdbc/demo-flow</jndi-name>
  </resource-ref>
    <ejb-ref-name>FooServ</ejb-ref-name> 
    <jndi-name>java:/production/FooServ</jndi-name>
  </ejb-ref>
</jboss-web>

如您所见,在两个xml文件中声明FooServ Remote EJB,但我无法使其工作,我总是在使用远程EJB的行中收到JavaNullPointerException错误。

我的EJB Remote的代码是:

package com.production;

public interface FooInterface {

  String getNameDefault();

}    


package com.production.Impl;

import javax.ejb.Local;
import javax.ejb.Stateless;

@Stateless
@Local(FooInterface.class)
public class FooImplement implements FooInterface {

  @Override
  public String getNameDefault() {
    return "I am EJB remote";
  }

}

我正在使用wildfly 10,jee7,activiti 5.2.2。

如何在项目中使用该EJB?提前致谢:D

1 个答案:

答案 0 :(得分:0)

非常感谢@Philippe,我实现了一个显式查找(使用JNDI),这对我有用。我使用的代码是:

public FooService getEJB() {
    try {
        Context ctx = new InitialContext();
        Object obj = ctx.lookup("java:/production/FooServ");
        return (FooService) obj;
    } catch (NamingException e) {
        e.printStackTrace();
    }
}