Клиенты EJB взаимодействуют с ними через локальный / удаленный интерфейс, который реализуют EJB. Клиентские приложения никогда не имеют прямого доступа к реальному экземпляру класса сессионного компонента. Это сделано для того, чтобы сделать возможным пул экземпляров, когда контейнер может повторно использовать экземпляры EJB для обслуживания разных запросов.
Я не уверен, зачем вам нужен доступ к объекту фактического бина (поскольку, очевидно, я не знаю вашего требования). Но если вам все еще нужно создать экземпляр этого, вы можете сделать это следующим образом, используя отражение Class.forName(className).newInstance();
Опять же, экземпляр, который вы создаете таким образом, не является EJB. Это просто POJO, вот и все.
РЕДАКТИРОВАТЬ - после вашего комментария относительно тестирования junit: когда вы обращаетесь к бизнес-методам из JavaSE следующим образом, вы фактически вызываете методы в EJB - только то, что вы взаимодействуете через интерфейс. Поэтому, если вы хотите проверить какие-либо бизнес-методы, вы все равно можете сделать это из объекта, прошедшего поиск JNDI в тесте Junit.
//MyGreatBean implements MyGreat. MyGreat has @Remote, MyGreatBean has @Stateless
ref = jndiContext.lookup("MyGreatBean/remote");
MyGreat bean = (MyGreat) ref;
String retValue = bean.businessMethod();
assertEquals("Success", retValue);
Из предыдущего комментария я чувствую, что вы хотите проверить, какие аннотации были добавлены к фактическому классу EJB - если вы хотите выполнять такую проверку без фактического запуска бизнес-методов, вы можете создать экземпляр используя Class.forName ... как я упоминал выше. Когда вы создаете такой экземпляр, вы можете вызывать только те методы, которые не выполняют никаких «Java EE». Например, вы можете вызвать метод в классе EJB следующим образом
public String someMethod(){
return "I am a POJO but I look like an EJB";
}