Staless Session Bean – EJB2, ví dụ 1
I. Thiết kế
- Tạo remote interface
- Remote interface định nghĩa tất cả các business method của EJB, không chứa các tác vụ cấp hệ thống (persistence, security, transaction, …). Các business method này sẽ được cài đặt trong lớp implements.

- Remote interface cần phải:
- Có visibility modifier là public (để có thể triệu gọi từ xa)
- Thừa kế interface javax.ejb.EJBObject.
- Các phương thức trừu tượng ở đây phải throws java.rmi.RemoteException.
Ví dụ ở đây ta tạo 1 phương thức đặc tả nghiệp vụ thao tác với các số dựa trên operator được cung cấp.
package calc;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface CalcRemote extends EJBObject{
public double DoCalculate(double a, double b, char operator) throws RemoteException;
}
- Tạo home interface
- Home interface hoạt động như một factory, định nghĩa các phương thức cho phép client tạo và tìm các đối tượng EJB.

- Home interface cần phải:
- import các giao diện: java.io.Serializable, java.rmi.RemoteException, javax.ejb.CreateException và javax.ejb.EJBHome.
- Phải thừa kế interface javax.ejb.EJBHome.
- Có phương thức create() throws các exception: RemoteException và CreateException (Có thể có các exception khác của lập trình viên) và trả về một đối tượng có kiểu remote interface.
package calc;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface CalcHome extends EJBHome{
CalcRemote create()throws RemoteException,CreateException;
}
- Tạo lớp EJB
- Lớp EJB cài đặt:
- Tất cả các business method khai báo trong remote interface.
- Các phương thức dùng cho container (phương thức callback).
- Lớp EJB cần phải:
- Lớp EJB phải thừa kế interface javax.ejb.SessionBean.
package calc;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class CalcBean implements SessionBean {
private SessionContext context;
public void setSessionContext(SessionContext aContext) {
context = aContext;
}
public void ejbActivate() { }
public void ejbPassivate() { }
public void ejbRemove() { }
public void ejbCreate() {
}
public double DoCalculate(double a, double b, char operator){
double x = 0;
switch (operator) {
case ‘+’:
x = a + b;
break;
case ‘-’:
x = a – b;
break;
case ‘*’:
x = a * b;
break;
case ‘/’:
if (b == 0) {
System.out.println(“L?i chia cho zero”);
b=1000000000;
}
x = a / b;
break;
}
return x;
}
}
- Tạo client truy xuất Stateless Session Bean
Mô hình làm việc tổng quát:

a) Định vị home interface
- Client phải dùng JNDI thông qua Naming Service để định vị một đối tượng home cụ thể.
- Thiết lập thuộc tính môi trường (Initial Context Factory tạo initial context với cấu trúc thư mục JNDI dùng, vị trí server cung cấp dịch vụ Naming, …).
java.uitl.Properties props = System.getProperties();
props.put( Context.INITIAL_CONTEXT_FACTORY, “org.jnp.interfaces.NamingContextFactory” );
props.put( Context.PROVIDER_URL, “127.0.0.1:1099″ );
props.put( Context.URL_PKG_PREFIXES, “org.jboss.naming” );
+ Tạo JNDI naming context như một giao diện giữa client và JNDI.
Context ctx = new InitialContext();
b) Tìm đối tượng thông qua JNDI
- Sau khi tạo JNDI context, phương thức lookup() của đối tượng lớp InitialContext được sử dụng để định vị đối tượng có tên JNDI chỉ định trong tập tin jboss.xml.
Object obj = ctx.lookup( “calc/Calculator” );
c) Thu hẹp (narrow) tham chiếu thành một đối tượng
- Đối tượng trả về bởi phương thức lookup() phải được ép thành kiểu home interface. Đối tượng này giữ một tham chiếu đến home interface. Điều này được thực hiện bởi phương thức PortableRemoteObject.narrow(), có hai tham số: đối tượng do lookup() trả về và tên file class của home interface. Lớp PortableRemoteObject được dùng thay cho lớp UnicastRemoteObject trong RMI để bảo đảm tính tương thích với các giao thức khác JRMP, ví dụ RMI/IIOP.
CalcHome home = (CalcHome)PortableRemoteObject.narrow(obj,CalcHome.class);
d) Sinh ra một thực thể EJB
- EJB sẽ triệu gọi phương thức create() của đối tượng home để trả về đối tượng EJB (đối tượng remote interface).
CalcRemote calc = home.create();
e) Triệu gọi các business method (phương thức nghiệp vụ)
- Remote interface định nghĩa các phương thức nghiệp vụ thực hiện trong lớp EJB, client sẽ triệu gọi các phương thức này thông qua đối tượng EJB vừa được phương thức create() trả về.
double r=calc.DoCalculate(6,7,’+');
f) Code hoàn chỉnh
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import calc.*;
public class client
{
public static void main(String[]agrs)
{
try {
Properties props = System.getProperties();
props.put( Context.INITIAL_CONTEXT_FACTORY,
“org.jnp.interfaces.NamingContextFactory” );
props.put( Context.PROVIDER_URL, “127.0.0.1:1099″ );
props.put( Context.URL_PKG_PREFIXES, “org.jboss.naming” );
Context ctx = new InitialContext();
Object obj = ctx.lookup( “calc/Calculator” );
CalcHome home = (CalcHome)PortableRemoteObject.narrow(obj,CalcHome.class);
CalcRemote calc = home.create();
double r=calc.DoCalculate(6,7,’+');
System.out.println(“=====================”);
System.out.println(r);
System.out.println(“=====================”);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
II. Triển khai
- Cần có gói sau trong trong CLASSPATH, hoặc tham chiếu đến gói này trong IDE cụ thể.(các gói này đều nằm trong thư mục client của thư mục cài đặt Jboss)
- jnp-client.jar
- jboss-common-client.jar
- concurrent.jar
- jboss-client.jar
- jboss-serialization.jar
- jboss-remoting.jar
- jbosssx-client.jar
- jboss-transaction-client.jar
1. Biên dịch các file java:
Trong command-line, gõ: javac *.java
Chú ý: Đảm bảo việc biên dịch không xảy ra lỗi nào.
2. Tạo thư mục calc, copy các file class mới biên được vào đấy:

3. Tạo thư mục META-INF
Tạo các file deployment descriptor trong thư mục này:
a. File ejb-jar.xml có nội dung
|
<?xml version=”1.0″ encoding=”UTF-8″ ?> <ejb-jar version=”2.1“ xmlns=”http://java.sun.com/xml/ns/j2ee“ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“ xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd“> <enterprise-beans> <session> <ejb-name>Calculator</ejb-name> <home>calc.CalcHome</home> <remote>calc.CalcRemote</remote> <ejb-class>calc.CalcBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar> |
b. File jboss.xml có nội dung
|
<?xml version=”1.0″ encoding=”UTF-8″ ?> <jboss> <enterprise-beans> <session> <ejb-name>Calculator</ejb-name> <jndi-name>calc/Calculator</jndi-name> </session> </enterprise-beans> </jboss>
|
c. Tạo File MANIFEST.MF
|
Manifest-Version: 1.0 Created-By: 1.6.0 (Sun Microsystems Inc.) |
4. Đóng gói ứng dụng EJB
Dùng tool jar được cung cấp sẵn của jdk đóng gói ứng dụng
jar cvf calculator.jar calc/*.class META-INF/*.xml
E:\__EJB>jar cvf calculator.jar calc/*.class META-INF/*.xml
added manifest
adding: calc/CalcBean.class(in = 989) (out= 570)(deflated 42%)
adding: calc/CalcHome.class(in = 252) (out= 184)(deflated 26%)
adding: calc/CalcRemote.class(in = 217) (out= 169)(deflated 22
adding: META-INF/ejb-jar.xml(in = 580) (out= 293)(deflated 49%
adding: META-INF/jboss.xml(in = 223) (out= 135)(deflated 39%)
Ta có thể dùng winrar để xem nội dung gói calculator.jar có cấu trúc như sau:
|
calc CalcBean.class CalcHome.class CalcRemote.class META-INF ejb-jar.xml jboss.xml MANIFEST.MF |
5. Chạy JBoss server
- Chạy %JBOSS_HOME%\bin\run.bat trong một console.
…
22:10:16,897 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080
22:10:16,928 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
22:10:16,990 INFO [Server] JBoss (MX MicroKernel) [4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)] Started in 22s:869ms
6. Triển khai gói calculator.jar
- Sao chép gói calculator.jar vào thư mục %JBOSS_HOME%\ server\default\deploy\ , lập tức thấy chi tiết triển khai gói này trong console chạy JBoss server, đây là khả năng hot deployment của JBoss.
…
22:14:00,492 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
22:14:00,523 INFO [Server] JBoss (MX MicroKernel) [4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)] Started in 21s:637ms
22:15:00,988 INFO [EjbModule] Deploying Calculator
22:15:01,066 INFO [ProxyFactory] Bound EJB Home ‘Calculator’ to jndi ‘calc/Calculator’
22:15:01,066 INFO [EJBDeployer] Deployed: file:/C:/javaSoft/jboss-4.2.2.GA/server/default/deploy/calculator.jar
7. Sử dụng client để truy xuất EJB
Tạo thư mục client, copy tập tin client.class vào đấy
Tạo thư mục calc trong thư mục client, copy 2 tập tin CalcHome.class, CalcRemote.class vào đấy
Mở cửa sổ command-line, đưa thư mục hiện hành về thư mục client ở trên, chạy lệnh: java client
Kết quả như sau:
|
Microsoft Windows [Version 6.0.6000] Copyright (c) 2006 Microsoft Corporation. All rights reserved.
E:\__EJB\client>java client ============================================ 13.0 ============================================
E:\__EJB\client> |
hoang said
bài này lúc chạy báo lỗi như vầy :
javax.naming.NameNotFoundException: calc not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at client.main(client.java:43)
em ko hiểu xin thầy giải thích dùm em .
vovanhai said
tôi thử lại rồi, chạy ngon lành! em xem kỹ lại coi.
Nếu mà chưa chạy được nữa thì mail cho tôi.
Quyen said
lam on cho toi xin tai lieu tong quan cong nghe java. Xin chan thanh cam on
tmtuan said
anh oi cho e hoi a co tai lieu nao co ban ve tao mot session bean, entity bean bang net bean 6.7 hok, lam on giup e voi, neu co xin vui long gui qua mail : tmtuan@cusc.ctu.edu.vn, e cam on anh rat nhieu.
Quốc Khánh said
Chào anh.
Ví dụ này của anh tôi làm trên EJB3. Khi tôi deploy trên server thì nó luôn báo
java.lang.ClassNotFoundException vovanhai.wordpress.com.CalcSessionBean.
Tôi có file jar của project này mà bạn đã build và tôi đối chiếu với file jar tôi build, tôi thấy không khác gì nhau cả. Không hiểu sao lại bị lỗi như thế.
Thêm nữa, khi tôi đổi tên của các interface và class bean, đóng gói và deploy lại thì cũng bị lỗi y chang như vậy.
Bạn vui lòng chỉ giúp tôi xem tại sao lại bị lỗi như thế.
Cám ơn bạn
vovanhai said
Nếu là EJB3 thì không cần làm các bước rườm rà như vầy. Dùng annotation là ok.
Quốc Khánh said
Cho tôi hỏi thêm một vấn đề nữa:
Ở phần này
props.put( Context.PROVIDER_URL, “127.0.0.1:1099″ );
Nếu tôi thay bằng
props.put( Context.PROVIDER_URL, “192.168.0.5:1099″ );
với IP đó là IP của máy tôi thì nó báo lỗi:
Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server /192.168.0.5:1099 [Root exception is java.net.ConnectException: Connection refused: connect]
Caused by: java.net.ConnectException: Connection refused: connect
Tôi đã search và vẫn chưa tìm thấy solution cho vấn đề này.
Mục đích của tôi là đang test một máy khác gọi EJB Bean này nhưng đến cả IP máy của tôi mà nó cũng không chạy được.
Mong sớm nhận được anh giải đáp vấn đề này.
Cám ơn anh
vovanhai said
Bạn cần file client.policy để có thể kết nối. ! file policy mẫu chẳng hạn:
grant {
permission java.net.SocketPermission "*:1024-65535", "connect";
};
Khang said
Em lam theo vi du ma no’ bao’ loi the nay
07:46:09,107 INFO [EJBDeployer] Undeploying: file:/C:/jboss-4.2.2.GA/server/def
ault/deploy/welcome.jar
07:46:14,153 ERROR [MainDeployer] Could not initialise deployment: file:/C:/jbos
s-4.2.2.GA/server/default/deploy/calculator.jar
org.jboss.deployment.DeploymentException: Invalid XML: file=META-INF/jboss.xml@7
:1; – nested throwable: (org.xml.sax.SAXParseException: The processing instructi
on target matching “[xX][mM][lL]” is not allowed.)
at org.jboss.metadata.XmlFileLoader.getDocument(XmlFileLoader.java:342)
at org.jboss.metadata.XmlFileLoader.getDocument(XmlFileLoader.java:272)
at org.jboss.ejb.EJBDeployer.init(EJBDeployer.java:478)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
……
Em co lam theo 1 vi du khac trong sach thi no bao loi :
07:54:47,403 ERROR [MainDeployer] Could not create deployment: file:/C:/jboss-4.
2.2.GA/server/default/deploy/welcome.jar
org.jboss.deployment.DeploymentException: Invalid XML: file=jar:file:/C:/jboss-4
.2.2.GA/server/default/tmp/deploy/tmp790982520999685028welcome.jar!/META-INF/ejb
-jar.xml@85:2; – nested throwable: (org.xml.sax.SAXParseException: White spaces
are required between publicId and systemId.)
ko biet 2 loi nay la loi j vay thay. Em cam on
Phamquang said
Thầy cho em hỏi về cấu trúc của EJB gồm 3 tầng là :client => session beans => Entity beans, nhưng em chỉ dc dạy có 2 tầng ak..chỉ có cilent =>session beans hoặc client =>Entity Beans….mà em muốn tìm hiểu về cấu trúc kết nối 3 tầng..thầy có tài liệu nào hay có 1 ví dụ cụ thể nào cho em xin với…em cám ơn thầy…
vovanhai said
Có lẽ khi em học trên lớp thầy cô hay dùng demo là client(web/app) gọi session bean/ entity bean. Thật ra thì đúng nguyên tắc mô hình sẽ giải quyết từ client(presentaion) gọi SessionBean(Business Logic), từ SSB gọi Entitybean(DataAccess Layer).
Tài liệu thì em có thể search trên mạng, rất nhiều. Trong Netbean bạn có thể tạo các entity beans từ DB rồi tạo các SessionBean từ Entities thế là xong. Tôi sẽ sớm có bài viết về vấn đền này.
vovanhai said
Chỉ cần thêm vào CLASSPATH 2 file jar sau là có thể chạy client đơn giản:
.;%JBOSS_HOME%\client\jbossall-client.jar;%JBOSS_HOME%\server\default\lib\jboss-j2ee.jar
luclt said
Em mới học EJB em viết 1 ví dụ web EJB dùng J2EE 1.4, netbean 6.9.2 và server JBoss sau khi em deploy nó báo lỗi như sau ai biết chỉ em với :
21:36:32,541 INFO [TomcatDeployer] undeploy, ctxPath=/viduConsumeviduModule, warUrl=…/tmp/deploy/tmp7343744715874715397viduConsumeviduModule-exp.war/
21:36:32,725 INFO [TomcatDeployer] deploy, ctxPath=/viduConsumeviduModule, warUrl=…/tmp/deploy/tmp8691620415443565369viduConsumeviduModule-exp.war/
21:36:38,877 INFO [STDOUT] Naming available
21:36:38,896 ERROR [LogInterceptor] EJBException in method: public abstract luclt.dea.viduSessionBeanRemote luclt.dea.viduSessionBeanRemoteHome.create() throws javax.ejb.CreateException,java.rmi.RemoteException:
javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract luclt.dea.viduSessionBeanRemote luclt.dea.viduSessionBeanRemoteHome.create() throws javax.ejb.CreateException,java.rmi.RemoteException
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invokeHome(StatelessSessionContainer.java:175)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:189)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invokeHome(StatelessSessionInstanceInterceptor.java:98)
at org.jboss.ejb.plugins.CallValidationInterceptor.invokeHome(CallValidationInterceptor.java:56)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:125)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:145)
at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:132)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:107)
at org.jboss.ejb.SessionContainer.internalInvokeHome(SessionContainer.java:637)
at org.jboss.ejb.Container.invoke(Container.java:981)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:209)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:195)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:184)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
at $Proxy70.create(Unknown Source)
at luclt.Process.processRequest(Process.java:49)
at luclt.Process.doPost(Process.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:662)
21:36:39,044 ERROR [STDERR] java.rmi.ServerException: EJBException:; nested exception is:
javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract luclt.dea.viduSessionBeanRemote luclt.dea.viduSessionBeanRemoteHome.create() throws javax.ejb.CreateException,java.rmi.RemoteException
21:36:39,044 ERROR [STDERR] at org.jboss.ejb.plugins.LogInterceptor.handleException(LogInterceptor.java:365)
21:36:39,044 ERROR [STDERR] at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:136)
21:36:39,047 ERROR [STDERR] at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:107)
21:36:39,047 ERROR [STDERR] at org.jboss.ejb.SessionContainer.internalInvokeHome(SessionContainer.java:637)
21:36:39,047 ERROR [STDERR] at org.jboss.ejb.Container.invoke(Container.java:981)
21:36:39,047 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
21:36:39,048 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
21:36:39,048 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
21:36:39,048 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:597)
21:36:39,048 ERROR [STDERR] at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
21:36:39,048 ERROR [STDERR] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
21:36:39,048 ERROR [STDERR] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
21:36:39,048 ERROR [STDERR] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
21:36:39,048 ERROR [STDERR] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
21:36:39,048 ERROR [STDERR] at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
21:36:39,048 ERROR [STDERR] at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
21:36:39,048 ERROR [STDERR] at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:209)
21:36:39,048 ERROR [STDERR] at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:195)
21:36:39,049 ERROR [STDERR] at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
21:36:39,049 ERROR [STDERR] at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
21:36:39,049 ERROR [STDERR] at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:184)
21:36:39,049 ERROR [STDERR] at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
21:36:39,049 ERROR [STDERR] at $Proxy70.create(Unknown Source)
21:36:39,049 ERROR [STDERR] at luclt.Process.processRequest(Process.java:49)
21:36:39,049 ERROR [STDERR] at luclt.Process.doPost(Process.java:92)
21:36:39,049 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
21:36:39,050 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
21:36:39,050 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
21:36:39,050 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
21:36:39,050 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
21:36:39,050 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
21:36:39,050 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
21:36:39,050 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
21:36:39,050 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
21:36:39,050 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
21:36:39,051 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
21:36:39,051 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
21:36:39,051 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
21:36:39,051 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
21:36:39,051 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
21:36:39,051 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
21:36:39,051 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
21:36:39,052 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624)
21:36:39,052 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
21:36:39,052 ERROR [STDERR] at java.lang.Thread.run(Thread.java:662)
21:36:39,052 ERROR [STDERR] Caused by: javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract luclt.dea.viduSessionBeanRemote luclt.dea.viduSessionBeanRemoteHome.create() throws javax.ejb.CreateException,java.rmi.RemoteException
21:36:39,052 ERROR [STDERR] at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invokeHome(StatelessSessionContainer.java:175)
21:36:39,052 ERROR [STDERR] at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:189)
21:36:39,053 ERROR [STDERR] at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invokeHome(StatelessSessionInstanceInterceptor.java:98)
21:36:39,053 ERROR [STDERR] at org.jboss.ejb.plugins.CallValidationInterceptor.invokeHome(CallValidationInterceptor.java:56)
21:36:39,053 ERROR [STDERR] at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:125)
21:36:39,053 ERROR [STDERR] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
21:36:39,053 ERROR [STDERR] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
21:36:39,053 ERROR [STDERR] at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:145)
21:36:39,053 ERROR [STDERR] at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:132)
21:36:39,053 ERROR [STDERR] … 43 more
doannx said
Lỗi này của bạn có thể là do chưa import đủ các gói jar cần thiết ở client side.
Theo lý thuyết thì chỉ cần import 4 gói jar sau là đủ: jbossall-client.jar, jboss-javaee.jar (hoặc jboss-j2ee), jnp-client.jar và jnpserver.jar.
Tuy nhiên trong nhiều trường hợp phải import thêm các gói jar sau mới có thể thực thi bình thường: concurrent.jar, jboss-client.jar, jboss-common-core.jar, jboss-integration.jar, jboss-logging-spi.jar, jboss-remoting.jar, jboss-security-spi.jar, jboss-serialization.jar, jbosssx-client.jar.