2013-03-19 6 views
1

Я разрабатываю веб-службу RESTful на JBoss 6 Final с RESTeasy. У меня есть внешний EJB, и я хочу ввести EJB в веб-службу.Внешняя ошибка ввода @EJB null с RESTeasy и JBoss

Это код EJB

BeanLocalInterface.java

@Local 
public interface BeanLocalInterface { 
    public String sayHello(); 
} 

Bean.java

@Stateless 
@LocalBinding(jndiBinding = "BeanLocal") 
public class Bean implements BeanLocalInterface { 

    @Override 
    public String sayHello() { 
    return "Hello!"; 
    } 
} 

В другом проекте у меня есть WS:

@Path("/ws") 
public class HelloWorldResource { 

    @EJB(mappedName="BeanLocal") 
    private BeanLocalInterface bean; 

    @GET 
    @Path("/hello") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayHello() {    
     return bean.sayHello(); 
    } 
} 

MyRESTApplicati on.java

public class MyRESTApplication extends Application { 

    private Set<Object> singletons = new HashSet<Object>(); 
    private Set<Class<?>> empty = new HashSet<Class<?>>(); 
    public MyRESTApplication(){ 
     singletons.add(new HelloWorldResource()); 
    } 
    @Override 
    public Set<Class<?>> getClasses() { 
     return empty; 
    } 
    @Override 
    public Set<Object> getSingletons() { 
     return singletons; 
    } 
} 

bean is alwasy null!

Я попытался это решение:

  • Я положил @Stateless на HelloWorldResources
  • У меня есть создать beans.xml в WEB-INF
  • У меня есть изменения MyRESTApplication с

    @ ApplicationPath ("wsapp") Публичный класс MyRESTApplication extends Приложение { }

Вы можете мне помочь?

PS: У меня нет EAR е я не хочу использовать его

+0

Я пытаюсь достичь того же. Скажите, пожалуйста, если вы нашли решение. –

ответ

1

мне удалось решить эту проблему. Во-первых, удалите все настройки из web.xml относительно RESTeasy. Вам нужно только одно объявление -> @ApplicationPath

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("api") 
public class MyRESTApplication extends Application { 
//nothing required here, leave this empty 

} 

Это ваш сеансовый интерфейс.

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 


@Path("MyEJB") 
public interface BeanInterface { 

@Path("{username}") 
@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String sayHello(@PathParam("username") String username); 

} 

Это ваш сеанс.

import javax.ejb.Stateless; 

@Stateless 
public class EJB implements BeanInterface{ 

@Override 
public String sayHello(String username) { 

    return "Hello, "+username; 
} 

} 

С JBOSS 7.1

Использованием: Http: // Localhost: 8080/YOURAPPNAME/API/MyEJB/Fabio

Выходом: Здравствуйте, Фабио

Надеется, что это помогает.

+0

Привет адриану, спасибо за ответ, но не решите мою проблему. У меня есть несколько EJB из моего CRM, и я хочу опубликовать некоторые веб-службы для своего iPad-приложения. Я разрешаю выполнять поиск. –

+0

Я рад, что наткнулся на этот ответ. Это помогло мне запустить CDI в службе RESTeasy. Можете ли вы объяснить, почему содержимое класса MyRESTApplication пусто? Это действительно работает, но почему добавление синглонов приводит к сбою CDI? – dave823

Смежные вопросы