学到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也可以访问它提供的服务,代码如下:

  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,它的代码如下:

  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类删除了):

  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文件,它的内容是:

  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.

它的内容是:

  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注入成功。做这个项目之前还有几个测试项目,折腾的时间更长,还熬夜查资料,做不出来就坚决不睡觉,现在终于可以松口气休息了。

Eclipse+Weblogic 12开发简单的Enterprise Application的更多相关文章

  1. 极其简单的搭建eclipse的android开发环境

    这篇博客是关于如何搭建eclipse的android开发环境, 与网上的其他博客不同,我的方法比他们简单的多,所 以推荐给大家. 搭建eclipse的android开发环境步骤: 1.配置JDK(Ja ...

  2. eclipse配置c开发环境

    // */ // ]]> eclipse配置c开发环境 1. eclipse配置c开发环境 1.1. 缘起 1.2. cygwin 1.3. eclipse 1.4. 配置 1 eclipse配 ...

  3. (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序

    配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一.   需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...

  4. 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

    Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题.很多新同事在加入SAP成都之前,是做Java和C++开发的,习惯了Eclipse/IntelliJ IDEA/Vis ...

  5. 基于TINY4412的Andorid开发-------简单的LED灯控制【转】

    本文转载自:http://www.cnblogs.com/pengdonglin137/p/3857724.html 基于TINY4412的Andorid开发-------简单的LED灯控制   阅读 ...

  6. Eclipse搭建Android开发环境并运行Android项目

    Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...

  7. 第四章 Odoo 12 开发之模块继承

    Odoo 的一个强大功能是无需直接修改底层对象就可以添加功能.这是通过其继承机制来实现的,采取在已有对象之上修改层来完成.这种修改可以在不同层上进行-模型层.视图层和业务逻辑层.我们创建新的模块来做出 ...

  8. 第三章 Odoo 12 开发之创建第一个 Odoo 应用

    Odoo 开发通常都需要创建自己的插件模块.本文中我们将通过创建第一个应用来一步步学习如何在 Odoo 中开启和安装这个插件.我们将从基础的开发流学起,即创建和安装新插件,然后在开发迭代中更新代码来进 ...

  9. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

随机推荐

  1. 【原创】基于Bootstrap的Modal二次封装

    前言 Bootstrap:Twitter推出的一个开源的用于前端开发的工具包.它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架 官方网站: ...

  2. 杂谈:Windows操作系统的介绍与对Win8操作系统市场反响冷淡原因的分析

    Windows操作系统,毫无疑问是操作系统市场上的霸主,也正因为Windows操作系统的诞生让电脑的操作性能变得更加平民化,深的用户的喜爱.至今身边的人也是选择windows操作系统的居多,这篇文章也 ...

  3. mysql delimiter的说明

    默认情况下,mysql解释器一遇到分号(;),它就要自动执行. 不会等到用户把这些语句全部输入完之后,再执行整段语句. 而自定义函数和存储过程的SQL语句有好多行,且语句中包含有分号,为了保证整段语句 ...

  4. Java NIO系列教程(六) Selector

    Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 下面是 ...

  5. LVS+Heartbeat 高可用集群方案操作记录

    之前分别介绍了LVS基础知识和Heartbeat基础知识, 今天这里简单说下LVS+Heartbeat实现高可用web集群方案的操作说明. Heartbeat 项目是 Linux-HA 工程的一个组成 ...

  6. Maven的默认中央仓库

    当构建一个Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下: 1.从本地资源库中查找并获得依赖包,如果没有,执行第2步. 2.从Maven默认中央仓库中查找并获得依赖包 ...

  7. Spring配置文件引入xml文件: <import resource=" " />标签使用总结

    引入其他模块XML 在Spring的配置文件,有时候为了分模块的更加清晰的进行相关实体类的配置. 比如现在有一个job-timer.xml的配置 <?xml version="1.0& ...

  8. vue 项目其他规范

    列表 vuex数据管理 * 数据模块化:vuex数据管理-数据模块化 数据适配:vuex数据管理-数据适配 数据共享:vuex数据管理-数据共享 路由优化 keep-alive组件设置 保留滚动位置 ...

  9. 使用clamav模块对数据流进行病毒检测

    准备工作:linux下安装clamav成功,启动clamav并打开本地socket监听"/tmp/clamav.socket" clamav开源工程目录:/usr/local/ 修 ...

  10. 邂逅jQuery

    jQuery是一个流行的JavaScript库,提供了HTML操作,CSS操作,事件,动画,Ajax和常用插件,极大地简化了JavaScript的开发. 可以从jquery.com下载jQuery库, ...