当前位置:首页 > 开发教程 > java教程 >

WebLogic运行嵌入式EJB容器应用

时间:2013-04-27 17:00 来源:网络整理 作者:采集侠 收藏

学习EJB真的是遇到了很多问题,Java EE官方教程都是用的Netbeans与glassfish开发的例子,而我硬要用Eclipse和WebLogic,不知道是我这个组合比较冷门还是大家都是

学习EJB真的是遇到了很多问题,Java EE官方教程都是用的Netbeans与glassfish开发的例子,而我硬要用Eclipse和WebLogic,不知道是我这个组合比较冷门还是大家都是专家,遇到问题很不容易在网上找到答案,只好一点点的拼凑知识点,以及网上差不多相似的问题,才能解决我遇到的问题。今天这个是用WebLogic运行一个嵌入式的EJB容器,不用启动服务器,这样可以很方便的进行单元测试

创建项目

项目结构如下:

WebLogic运行嵌入式EJB容器应用


Standalone是一个简单的Stateless Session Bean,就是返回一个字符串,代码如下:

package com.zxuqian.ejb; import javax.ejb.Stateless; @Stateless public class StandaloneBean { private final String message = "Greetings"; public String returnMessage() { return message; } } StandaloneTest是一个单元测试类,代码如下: package com.zxuqian.ejb.test; import static org.junit.Assert.*; import java.util.Map; import java.util.Properties; import java.util.logging.Logger; import javax.ejb.embeddable.EJBContainer; import javax.naming.Context; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.zxuqian.ejb.StandaloneBean; public class StandaloneTest { private static final Logger logger = Logger.getLogger("com.zxuqian.ejb"); private EJBContainer ec; private Context ctx; @Before public void setUp() throws Exception { Properties props = new Properties(); //props.setProperty(EJBContainer.PROVIDER, "weblogic.ejb.embeddable.EJBContainerProvider"); ec = EJBContainer.createEJBContainer(); ctx = ec.getContext(); } @After public void tearDown() throws Exception { if(ec != null) { ec.close(); } } @Test public void test() throws Exception { logger.info("测试com.zxuqian.ejb.StandaloneBean.returnMessage"); StandaloneBean instance = (StandaloneBean) ctx.lookup("java:global/classes/StandaloneBean"); String expResult = "Greetings"; String result = instance.returnMessage(); assertEquals(expResult, result); } } 在JUnit的setUp方法中做了一些初始化工作,EJBContainer.createEJBContainer是用来初始化EJB嵌入式容器的,然后getContext()获取上下文,进行JNDI查找。在test方法中,先获取StandaloneBean的引用,然后定义期望获得的值“Greetings”,然后比较结果是否一致。 运行项目

在项目的build path中加入weblogic.jar,在weblogic安装目录\wlserver_12.1\server\lib目录下,然后它会自动导入它所需要的包。

WebLogic运行嵌入式EJB容器应用


WebLogic运行嵌入式EJB容器应用


在运行项目时,遇到了不少问题,开始我用了wlfullclient.jar包,结果是找不到Ant的BuildLogger类,后来又用wlclient等等,都是不成功,在google搜索和查阅官方文档后,得知需用weblogic.jar才可完成服务器启动相关的任务,即使是wlfullclient也不支持这些。再运行StandaloneTest,得到如下异常:

java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at com.bea.xbean.validator.Validator.validateAtomicType(Validator.java:1323) at com.bea.xbean.validator.Validator.validateSimpleType(Validator.java:1266) at com.bea.xbean.validator.Validator.validateSimpleType(Validator.java:1202) at com.bea.xbean.validator.Validator.handleText(Validator.java:829) at com.bea.xbean.validator.Validator.textEvent(Validator.java:814) at com.bea.xbean.validator.Validator.nextEvent(Validator.java:244) at com.bea.xbean.validator.ValidatingXMLStreamReader.validate_event(ValidatingXMLStreamReader.java:656) at com.bea.xbean.validator.ValidatingXMLStreamReader.next(ValidatingXMLStreamReader.java:546) 永驻空间不足,看来还得需要设置一下,添加-XX:MaxPermSize=512m 这个配置,可以使Perm size增加,如图:

WebLogic运行嵌入式EJB容器应用


再运行就得到了预期的结果:

WebLogic运行嵌入式EJB容器应用






java教程阅读排行

最新文章