一、如果要使用Remote Call:
要設定這幾個檔:
1.$JBOSS_HOME$\server\default\conf\jboss-service.xml
把CallByValue改成true
<mbean code="org.jboss.naming.NamingService"
name="jboss:service=Naming" xmbean-dd="resource:xmdesc/NamingService-
xmbean.xml">
<attribute name="CallByValue">true</attribute>
2.$JBOSS_HOME$\server\default\deploy\ear-deployer.xml
將Isolated和CallByValue改為true
<mbean code="org.jboss.deployment.EARDeployer" name="jboss.j2ee:service=EARDeployer">
<attribute name="Isolated">true</attribute>
<attribute name="CallByValue">true</attribute>
二、EJB Local call做法
1.在EJB的專案設定jboss.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>XXEjb1Bean</ejb-name>
<jndi-name>XXEjb1Bean</jndi-name>
<local-jndi-name>XXEjb1BeanLocal</local-jndi-name>
<method-attributes></method-attributes>
</session>
<assembly-descriptor></assembly-descriptor>
<resource-managers></resource-managers>
</enterprise-beans>
</jboss>
以上這段最主要是要設定local-jndi-name,如果沒有設定的話,local-jndi-name會變成XXEjb1Bean@亂數序號,而造成無法lookup到jndi
,這本來是IDE tool要能有介面設定的,但NetBeans對jboss的支援沒有強到這樣,所以要手工設.
2.前端的程式的call法:
Context ctx = new InitialContext();
XXEjb1LocalHome home = (XXEjb1LocalHome)ctx.lookup("XXEjb1BeanLocal");
XXEjb1Local local;
local = home.create();
local.test();
3.先測測看,如果出現這樣的訊息:
javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract com.wanhai.ejb.XXEjb1Local com.wanhai.ejb.XXEjb1LocalHome.create() throws javax.ejb.CreateException
那就把$JBOSS_HOME$\server\default\deploy\jboss-web.deployer\META-INF\jboss-service.xml的這一行的Value改成true即可解決:
<attribute name="Java2ClassLoadingCompliance">true</attribute>