Segue o código de um cliente que acessa um EJB 3.
public class ClienteEJB {
/**
* @param args
*/
public static void main(String[] args) {
Context context;
try {
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");
context = new InitialContext(properties);
System.out.println(ConverterBean.RemoteJNDIName);
Converter beanRemote = (Converter) context
.lookup(ConverterBean.RemoteJNDIName);
beanRemote.test();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
Os seguintes .jar devem estar no seu classpath
Essa é a maneira mais simples de acessar um EJB.
Todas essas libs se encontram sobre JBOSS_HOME\client
nesse dir existem muitas outras libs, mas neste caso somente com as 4 descritas acima já funciona.
Abaixo estão as classes do meu Bean
O bean
@Stateless
public class ConverterBean implements Converter {
public static final String RemoteJNDIName = ConverterBean.class.getSimpleName() + "/remote";
private BigDecimal euroRate = new BigDecimal("184654");
private BigDecimal yenRate = new BigDecimal("112.58");
public BigDecimal dollarToYen(BigDecimal dollars) {
BigDecimal result = dollars.multiply(yenRate);
return result.setScale(2, BigDecimal.ROUND_UP);
}
public BigDecimal yenToEuro(BigDecimal yen) {
BigDecimal result = yen.multiply(euroRate);
return result.setScale(2, BigDecimal.ROUND_UP);
}
public void test(){
System.out.println("OI EJB Caralho");
}
}
A interface Remota
import java.math.BigDecimal;
import javax.ejb.Remote;
@Remote
public interface Converter {
public BigDecimal dollarToYen(BigDecimal dollars);
public BigDecimal yenToEuro(BigDecimal yen);
public void test();
}
Criei um arquivo build.xml para poder usar o eclipse e fazer o deploy
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="FirstEJB3" basedir="." default="deploy">
<property name="project.libs" value="C:\lib" />
<property name="classes.dir" value="classes" />
<property name="deploy.dir" value="C:\jboss\server\default\deploy" />
<property name="src.dir" value="ejbModule">
</property>
<path id="base.path">
<fileset dir="${project.libs}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="clean" description="Delete all generated files">
<delete dir="${classes.dir}" />
</target>
<target name="compile" description="Compiles the Task">
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}" destdir="${classes.dir}">
<classpath>
<path refid="base.path" />
</classpath>
</javac>
</target>
<target name="deploy" description="JARs the Task" depends="compile">
<jar destfile="${deploy.dir}/${ant.project.name}.jar">
<metainf dir="${src.dir}/META-INF" />
<fileset dir="${classes.dir}">
<include name="**/**/*.class" />
</fileset>
</jar>
</target>
<target name="undeploy" description="Undeploy jar from server">
<delete file="${deploy.dir}/${ant.project.name}.jar" />
</target>
</project>
no dir C:\lib tenho apenas
Funciona que é uma beleza. 