Невозможно развернуть веб-сервис WSDL на основе ejb в Glassfish 3 - PullRequest
1 голос
/ 31 марта 2011

Я пытаюсь развернуть в стекле-фишке сервис weeb, сгенерированный из EJB, но по какой-то причине мой веб-сервис никогда не отображается в Glassfish. Веб-сервис определяется из интерфейса EJB следующим образом:

@Remote
@WebService
public interface TemplateEJBRemote {
    public abstract @WebResult(name="found") Template find(@WebParam(name="templateId", mode=Mode.IN) Long id);
}

Этот интерфейс EJB имеет локальную реализацию:

@Local
@Stateless
public class TemplateEJBImpl implements TemplateEJBRemote {
    @PersistenceContext(unitName=NamingConstants.PERSISTENCE_CONTEXT)
    private EntityManager entityManager;

    @Override
    public Template find(Long id) {
        return entityManager.find(Template.class, id);
    }
}

И оба они определены в модуле war, который модуль ear отправляет Glassfish.

Эти модули производят правильно выглядящие артефакты, включая ear с правильными application.xml:

<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"
version="6">
  <description>This is the project that will deliver a full usable
  EAR including all delivered components. All the project
  dependencies here will be included in this</description>
  <display-name>my-ear</display-name>
  <module>
    <web>
      <web-uri>my-war-0.0.1-SNAPSHOT.war</web-uri>
      <context-root>/my-war</context-root>
    </web>
  </module>
</application>

При развертывании в Glassfish все, что я могу получить, это

E:\java-ext\glassfish3>bin\asadmin list-components --subcomponents
my-ear-0.0.1-SNAPSHOT  <ear, ejb, webservices, web>
  my-war-0.0.1-SNAPSHOT.war  <WebModule>
Command list-components executed successfully.

мне кажется, что если бы мой веб-сервис был действительно развернут, он появился бы ниже моего war подмодуля, нет?

Если нет, что я могу сделать, чтобы мой веб-сервис был правильно определен и развернут?

[ОБНОВЛЕНИЕ 1] Чтобы предоставить больше информации, я создал меньшую конечную точку веб-службы - в знаменитом мире Hello, закодированном так:

@WebService
public class Hello {
    public String hello(String world) {
        return "Salut, "+world+" !";
    }
}

, используя это определение, это идеальный веб-сервис Glassfiosh:

enter image description here

Но, как только я сделаю это бобом, как таковой:

@WebService
@Stateless
public class Hello {
    public String hello(String world) {
        return "Salut, "+world+" !";
    }
}

Все становится немного иначе:

enter image description here

Однако, как сказали мне файлы журнала, HelloService все еще присутствует:

[#|2011-03-31T17:55:55.059+0200|INFO|glassfish3.1|javax.enterprise.webservices.org.glassfish.webservices|_ThreadID=339;_ThreadName=Thread-1;|WS00019: EJB Endpoint deployed

autocat-ear-0.0.1-SNAPSHOT прослушивает по адресу http://perigee -567125f: 8080 / HelloService / Hello | #]

Я пытался применить ту же логику к моему начальному компоненту, но с неудачным результатом (конечно, ошибка 404). Итак, я думаю, есть еще одна проблема, скрытая ниже. Но что на? Понятия не имею.

[ОБНОВЛЕНИЕ 2] Чтобы прояснить ситуацию, EJb, который я пытаюсь развернуть, не виден как веб-сервис в консоли Glassfish, и его URL-адрес не может быть пропрошен любым веб-клиентом.

Ответы [ 2 ]

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

Я смотрю на свою копию «EJB 3 в действии» и там написано:

«Внимательный взгляд на код показывает, что интерфейс конечной точки @WebService выглядит аналогично удаленному интерфейсу.может возникнуть желание пометить один и тот же интерфейс как веб-службой, так и удаленным интерфейсом, например:

@WebService
@Remote
public interface PlaceBid {
  public Long addBid(String bidderID, Long itemID, Double dibPrice);
}

К сожалению, хотя некоторые поставщики допускают это как расширение, это не является частью спецификации.и код, использующий эту конкретную комбинацию атрибутов, не будет переносимым. "

Вам придется удалить @ Remote

0 голосов
/ 31 марта 2011

Вам нужно сделать еще несколько устранения неполадок.Посмотрите журналы в glassfish3/glassfish/domains/domain1/logs.Или, если у вас есть автономные или кластерные узлы, загляните в glassfish3/glassfish/nodes/<nodename>/<instancename>/logs.

Также войдите на страницу администратора "http://localhost:4848", имя пользователя по умолчанию - admin, пароль по умолчанию - adminadmin. Слева находится дерево, найдитеПриложения, тогда ваше ухо должно быть в списке там. Нажмите на него, и вы увидите список модулей и компонентов. Если ваш веб-сервис там указан, вы можете нажать View Endpoint. Есть встроенный тестер, и вы можете получитьURL-адрес wsdl тоже там.

update 1 : у вас нет @WebMethod (operationName = "blah) в вашем hello ().Может быть, если нет WebMethods GlassFish решит, что не стоит делать доступным ваш веб-сервис.

update 2 : более полный пример того, как мой веб-сервис собран внутри уха.Я почти уверен, что вам не нужно разделять классы @WebService и @Stateless, но мне это нравится, потому что он выглядит чище и, кажется, разделяет проблемы.

war:

SomePojo.java:

@WebService(targetNamespace="blah.com")
public class SomePojo {
    @EJB
    private BlahSessionLocal blahSession;

    @WebMethod(operationName = "hello")
    public String hello(@WebParam(name = "user_id") Integer userId) throws Exception {
        return blahSession.hello(userId);
    }
}

ejb jar:

BlahSessionLocal.java

@Local
public interface BlahSessionLocal {
    String hello(Integer userId);
}

BlahSessionBean.java

@Stateless(mappedName = "BlahSession")
public class BlahSessionBean implements BlahSessionLocal {
    public String hello(Integer userId) {
        return "hello user " + userId);
    }
}
...