Eclipse+Weblogic 12开发简单的Enterprise Application

学到EJB方面的内容,遇到了很多问题,翻阅了无数遍Java EE和Weblogic的官方文档,在google上进行了无数次搜索都没有答案,可能我要找的答案太冷门。这一切都起源于Java EE官方文档里的“cart”例子,我被他迷惑了整整一天。因为这个项目在Netbeans+GlassFish环境下可以运行的很好,直接右击项目,点运行就可以了。结果拿到Eclipse来,碰到了一堆问题,不是注入的EJB变量为Null要不就是找不到类。经过一天的摸索,现在终于有点头绪了,现在整理出来,希望可以帮助大家。而大家可能有更好的方法或者对我的叙述有疑问和意见,请大胆评论。大笑

一、应用环境

本文假设您已经有了Eclipse或Spring Source Tool和Weblogic的配置经验。本项目是用Application Client project来访问EJB模块,比直接用Java EE容器管理的Web项目要复杂,因为web client与EJB模块在同一容器,可以很方便的使用Dependency Injection(依赖注入)。而Application Client是运行在单独的Application Client Container之中,它需要与Java EE容器交互,获取容器里的资源,就需要一些额外的设置。

所用工具:Spring Source Tool(本质上还是Eclipse,通用),weblogic command tool.

源代码:Github --- Hello project

二、创建项目


1、新建一个Enterprise Application Project。

右击Package Explorer空白处,选择New->Other.


然后在Java EE下面选择Enterprise Application Client



点Next,填写项目基本信息,在这里我新建了一个hello项目,运行环境就选择weblogic。



在这个界面勾选Generate application.xml deployment descriptor,然后点击New Module来创建EJB和Client。


取消Web module,这里我们不创建Web Client和Connector。为Application client和EJB模块命名,之后点finish。



Eclipse就为我们生成了如下三个项目,helloClient-应用程序客户端,helloEJB-EJB模块,还有一个hello是负责把这两个模块打包成EAR部署到Weblogic。



2、编写EJB模块代码

EJB模块的代码结构如下:



其中hello.ejb.interfaces包下的Hello.java是一个远程业务接口,即运行在不同Java虚拟机里的client也可以访问它提供的服务,代码如下:

[java]  view plain  copy
  1. package hello.ejb.interfaces;  
  2.   
  3. import javax.ejb.Remote;  
  4.   
  5. @Remote  
  6. public interface Hello {  
  7.       
  8.     public String sayHello(String name);  
  9.   
  10. }  


HelloBean是一个stateless session bean。当然stateful也可以,毕竟就这一个Application Client,它的代码如下:

[java]  view plain  copy
  1. package hello.ejb;  
  2.   
  3. import javax.ejb.Stateless;  
  4.   
  5. import hello.ejb.interfaces.Hello;  
  6.   
  7. @Stateless  
  8. public class HelloBean implements Hello {  
  9.   
  10.     @Override  
  11.     public String sayHello(String name) {  
  12.         return "Hello: " + name;  
  13.     }  
  14.   
  15. }  
一个很简单的方法,给name变量加上“Hello: ”,然后返回。

3、设置Application Client

右击helloClient,选择properties。



打开Deployment Aseembly菜单,选择Manifest Entries,点Add...,把helloEJB.jar添加进去,添加此包是为了编译时不出错。点Finish。



helloClient的结构如图:



先看HelloTest.java的代码(我把默认生成的Main类删除了):

[java]  view plain  copy
  1. package com.hello.client;  
  2.   
  3. import javax.ejb.EJB;  
  4.   
  5. import hello.ejb.interfaces.Hello;  
  6.   
  7. public class HelloTest {  
  8.       
  9.     @EJB  
  10.     private static Hello hello;  
  11.   
  12.     /** 
  13.      * @param args 
  14.      */  
  15.     public static void main(String[] args) {  
  16.           
  17.         System.out.println(hello.sayHello("David"));  
  18.   
  19.     }  
  20.   
  21. }  
hello变量用了@EJB注解来表示此变量使用容器依赖注入,然后在main方法中调用它的sayHello方法,并传递变量“David”。再看META-INF下的MANIFEST.MF文件,它的内容是:

[java]  view plain  copy
  1. Manifest-Version: 1.0  
  2. Class-Path: helloEJB.jar  
  3. Main-Class: com.hello.client.HelloTest  
Class-Path是之前在选择helloEJB项目依赖时自动添加的,Main-Class是指定包含main方法的类,这个是必须的,一会儿运行这个项目时就会知道。然后再有一个文件很重要,weblogic-application-client.xml文件,它是这样被创建的,在META-INF下新建一个文件,选择Oracle WebLogic Application Client Descriptor:



点下一步,输入名字:weblogic-application-client.xml.


它的内容是:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <wls:weblogic-application-client xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application-client"   
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/javaee_5.xsd   
  6.     http://xmlns.oracle.com/weblogic/weblogic-application-client   
  7.     http://xmlns.oracle.com/weblogic/weblogic-application-client/1.3/weblogic-application-client.xsd">  
  8.       
  9.     <!-- 定义要引用的EJB模块的JNDI名字  -->  
  10.     <wls:ejb-reference-description>  
  11.         <!-- 要使用EJB的变量 -->  
  12.         <wls:ejb-ref-name>com.hello.client.HelloTest/hello</wls:ejb-ref-name>  
  13.           
  14.         <!-- JNDI命名规则:java:global/[应用程序名]EJB模块名/Bean名 -->  
  15.         <wls:jndi-name>java:global/hello/helloEJB/HelloBean</wls:jndi-name>  
  16.     </wls:ejb-reference-description>  
  17.   
  18. </wls:weblogic-application-client>  
这个文件是专门用来描述Application Client项目的,若要引用EJB模块,这个文件是必须的,它指定了要引用ejb模块的变量的名称和所在的类,以及

EJB模块的JNDI名称,java:global是用来查找remote业务服务接口的。可以从weblogic console里面找到应用程序名,EJB模块名和Bean名。



4、导出Application Client与EJB包

由于WebLogic的OEPE插件不能直接在Eclipse下运行Application Client,所以我们需要把它和它引用的EJB包导出来,在命令行运行。右击helloClient,

选择Export:



然后选择Java EE下的App Client Jar file



指定Jar包的名称和路径。


点Finish创建,同样的helloEJB,选择EJB下的EJB JAR file,过程与App client jar file一样,这两个jar包都要放在同一个路径下。


5、运行helloClient

把hello这个Enterprise Application部署到WebLogic下,helloEJB和helloClient也会自动部署:


然后先设置WebLogic的环境变量,进入WebLogic安装目录,路径如下(根据自己的安装路径):


里面有setWLSEnv.cmd文件,是用来临时设置环境变量的,在cmd中运行它:


出现Your enviroment has been set即设置成功。现在可以运行我们的helloClient了,在命令行进入你放置helloClient.jar和helloEJB.jar的文件夹,运行如下命令:

java weblogic.j2eeclient.Main helloClient.jar t3://localhost:7001,这个是weblogic的命令行工具,一般这样使就够了,最多后面还可以传递几个main方法里的参数。


出现Hello: David,调用成功。如果当时没有定义weblogic-application-client.xml的话,就会出现如下错误:


三、结束

通过这个项目,对weblogic发布Java EE项目更加熟悉了,而且也了解了怎样使用WebLogic的t3协议访问它的实例,并且使helloClient中的EJB变量hello注入成功。做这个项目之前还有几个测试项目,折腾的时间更长,还熬夜查资料,做不出来就坚决不睡觉,现在终于可以松口气休息了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值