相关疑难解决方法(0)

使用本地EJB,在同一个Container但不同的耳朵

我正在试图在同一个Glassfish中使用本地EJB,但不同的耳朵.但Glassfish无法找到本地EJB或无法使用

我读到了这一点: 根据JavaEE教程,@ Local bean的客户端必须在与它访问的企业bean相同的JVM中运行.

在第一只耳朵中,我在jar中有本地接口

@Local
public interface MyLocalBean {
  int getNumber(int num3);
} 
Run Code Online (Sandbox Code Playgroud)

在另一个jar中,我有实现

@Stateless
@LocalBean
public class MyLocalBeanImpl implements MyLocalBean,Serializable{
     public MyLocalBeanImpl() {}
     public int getNumber(int num3){......
Run Code Online (Sandbox Code Playgroud)

在第二只耳朵中,在同一条Glassfish中

我在jar里面有本地接口

@Local
public interface MyLocalBean {
int getNumber(int num3);
 } 
Run Code Online (Sandbox Code Playgroud)

在另一个罐子里,我有消费者

@Stateless
@LocalBean
public class BeanConsumer{
@EJB(name="MyLocalBeanImpl")
private MyLocalBean beanlocal;
Run Code Online (Sandbox Code Playgroud)

使用@EJB和(name ="MyLocalBeanImpl")参数时,错误是:

Cannot resolve reference Local ejb-ref name=MyLocalBeanImpl,Local 3.x 
interface =my.package.MyLocalBean,ejb-link=null,lookup=,
mappedName=,jndi-name=,refType=Session|#]
Run Code Online (Sandbox Code Playgroud)

使用@EJB和(name ="my.package.MyLocalBeanImpl")参数,错误是:

Cannot resolve reference Local ejb-ref name=my.package.MyLocalBeanImpl,
Local 3.x interface =my.package.MyLocalBean,ejb-link=null,
lookup=,mappedName=,jndi-name=,refType=Session|#]***
Run Code Online (Sandbox Code Playgroud)

我也尝试使用mappedName

    @Stateless(name="MyLocalBeanImpl",mappedName …
Run Code Online (Sandbox Code Playgroud)

java ejb java-ee ejb-3.0 glassfish-3

7
推荐指数
1
解决办法
2万
查看次数

从另一个EAR访问本地会话Bean?

如何在另一个EAR中调用EAR中的本地会话Bean,这两个EAR都部署在同一个Glassfish v3域中?

这是结构:

Glassfish v3 Domain1

    EAR1
            EAR1-EJB.jar
                    class TestSessionBean           <-- @Stateless
            common.jar
                    interface TestSessionLocal      <-- @Local

    EAR2
            EAR2-EJB.jar
                    class TestSessionBeanClient     <-- @Singleton, @LocalBean
            common.jar
                    interface TestSessionLocal      <-- @Local
Run Code Online (Sandbox Code Playgroud)

TestSessionBean实现了TestSessionLocal,两个EAR都有common.jar.

我需要使用TestSessionBeanClient中的TestSessionBean.我想利用本地会话bean的性能.

我知道我不能在TestSessionBeanClient中使用简单的@EJB调用,所以我试着像这样查找:

InitialContext ic = new InitialContext();
TestSessionLocal tsl = ic.lookup("java:global/EAR1/EAR1-EJB/TestSessionBean!org.test.TestSessionLocal");
Run Code Online (Sandbox Code Playgroud)

这将抛出一个ClassCastException,因为返回的对象不是TestSessionLocal,而是一个代理类,如:

TestSessionLocal_1389930137
Run Code Online (Sandbox Code Playgroud)

为了能够调用它的方法我必须做反思才能找到它的方法.

请帮忙.

先感谢您.

java session ear ejb glassfish-3

2
推荐指数
1
解决办法
6352
查看次数

标签 统计

ejb ×2

glassfish-3 ×2

java ×2

ear ×1

ejb-3.0 ×1

java-ee ×1

session ×1