2011-04-15 1 views
1

Я знаю, что не должен использовать отражение, но это временное решение, пока ...Java отражение не изменяя мои @Named переменного боба

У меня есть 1:

@Named("PoiBean") 
@SessionScoped 
public class PoiBean implements ActionContext, Serializable { 
    private String name = "www"; 

    @EJB 
    private NavigationServiceRemote nav; 

@PostConstruct 
private void testReflection() { 
    try { 
     nav.TestMe(this); 
    } catch (NoSuchMethodException ex) { 
     Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IllegalArgumentException ex) { 
     Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (InvocationTargetException ex) { 
     Logger.getLogger(PoiBean.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public void prepareListAllForm() { 
    this.setName("test me"); 
    } 
} 

У меня есть 2:

@Stateless(mappedName="NavigationService") 
public class NavigationServiceBean implements NavigationServiceRemote, NavigationContext { 
    @Override 
    public void TestMe(ActionContext ctx) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 

     Method method = ctx.getClass().getMethod("prepareListAllForm", new Class[] {}); 
     method.invoke(ctx, new Object[] {}); 
     } 

Объясняет: при запуске PoiBean EJB nav вводится, после чего в @PostConstruct я вызываю метод тестирования TestMe.

Когда я отлаживаю, перед тестированием меня name = www, внутри PoiBean :: prepareListAllForm (вызванный отражением), переменная имени изменяется = "проверить меня", а после возвращения имя возвращается на www.

Это как отражение вызывает prepareListAllForm на копии PoiBean ...

То, что я пытаюсь достичь сейчас, чтобы изменить эту переменную с помощью функции prepareListAllForm, вызывается с помощью отражения от @EJB.

ответ

0

Является ли NavigationServiceRemote аннотированным @Remote? Удаленный вызов интерфейса EJB будет маршаллировать/отменять аргументы и возвращать значения, поэтому метод TestMe получит копию PoiBean. Вам нужно будет использовать локальный EJB, если вы хотите изменить экземпляр.

+0

Да действительно отмечен как удаленный интерфейс. Это знак, который я должен прочитать больше. Tnx для вашего ответа! – Baiazid

+0

Если ответ решил вашу проблему, вы должны «принять» его, чтобы улучшить свой рейтинг (и мой!). –

+0

Я сделал сейчас, извините, что впервые в этом веб-сайте и не знал, как это работает. – Baiazid

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