FAQ:
1.相比其他轻量级框架,EJB有哪些优势和弊端?
A: 优势是①分布式调用。EJB对象都是通过JNDI来查找和调用的。当然,这些对象可以是Local的也可以是Remote的。
②实例池管理。这个功能目前已经没有多大必要和优势。
2.EJB的目标说: EJB是为了让开发人员将注意力集中在业务逻辑,而非系统级的问题。那么,前者重要还是后者重要呢?前者偏重业务,例如做梳理需求的任务。后者偏重技术。
3.EJB除了提供AOP声明式事物,还提供了注入的功能吗?
A: 通过xml配置,例如"<resource-ref>",可以注入其他组件。
4.客户端都是通过JNDI获取EJB组件吗?
A: 是的。因为分布式组件以及交由EJB容器来管理是EJB的目标。不仅是SessionBean和MDB,EntityBean也是先通过JNDI查找到 Home对象实例(例如“ProductHome”),然后再通过create或findByName等方法获得EntityBean。
5.EJB2.0 主要有哪些配置文件?分别是配置什么信息?
A: ejb-jar.xml和厂商特定的配置文件(例如sun-ejb-jar.xml或者weblogic-ejb-jar.xml)。
6.EJB2.0的组件如何发布成webservice?
A: 需要提供wsdl文件,并定义webservices.xml文件。
7.JNDI有什么命名规范?
8.EJB组件的调用时,Local接口跟Remote接口的区别。
A: Local——客户端跟EJB容器必须在同一个vm中。
Remote——客户端跟EJB容器可以在不同vm中。例如用tomcat下的web应用客户端去调用weblogic下的ejb组件。
9.SLSB分别在EJB2和EJB3中,服务器端开发和客户端调用的区别?
A: 服务器端——
Ejb2上的区别是实现的接口(javax.ejb.EJBObject或javax.ejb.EJBLocalObject)不一样。Ejb3上的区别只是在annotation上。
客户端调用——
Ejb2上的客户端调用区别在,EJBHome和EJBLocalHome。(而EJB3不需要Home接口来创建)Ejb3上的客户端调用没有区别。当然只有在同一VM中才能调用Loca接口的EJB。
Client的调用:
1. SLSB的调用(在weblogic环境下):
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL,"t3://localhost:7001");
return env;
InitialContext ctx = new InitialContext(env);
MySessHome home = (MySessHome) ctx.lookup("MyBisonSessionBean");
MySess sess = home.create();
String result = sess.foo("params");
2. SLSB的调用(在jboss环境下):
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx;
try {
ctx = new InitialContext(props);
LocalHelloWorld helloworld = (LocalHelloWorld) ctx.lookup("LocalHelloWorldBean/local");
out.println(helloworld.SayHello("佛山人"));
} catch (NamingException e) {
out.println(e.getMessage());
}
EAR包的包结构:
无论是.ear包还是.jar包 还是.war包,其下都有相应的META-INF文件夹。
其中.ear包下的META-INF文件夹下有application.xml文件。