让EJBA(Glassfish A)通过IIOP与EJBB(Glassfish B)通信会导致SecurityException

让EJBA(Glassfish A)通过IIOP与EJBB(Glassfish B)通信会导致SecurityException,glassfish,ejb,corba,securityexception,iiop,Glassfish,Ejb,Corba,Securityexception,Iiop,我想让Alice(EJB A;Glassfish A)与Bob(EJB B;Glassfish B)通信。这两个EJB都部署在不同的Glassfish(Glassfish A和Glassfish B)服务器上。通信应通过IIOP进行。但是,我的实验结果是java.lang.SecurityException。问题是:为什么会这样,如何解决 Alice和Bob都实现远程接口 AliceRemote.java: package com.fu.ba.alice.ejb; import javax.e

我想让Alice(EJB A;Glassfish A)与Bob(EJB B;Glassfish B)通信。这两个EJB都部署在不同的Glassfish(Glassfish A和Glassfish B)服务器上。通信应通过IIOP进行。但是,我的实验结果是java.lang.SecurityException。问题是:为什么会这样,如何解决

Alice和Bob都实现远程接口

AliceRemote.java:

package com.fu.ba.alice.ejb;

import javax.ejb.Remote;

@Remote
public interface AliceRemote {

    void callBob();
}
package com.fu.ba.bob.ejb;

import javax.ejb.Remote;

@Remote
public interface BobRemote {

    void sayHello();
}
BobRemote.java:

package com.fu.ba.alice.ejb;

import javax.ejb.Remote;

@Remote
public interface AliceRemote {

    void callBob();
}
package com.fu.ba.bob.ejb;

import javax.ejb.Remote;

@Remote
public interface BobRemote {

    void sayHello();
}
Alice和Bob的实现也很简单

Alice.java:

package com.fu.ba.alice.ejb;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import com.fu.ba.bob.ejb.BobRemote;
/**
 * Session Bean implementation class Alice
 */
@Stateless(mappedName = "AliceMap")
public class Alice implements AliceRemote {

    @EJB(name = "BobRemote")
    private BobRemote bob;
    /**
     * Default constructor. 
     */
    public Alice() {
    }

    @Override
    public void callBob() {
        System.out.println("Hello this is Alice");
        bob.sayHello();

    }

}
Bob.java:

package com.fu.ba.bob.ejb;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class Bob
 */
@Stateless(mappedName = "BobMap")
public class Bob implements BobRemote {

    /**
     * Default constructor. 
     */
    public Bob() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void sayHello() {
        System.out.println("Hello this is Bob");

    }



}
此外,Alice的EJB包括一个EJB-jar.xml和一个glassfish-EJB-jar.xml,用于指定IIOP通信

ejb-jar.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1">
  <display-name>com.fu.ba.alice.ejb </display-name>
  <ejb-client-jar>com.fu.ba.alice.ejbClient.jar</ejb-client-jar>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
    <enterprise-beans>
        <ejb>
        <ejb-name>Alice</ejb-name>
        <ejb-ref>
            <ejb-ref-name>BobRemote</ejb-ref-name>
            <jndi-name>corbaname:iiop:123.123.123.123:3700#java:global/com.fu.ba.bob/com.fu.ba.bob.ejb/Bob!com.fu.ba.bob.ejb.BobRemote</jndi-name>
       </ejb-ref>
        </ejb>
     </enterprise-beans>
</glassfish-ejb-jar>