Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Staless Session Bean – EJB2, ví dụ 1

I. Thiết kế

  1. 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;

}

  1. 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.CreateExceptionjavax.ejb.EJBHome.
  • Phải thừa kế interface javax.ejb.EJBHome.
  • Có phương thức create() throws các exception: RemoteExceptionCreateException (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;

}

  1. 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;

}

}

  1. 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>

14 Responses to “Staless Session Bean – EJB2, ví dụ 1”

  1. 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 .

  2. 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.

  3. Quyen said

    lam on cho toi xin tai lieu tong quan cong nghe java. Xin chan thanh cam on

  4. 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.

  5. 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

  6. 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.

  7. 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

  8. 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";
    };

  9. 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

  10. 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…

  11. 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.

  12. 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

  13. 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

  14. 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.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.

Join 2,195 other followers

%d bloggers like this: