- 浏览: 145566 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
去你姑:
jdk1.6呢?
file的getPath getAbsolutePath和getCanonicalPath的不同 -
iamcrzay:
lj~~
越是对钱没有要求的人,越是垃圾~~
鄙视~~ ...
周末去北京找工作 -
yyang1986321:
MySQL数据转换到Oracle中这也算?有软件可用的
周末去北京找工作 -
frank_je:
nything 写道工资没啥要求,够糊口住宿就行;出差啥的也没 ...
周末去北京找工作 -
night_stalker:
如果你用过 ruby 的 rake 或者 thor,就会发现 ...
Maven入门--概念与实例
好久没写了,以前也只在weblogic下写过,凭记忆写了一个例子,虽然很小,但是为了调这个东西,走了很多弯路,呵呵,写出来分享一下
1.编写一个主接口,创建组件接口的接口
package com.EJB.interfaces;
public interface HelloWorldHome extends javax.ejb.EJBHome{
HelloWorld create() throws java.rmi.RemoteException,javax.ejb.CreateException;
}
2.编写一个组件接口,被客户端使用的接口
package com.EJB.interfaces;
public interface HelloWorld extends javax.ejb.EJBObject{
public String getHello() throws java.rmi.RemoteException;
}
3.编写组件接口的实现,即具体的逻辑
package com.EJB.impl;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionContext;
public class HelloWorldImpl implements javax.ejb.SessionBean{
/*hello方法是实际的业务逻辑,它可以在客户端显示“hello,world”这个字符串*/
public String getHello() throws EJBException, RemoteException {
System.out.println("getHello()");
return "hello,worldasdfasdfasdf";
}
public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void setSessionContext(SessionContext arg0) throws EJBException,
RemoteException {
// TODO Auto-generated method stub
}
public void ejbCreate() throws javax.ejb.CreateException{}; //这个东西如果用eclipse的快速修改是不会有这个方法的,如果没有这个方法,部署到jboss会报错的,所以这个需要手工加上。
}
4.编写客户端
package test;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import com.EJB.interfaces.HelloWorld;
import com.EJB.interfaces.HelloWorldHome;
public class Test {
public static void main(String args[]){
String url = "127.0.0.1:1099";IP地址加端口号,服务器的地址,Ejb在Jboss上是1099端口
InitialContext initCtx = null;
try {
Hashtable<String,String> env = new Hashtable<String,String>();
//设置上下文环境,Context.INITIAL_CONTEXT_FACTORY这个的value根据不同的应用服务器不同而不同,weblogic也提供了自己的类。
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, url);
initCtx = new InitialContext(env);
Object obj=initCtx.lookup("FirstEjb");这里的FirstEjb就是jndi名字,在jboss-xml中配置的
HelloWorldHome home=(HelloWorldHome)PortableRemoteObject.narrow(obj,HelloWorldHome.class);//用rmi远程方法调用获得主接口
HelloWorld hello = home.create();//用主接口创建组件接口
String s = hello.getHello();//执行方法
System.out.println(s);
}catch(Exception e){
e.printStackTrace();
}
}
}
5.部署EJB
在EJB的项目中,在META-INF中加入ejb-jar.xml,这个就是ejb的描述了,以后jboss启动的时候会找这个项目了文件,进行部署。
jboss.xml是为了更好更简洁的处理本ejb,才加进去的,里面包括jndi的描述。
进入first/build/classes/下,运行jar -cvf hello.jar *.* 进行打包,然后把这个jar包拷贝到jboss的develop下,运行就可以了。
ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID" version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>First</display-name>
<enterprise-beans>
<session>
<ejb-name>FirstEjb</ejb-name>
<home>com.EJB.interfaces.HelloWorldHome</home><!--主接口-->
<remote>com.EJB.interfaces.HelloWorld</remote><!--组件接口-->
<ejb-class>com.EJB.impl.HelloWorldImpl</ejb-class><!--组件接口的实现-->
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
jboss.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>FirstEjb</ejb-name> <!--EJB名称和ejb-jar.xml中的<ejb-name>一样-->
<jndi-name>FirstEjb</jndi-name> <!--jndi路径,被客户端调用是使用的jndi,即可以找到ejb的路径-->
</session>
</enterprise-beans>
</jboss>
6.运行EJB
运行客户端,即可获得在屏幕上打印一行hello,world的效果
注意:
运行EJB,最主要就是要分布式,那么如果在同一个项目中编写客户端就没什么意义了,基于这个,下面举一个远程调用的例子:
1.把主接口和组件接口拷贝到要调用EJB的项目中
2.把jbossall-client.jar拷贝到要调用EJB的项目中,要不然会报如下错误
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at test.Test.main(Test.java:20)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
... 5 more
3.确定实现和主接口和组件接口分离,不要把实现也拷过去了,那就没啥用了,这里
4.如果报连接不到远程的地址什么的,请检查url中时候包含rmi://,如果有会报错的。
这里讲的很浅,家里的weblogic 的EJB例子比较详细,而且分包的,把接口和实现分成两个包,拷贝起来也方便,可以回去看看。
Ref:http://jingfengluo.iteye.com/blog/233971
发表评论
-
resource-ref元素
2009-07-08 13:28 2033resource-ref元素用于指定对外部资源的se ... -
java jdbc驱动的四种类型
2009-07-08 13:25 1062type 1:jdbc-odbc桥 type 2:本地api驱 ... -
JSF+Seam框架学习心得
2009-07-04 14:21 1007我目前的项目前端使用 ... -
JNDI配置原理详解
2009-07-04 11:56 5807最近写书,写到JNDI,到处查资料,发现所有的中文资料都对JN ... -
JNDI
2009-07-04 11:55 1173写道 看了JNDI的 ... -
Oracle,MySql,SQL server分页
2009-07-04 09:29 868SQL Server 从数据库表中的第M条记录 ... -
JBOSS安装配置
2009-07-04 09:23 4614JBOSS安装配置第一章 安装运行JBOSS 1 安装JBO ... -
JBoss 5.0 安装与配置详解
2009-07-04 09:17 2798一.下载与安装JBoss 在本文中,我下载的JBoss版本 ... -
如何在Eclipse中调试JBoss应用
2009-07-04 08:34 1555一般来说在JavaEE应用程序的开发过程中,大家都 ... -
jar war ear区别
2009-07-04 01:40 1820jar:封装类 war:封装web站点 e ... -
Subversion
2009-07-04 01:00 9381. Subversion与CVS的比较 Subversio ... -
Maven入门--概念与实例
2009-07-04 00:27 15581 关键名词 Project:任何您想build的事物 ... -
详解MANIFEST.MF文件
2009-07-03 23:51 1098打开Java的JAR文件我们经常可以看到文件中包含着一个 ... -
Maven Ant之间的比较
2009-07-03 23:46 939Apache Maven一个潜在的基于java的apache ... -
Ant使用入门
2009-07-03 23:41 2078*前言Apache Ant是一个基于Java的构建工具。从理 ... -
HttpServlet详解
2009-07-02 17:46 1112Servlet的框架是由两个Java包组成:javax.ser ... -
Tomcat5启动流程与配置详解
2009-07-02 17:36 8651 Tomcat5.0目录结构 Tomcat ... -
struts1和truts2比较
2009-07-02 17:33 621Action 类: • Struts1要求Ac ... -
Java解析XML的四种方法
2009-07-02 17:30 6461.介绍 1)DOM(JAXP Crimson解析 ... -
JSP 隐式对象简介
2009-07-02 11:50 1310JSP 架构背后的理念是提供一个 Web 组件,它允许开发 ...
相关推荐
《JBoss 3.2 Workbook for Enterprise JavaBeans™, 3rd Edition》为开发者提供了一个全面了解和掌握EJB技术的机会。通过本书的学习,读者不仅可以了解到EJB的基本概念和技术细节,还能掌握如何在JBoss环境下有效地...
这是一个基于EJB(Enterprise JavaBeans)技术的项目,利用了JBuilder作为开发工具,JBoss应用服务器进行部署,以及MySQL数据库存储数据。这个项目名为"ejb_jboss_estoreW",推测是一个电子商务(e-store)平台的...
本文将详细介绍如何在J2EE服务器下开发和部署第一个EJB程序。 首先,我们需要理解EJB的基本概念。EJB是Java中的一个服务器端组件模型,分为三种类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息...
- 第一部分是项目的主Jar包,它包含了你的EJB组件代码。 - 第二部分是jBoss客户端库,位于jBoss的“client”目录下,用于客户端调用EJB。 - 第三部分是在项目“src”目录下的`jndi.properties`文件,其中包含了...
【JBOSS6.0.0M4发布EJB3测试】这个主题涉及到的是Java企业版(Java EE)中的核心组件——Enterprise JavaBeans (EJB)的第三版(EJB3),以及它在JBoss Application Server 6.0.0 Milestone 4 (JBOSS6.0.0M4)版本中的...
#### 第一步:配置Eclipse与JBoss 在Eclipse中进行EJB开发前,需要对Eclipse进行必要的配置,使其能够识别并连接到JBoss服务器。 1. **配置JBoss路径**:打开Eclipse的首选项对话框(Preferences),设置JBoss的...
创建一个EJB项目是使用MyEclipse进行EJB开发的第一步。这涉及到设置项目的基本属性,如项目名称、源代码目录、构建路径等。通过MyEclipse的图形界面,开发者可以轻松完成这一过程,同时也可以配置项目的编译器版本、...
这个“第三次上机作业”可能是实验或项目的一部分,它可能包含了实现EJB3.0一对多关系的具体代码和配置文件。文件中可能包括了实体类、会话Bean以及相应的XML配置文件(如果有的话)。通过分析这些文件,可以深入...
#### (1):编写第一个无状态的SessionBean ##### 一、配置开发环境 在开始编写无状态的SessionBean之前,首先需要确保开发环境已经正确配置。以下是所需的主要组件: 1. **Eclipse**:版本3.4.2,推荐使用针对...
在本项目中,"Myeclipse+JBoss开发的EJB3.0 多对多程序" 是一个基于Java EE平台的课程实验,利用EJB3.0(Enterprise JavaBeans 3.0)规范和Myeclipse集成开发环境,以及JBoss应用服务器,实现了数据模型中的多对多...
- **创建**: 当第一次被调用时创建。 - **销毁**: 当没有客户端再引用时被销毁。 ##### 4.6 拦截器 (Interceptor) - **定义**: 截取 EJB 方法调用的逻辑,可以用来实现日志记录、性能监控等功能。 - **配置**: 在 ...
- 创建一个简单的EJB3项目,并通过JBoss服务器运行。 - 示例代码通常包含基本的Session Bean实现。 - **在Tomcat中调用EJB**: - 解释如何在独立的Tomcat服务器中集成并调用JBoss上的EJB服务。 - **Web应用调用...
**第一种方法:接口和实现类分别配置@Remote和@Stateless** - 定义一个远程接口`SayHello`,并使用`@Remote`注解标记。 ```java package com.tudou.ejb.session; import javax.ejb.Remote; @Remote ...
- **体系结构图**:展示了一个基于Struts + EJB 3.0的应用程序体系结构,帮助理解各组件之间的交互方式。 - **打包指南**: - **EJB打包**:使用`.jar`文件格式,并提供必要的部署描述符`ejb-jar.xml`。 - **Web...
在EJB3.0的第一个"Hello, World"项目中,我们将学习如何创建和配置一个简单的EJB组件。首先,我们需要了解EJB的基本概念。EJB分为三种类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean...
综上所述,《J2EE - JBoss - EJB with Eclipse》这一主题涵盖了从Java EE基础,到EJB设计与开发,再到Eclipse集成开发环境下的实战应用,是学习和理解企业级Java开发的重要参考资料。通过深入学习和实践,开发者可以...
- 创建一个简单的EJB3项目,并通过JBoss服务器运行它。这个例子应该包括基本的无状态会话Bean的创建和调用。 - 使用JBoss提供的工具和文档来指导这一过程。 **2.3 在独立的TOMCAT中调用EJB** - 配置TOMCAT使其能够...
在"8-14"这个文件列表中,可能包含了从第8章到第14章关于EJB和JBOSS的详细讲解,覆盖了EJB的各个方面,包括理论知识、实践操作以及相关示例,是初学者理想的自学资料。建议按照章节顺序逐步学习,结合实际操作加深...