У меня есть приложение java ee в стиле hello-world, использующее maven3 glassfish3 и javaee6.
У меня есть простой сессионный компонент:
package com.mytest.beans;
import com.mytest.interfaces.HelloBeanRemote;
import javax.ejb.Stateless;
@Stateless
public class HelloBean implements HelloBeanRemote{
@Override
public String sayHello() {
return "well hello there";
}
}
это предоставляет удаленный интерфейс. этот интерфейс находится в том же модуле, но в другом пакете.
package com.mytest.interfaces;
import javax.ejb.Remote;
@Remote
public interface HelloBeanRemote {
public String sayHello();
}
Я использую maven-ejb-plugin для создания артефакта ejb-client, от которого зависит мой клиентский модуль.
Я написал это простое приложение-клиент
package com.mytest;
import com.mytest.interfaces.HelloBeanRemote;
import java.awt.Container;
import javax.ejb.EJB;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* Enterprise Application Client main class.
*
*/
public class Main {
@EJB
private static HelloBeanRemote hb;
public static void main( String[] args ) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = frame.getContentPane();
JButton button = new JButton("i have not been pushed");
pane.add(button);
frame.pack();
frame.setVisible(true);
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
}
button.setText(hb.sayHello());
}
}
это сработало для меня, как и ожидалось. однако, когда я изменил свой app-client на это:
package com.mytest;
import com.mytest.interfaces.HelloBeanRemote;
import java.awt.Container;
import javax.ejb.EJB;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* Enterprise Application Client main class.
*
*/
public class Main {
public static void main( String[] args ) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = frame.getContentPane();
MyButton button = new MyButton("i have not been pushed");
pane.add(button);
frame.pack();
frame.setVisible(true);
}
}
...
package com.mytest;
import com.mytest.interfaces.HelloBeanRemote;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.ejb.EJB;
import javax.swing.JButton;
public class MyButton extends JButton implements ActionListener{
@EJB
private HelloBeanRemote hb;
public MyButton(String string){
super(string);
addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
setText(hb.sayHello());
}
}
это не будет работать должным образом при нажатии кнопки.
Может кто-нибудь, пожалуйста, просветите меня!
Большое вам спасибо.