Добрый день!
Есть класс:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package itso.bank.session;
import itso.bank.session.view.MyClassRemote;
import javax.ejb.LocalBean;
import javax.ejb.Remote;
import javax.ejb.Stateless;
/**
* Session Bean implementation class MyClass
*/
@Stateless
@Remote(MyClassRemote.class)
@LocalBean
public class MyClass implements MyClassRemote {
private String name;
public MyClass() {
name = "MyClassName";
}
public String getName() {
return name;
}
}
Его инерфейс:
1.
2.
3.
4.
5.
6.
7.
package itso.bank.session.view;
public interface MyClassRemote {
public String getName();
}
И другой класс, метод getMyClass которого возвращает ссылку на класс MyClass:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
package itso.bank.session;
import itso.bank.session.view.EJBBankBeanLocal;
import itso.bank.session.view.EJBBankBeanRemote;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
* Session Bean implementation class EJBBankBean
*/
//@Stateless
//@Stateful
@Singleton
@Startup
@Local(EJBBankBeanLocal.class)
@Remote(EJBBankBeanRemote.class)
public class EJBBankBean implements EJBBankBeanRemote, EJBBankBeanLocal {
private Logger logger;
private String msg;
private int cnt = 0;
@EJB
private MyClass myClass;
@Resource
TimerService timerService;
@Timeout
public void programmaticTimeout(Timer timer) {
cnt = cnt + 1;
msg = String.valueOf(cnt);
logger.info("Programmatic = " + cnt);
}
//@Schedule(second = "*/10", minute = "*", hour = "*", persistent=false)
public void autoProc() {
cnt = cnt + 1;
msg = String.valueOf(cnt);
logger.info("Tick # " + cnt);
}
public String returnMsg() {
logger.info("return msg=" + msg);
return msg;
}
@PostConstruct
void init() {
msg = "resUltatikSUS";
PropertyConfigurator.configure("d:/temp/log4j.properties");
logger = LogManager.exists("TstService.TstConsumer");
TimerConfig timerConfig = new TimerConfig();
timerConfig.setPersistent(false);
Timer timer = timerService.createIntervalTimer(5000, 5000, timerConfig);
logger.info("@PostConstruct");
}
@PreDestroy
void rem() {
logger.info("@PreDestroy");
LogManager.shutdown();
}
public void setMsg(String _msg) {
msg = _msg;
}
public String addMsg(String _msg) {
return msg + " + " + _msg;
}
public EJBBankBean() {
// TODO Auto-generated constructor stub
}
public String getMyClassName() {
return myClass.getName();
}
public MyClass getMyClass() {
return myClass;
}
}
Его интерфейс:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
package itso.bank.session.view;
import itso.bank.session.MyClass;
public interface EJBBankBeanRemote {
public String returnMsg();
public void setMsg(String _msg);
public String addMsg(String _msg);
public String getMyClassName();
public MyClass getMyClass();
}
Клиент:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
package itso.rad8.client.control;
import itso.bank.session.view.EJBBankBeanRemote;
import itso.bank.session.view.MyClassRemote;
import javax.ejb.EJB;
public class BankDesktopController {
@EJB(name="ejb/bank",beanInterface=EJBBankBeanRemote.class)
static EJBBankBeanRemote bank;
@EJB(name="ejb/myclass",beanInterface=MyClassRemote.class)
static MyClassRemote myclass;
public BankDesktopController() {
// TODO Auto-generated constructor stub
}
public void go() {
try {
System.out.println(bank.returnMsg());
System.out.println(myclass.getName());
System.out.println(bank.getMyClassName());
System.out.println(bank.getMyClass());
} catch (Exception ex) {
System.out.print("err=" + ex);
ex.printStackTrace();
}
}
public static void main(String[] args) {
BankDesktopController bankDesktopController = new BankDesktopController();
bankDesktopController.go();
}
}
На строке System.out.println(bank.getMyClass()); падает:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
11
MyClassName
MyClassName
err=java.lang.ClassCastException:
>> SERVER (id=4773e3aa, host=WINDOWSXPPROSP3) TRACE START:
>> java.lang.ClassCastException: itso.bank.session.EJSLocalNSLMyClass_e0152b26 incompatible with java.io.Serializable
>> at itso.bank.session.view._EJSRemote0SGEJBBankBean_a779d219_Tie._get_myClass(_EJSRemote0SGEJBBankBean_a779d219_Tie.java:2)
>> at itso.bank.session.view._EJSRemote0SGEJBBankBean_a779d219_Tie._invoke(_EJSRemote0SGEJBBankBean_a779d219_Tie.java)
>> at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:669)
>> at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:523)
>> at com.ibm.rmi.iiop.ORB.process(ORB.java:523)
>> at com.ibm.CORBA.iiop.ORB.process(ORB.java:1575)
>> at com.ibm.rmi.iiop.Connection.doRequestWork(Connection.java:2992)
>> at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2875)
>> at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:64)
>> at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)
>> at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783)
>> SERVER (id=4773e3aa, host=WINDOWSXPPROSP3) TRACE END.
java.lang.ClassCastException:
>> SERVER (id=4773e3aa, host=WINDOWSXPPROSP3) TRACE START:
>> java.lang.ClassCastException: itso.bank.session.EJSLocalNSLMyClass_e0152b26 incompatible with java.io.Serializable
>> at itso.bank.session.view._EJSRemote0SGEJBBankBean_a779d219_Tie._get_myClass(_EJSRemote0SGEJBBankBean_a779d219_Tie.java:2)
>> at itso.bank.session.view._EJSRemote0SGEJBBankBean_a779d219_Tie._invoke(_EJSRemote0SGEJBBankBean_a779d219_Tie.java)
>> at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:669)
>> at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:523)
>> at com.ibm.rmi.iiop.ORB.process(ORB.java:523)
>> at com.ibm.CORBA.iiop.ORB.process(ORB.java:1575)
>> at com.ibm.rmi.iiop.Connection.doRequestWork(Connection.java:2992)
>> at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2875)
>> at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:64)
>> at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)
>> at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783)
>> SERVER (id=4773e3aa, host=WINDOWSXPPROSP3) TRACE END.
at com.ibm.CORBA.iiop.UtilDelegateImpl.mapSystemException(UtilDelegateImpl.java:241)
at javax.rmi.CORBA.Util.mapSystemException(Util.java:84)
at itso.bank.session.view._EJBBankBeanRemote_Stub.getMyClass(_EJBBankBeanRemote_Stub.java:1)
at itso.rad8.client.control.BankDesktopController.go(BankDesktopController.java:23)
at itso.rad8.client.control.BankDesktopController.main(BankDesktopController.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.ibm.ws.client.applicationclient.launchClient.createContainerAndLaunchApp(launchClient.java:790)
at com.ibm.ws.client.applicationclient.launchClient.main(launchClient.java:495)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.ibm.wsspi.bootstrap.WSLauncher.launchMain(WSLauncher.java:234)
at com.ibm.wsspi.bootstrap.WSLauncher.main(WSLauncher.java:95)
at com.ibm.wsspi.bootstrap.WSLauncher.run(WSLauncher.java:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:340)
at org.eclipse.core.launcher.Main.basicRun(Main.java:282)
at org.eclipse.core.launcher.Main.run(Main.java:981)
at com.ibm.wsspi.bootstrap.WSPreLauncher.launchEclipse(WSPreLauncher.java:376)
at com.ibm.wsspi.bootstrap.WSPreLauncher.main(WSPreLauncher.java:147)
Подскажите, как правильно сделать? Может есть у кого примерчик?