Я пытаюсь установить EJB-контейнер на JBoss Wildfly на моей локальной машине, и мне, с некоторой помощью, удалось запустить и запустить контейнер с распознаванием компонентов Remote EJB.Однако я бы хотел, чтобы они назывались по-разному.
У меня есть свойство NAME во всех интерфейсах с желаемым именем реализующего компонента.Я поместил эту строку в @Stateless(name = Interface.NAME)
.
Однако бин все еще создается с именем реализующего класса.Что мне делать?
Редактировать: Мой EJB Реализация:
@Stateful(mappedName = StateService.NAME)
public class StateServiceImpl implements StateService {
private final Map<SessionId, Deque<State>> sessions;
private final List<StateChangeListener> listeners;
public StateServiceImpl() {
this.sessions = new HashMap<>();
this.listeners = new ArrayList<>();
}
@Override
public State getCurrentState(SessionId sessionId) {
return sessions.get(sessionId).peek();
}
@Override
public State popCurrentState(SessionId sessionId) {
State previousState = sessions.get(sessionId).pop();
State currentState = sessions.get(sessionId).peek();
StateChangeEvent event = new StateChangeEvent(previousState, currentState);
fireStateChangeEvent(event);
return currentState;
}
@Override
public Deque<State> getStateHistory(SessionId sessionId) {
return new LinkedList<>(sessions.get(sessionId));
}
@Override
public void updateState(SessionId sessionId, State state) {
State previousState = sessions.get(sessionId).peek();
if (!sessions.containsKey(sessionId)) {
sessions.put(sessionId, new LinkedList<>());
}
sessions.get(sessionId).push(state);
StateChangeEvent event = new StateChangeEvent(previousState, state);
fireStateChangeEvent(event);
}
@Override
public void addStateChangeListener(StateChangeListener listener) {
listeners.add(listener);
}
@Override
public void removeStateChangeListener(StateChangeListener listener) {
listeners.remove(listener);
}
protected void fireStateChangeEvent(StateChangeEvent event) {
listeners.forEach(listener -> listener.stateChanged(event));
}
}
Мой интерфейс:
/**
* Service interface to manage state changes on the server-side
*/
@Remote
public interface StateService {
String NAME = "StateService";
/**
* returns the most recent state stored for the given session id
*/
State getCurrentState(SessionId sessionId);
/**
* removes the last entry of session from the queue, returning the one before
*/
State popCurrentState(SessionId sessionId);
/**
* returns the whole history of a given client
*/
Deque<State> getStateHistory(SessionId sessionId);
/**
* adds a new session to the stack
*
* @param sessionId the client the state is updated for
* @param state the updated state
*/
void updateState(SessionId sessionId, State state);
void addStateChangeListener(StateChangeListener listener);
void removeStateChangeListener(StateChangeListener listener);
interface StateChangeListener {
void stateChanged(StateChangeEvent event);
}
@AllArgsConstructor
@Getter
class StateChangeEvent {
private final State previousState;
private final State nextState;
}
}
Это привязки:
[INFO] [talledLocalContainer] java:global/web-be/web-impl-0.0.1-SNAPSHOT/MenuServiceImpl!io.ropi.fiveshelly.services.MenuService
[INFO] [talledLocalContainer] java:app/web-impl-0.0.1-SNAPSHOT/MenuServiceImpl!io.ropi.fiveshelly.services.MenuService
[INFO] [talledLocalContainer] java:module/MenuServiceImpl!io.ropi.fiveshelly.services.MenuService
[INFO] [talledLocalContainer] java:global/web-be/web-impl-0.0.1-SNAPSHOT/MenuServiceImpl
[INFO] [talledLocalContainer] java:app/web-impl-0.0.1-SNAPSHOT/MenuServiceImpl
[INFO] [talledLocalContainer] java:module/MenuServiceImpl
Заранее спасибо