1

到目前为止,几天来一直在尝试运行我的第一个 EJB 项目。我的 EJB 项目目前有这个源代码:

package calc;
import javax.ejb.Remote;
@Remote
public interface SessionBeanRemote {
public int add(int a,int b);
}

package calc;
import javax.ejb.Stateless;
@Stateless(name="MySessionBean",mappedName="myCalculator")
public class SessionBean implements SessionBeanRemote {
public int add(int a,int b){
   return a +b;
}
}

其次,有另一个简单的 java 项目,我可以在其中调用 EJB 组件:

Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.enterprise.naming.
SerialInitContextFactory");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(props);
SessionBeanRemote bean =   (SessionBeanRemote) ctx.lookup("myCalculator");
int result = bean.add(3, 4);
System.out.println(result);
ctx.close();

使用的 JAR:gf-client.jar,无需添加其他 JAR,正如 Glassfish 社区所推荐的那样

异常捕获:

java.lang.NoSuchMethodError: com.sun.corba.ee.spi.orbutil.fsm.FSMImpl.(Lcom/sun/corba/ee/spi/orbutil/fsm/StateEngine;Lcom/sun/corba/ee/spi/orbutil /fsm/状态;Z)V

2个其他问题:

  1. context.lookup("java:global:/componentAddress")vscontext.loopup("mappedName") 它们之间有什么区别,何时使用它们?

  2. props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.100")对比 props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost")

4

2 回答 2

0

简单的问题归结为 glassfish 3.0 版,下载了最新的 3.1.2 版,一切正常。

于 2013-05-13T21:36:10.723 回答
0

我现在正在审查并回答您的问题:

  • 使用mappedName是特定于产品的,意味着它不能保证工作并且容器没有义务实现它,但name相反是必须的。
  • 您可能希望以这种方式对其进行注释:@Stateless(name="myCalculator", description="This EJB does some complex calculations.")然后您可以Context.lookup()在代码中使用:Context context = new InitialContext(); MyCalculatorRemote bean = (MyCalculatorRemote) context.lookup("java:global/mycalculator-ejb/myCalculator!example.domain.calculator.MyCalculatorRemote");
  • 此示例假定您的项目按照推荐的命名约定命名为“mycalculator-ejb”,此链接还向您显示了有关此的更多详细信息。
  • 确保您必须在此处添加一些代码才能使其实际工作

对 1) 的回答:java:global/project-ejb/someBean!example.domain.project.SomeRemote是可移植的,而映射的名称不是,这意味着 1st 适用于任何容器,而 2nd 可能不适用。看看这里的官方文档。

对 2) 的回答:首先是使用 IP 为您节省 DNS 查找,其次是使用主机名,这里是默认值 ( localhost)。

我希望这能回答你一些问题,即使是 4 年后。

于 2017-11-02T11:46:58.603 回答