Glassfish 3.1 JDNI поиск на EJB3 - PullRequest
       5

Glassfish 3.1 JDNI поиск на EJB3

0 голосов
/ 29 апреля 2011

У меня есть следующие интерфейсы MyLocalBean, MyRemoteBean и без сохранения состояния MyBean реализует MyLocalBean, MyRemoteBean Что из следующего мне не нужно, чтобы получить простойJava-приложение для проверки этого ...

ejb-jar.xml, glassfish-ejb-jar.xml, gf-client.jar

Вот 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">
   <enterprise-beans>
      <session>
         <ejb-name>MyEJB</ejb-name>
         <home>test.ejb.MyLocalBean</home>
         <remote>test.ejb.MyRemoteBean</remote>
         <ejb-class>test.ejb.MyBean </ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>
      </session>
   </enterprise-beans>
</ejb-jar>

что здесь не хватает?Могу ли я искать с помощью MyEJB?

, и вот мой код поиска

InitialContext ic;
ic = new InitialContext();
MyRemoteBean remoteBean = 
        (MyRemoteBean ) ic.lookup("java:comp/env/MyEJB");

[EDIT]

Я обновил ejb-jar.xml следующим образом

<enterprise-beans>
    <session>
        <ejb-name>MyEJB</ejb-name>
        <ejb-class>test.ejb.MyBean</ejb-class>
        <ejb-local-ref>
            <ejb-ref-name>MyEJB</ejb-ref-name>
            <ejb-ref-type>Session</ejb-ref-type>
            <local>test.ejb.MyLocalBean</local>
            <ejb-link>MyEJBClient.jar#MyEJB</ejb-link>
        </ejb-local-ref>
    </session>
</enterprise-beans>

Я получаю сообщение об ошибке ...

не удается развернуть MyBeanEAR Ошибка развертывания для модуля: MyBeanEAR: Произошла ошибка во время развертывания: Исключительная ситуация при развертывании приложения [MyBeanEAR]: Ошибка: Неразрешенный: MyEJBClient.jar # MyEJB.Пожалуйста, смотрите server.log для более подробной информации.

[\ EDIT]

[EDIT]

Привет bkail, позвольте мне решить проблему, используя правильные имена.. Первоначально, это то, что моя IDE eclipse-sts создана по умолчанию

<?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>BatchOverrideEJB</display-name>
  <ejb-client-jar>BatchOverrideEJBClient.jar</ejb-client-jar>
</ejb-jar>

, и вот как я попытался получить доступ к EJB

Properties p = new Properties();
p.put("org.omg.CORBA.ORBInitialHost","localhost");
p.put("org.omg.CORBA.ORBInitialPort","3700");
InitialContext ctx = new InitialContext(p);

ic = new InitialContext(p);

BatchOverrideManagerRemote batchOverrideRemote = 
    (BatchOverrideManagerRemote) ic.lookup("java:comp/env/BatchOverrideEJB");

, запустив это, я получил следующую ошибку

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at za.co.sanlam.batchovveride.test.BatchOverrideTester.main(BatchOverrideTester.java:33)

Я думал, что эта ошибка означает, что мой EJB не привязан к контексту, поэтому я изменил ejb-jar.xml следующим образом

<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">
    <enterprise-beans>
        <session>
            <ejb-name>BatchOverrideEJB</ejb-name>
            <ejb-class>com.test.ejb.BatchOverrideManagerBean</ejb-class>
            <ejb-local-ref>
                <ejb-ref-name>BatchOverrideEJB</ejb-ref-name>
                <ejb-ref-type>Session</ejb-ref-type>
                <local>com.test.batchoverridemanager.ejb.BatchOverrideManagerLocal</local>
                <ejb-link>BatchOverrideEJB</ejb-link>
            </ejb-local-ref>
        </session>
    </enterprise-beans>
</ejb-jar

, но теперь я получаю javax.naming.NameAlreadyBoundException: использовать перепривязку для переопределения [/ EDIT]

1 Ответ

1 голос
/ 30 апреля 2011

Попробуйте <ejb-link>MyEJB</ejb-link>.Тем не менее, test.ejb.MyLocalEJB не похоже на домашний интерфейс, расширяющий EJBHome, так что, возможно, вы хотели использовать <business-remote> вместо <remote> и <home>?Если вы используете контейнер, поддерживающий EJB 3.1, вам, вероятно, будет проще использовать аннотации:

@Stateless
public class MyBean implements MyLocal { ... }
@Local
public interface MyLocal { ... }
@Remote
public interface MyRemote { ... }

В качестве отступления MyLocalBean и MyRemoteBean являются необычными именами для бизнес-интерфейсов.Обычно суффикс Bean зарезервирован для самого класса EJB.

Правка № 2:

Для второго редактирования см. Следующую ссылку:

http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#nonJavaEEwebcontainerRemoteEJB

...