您的位置:首页 > 其它

EJB3 学习笔记二

2016-08-22 11:38 316 查看
EJB中包含有三种bean

会话bean (session bean)

与客户端交互,编写业务逻辑,可以通过jdbc直接操作数据库,但通常用通过实体bean来操作数据库

无状态会话bean 无活保存某一用户的值

有状态会话bean

实体bean (entity bean)

属于java持久化规范里的(jpa)技术,

消息驱动bean (message-driven bean)

专门用于异步处理消息的组件,有处理大量并发消息的能力

开发第一个无状态会话bean,示例代码如下

将web 应用打包

jar cvf 应用名.war

ant打包

===============================================================================

session beans(会话bean)

stateless(无状态的)slsb

示例代码如下

/**

* 包含所有业务的接口

*

*@time 11:29:51 PM

*@author retacn yue

*@Email zhenhuayue@sina.com

*/

public interface HelloWorld {

publicString sayHello(String name);

}

/**

* 无状态会话bean

*

* 就是一个简单的pojo

*

*@time 11:26:54 PM

*@author retacn yue

*@Email zhenhuayue@sina.com

*/

// 声明这是一个无状态会话bean

@Stateless

// 声明这个bean的remote接口

@Remote( { HelloWorld.class })

public class HelloWorldBean implementsHelloWorld {

publicString sayHello(String name) {

returnname + "hello world!";

}

}

开发一个EJB客户端示例代码如下:

需要添加bin\client\jboss-client.jar

/**

*Copyright (C) 2016

*

*FileName:EJBClient.java

*

*Author:<a href="mailto:zhenhuayue@sina.com">Retacn</a>

*

*CreateTime: 2016-7-17

*/

// Package Information

package cn.yue.ejb.test;

import cn.yue.ejb.bean.HelloWorld;

import java.util.Hashtable;

import java.util.Properties;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

public class EJBClient {

/**

* @param args

* @throws NamingException

*/

public static void main(String[] args) throws NamingException {

/*

* 7.1之前的实现方法 try { 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; ctx = new

* InitialContext(props); HelloWorld helloworld = (HelloWorld)

* ctx.lookup("HelloWorldBean/romote");

* System.out.println(helloworld.SayHello("retacn")); } catch

* (NamingException e) { e.printStackTrace(); }

*/

HelloWorld helloWorld = lookupRemoteStatelessEjbBean();

System.out.println(helloWorld);

System.out.println(helloWorld.SayHello("retacn"));

}

/**

* @return

* @throws NamingException

*/

private static HelloWorld lookupRemoteStatelessEjbBean() throwsNamingException {

final Hashtable jndiProperties = new Hashtable();

jndiProperties.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");

final Context context = new InitialContext(jndiProperties);

// 如果服务器布署的是.ear包,则appname为.ear之后的包名,如果的war或是jar包,appName可以为空,如果是有状态bean,在namespace后面添加?stateful

final String appName = "";

final String moduleName = "HelloWorldEJB";

final String distinctName = "";

final String beanName = "HelloWorldBean";

final String viewClassName = HelloWorld.class.getName();

final String namespace = "ejb:" + appName + "/" +moduleName + "/" + distinctName + "/"

+ beanName + "!" +viewClassName;

System.out.println("namespace:" + namespace);

return (HelloWorld) context.lookup(namespace);

}

}

在客户端测试程序的src目录下添加jboss-ejb-client.properties示例代码如下:

endpoint.name=client-endpoint

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false

remote.connections=default

remote.connection.default.host=localhost

remote.connection.default.port=4447

remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

remote.connection.default.username=sa

remote.connection.default.password=sa

运行结果如下:

namespace:ejb:/HelloWorldEJB//HelloWorldBean!cn.yue.ejb.bean.HelloWorld

七月 18, 2016 11:16:30 上午org.jboss.ejb.client.EJBClient <clinit>

INFO: JBoss EJB Client version1.0.5.Final

Proxy for remote EJBStatelessEJBLocator{appName='', moduleName='HelloWorldEJB', distinctName='',beanName='HelloWorldBean', view='interface cn.yue.ejb.bean.HelloWorld'}

七月 18, 2016 11:16:30 上午org.xnio.Xnio <clinit>

INFO: XNIO Version 3.0.3.GA

七月 18, 2016 11:16:30 上午org.xnio.nio.NioXnio <clinit>

INFO: XNIO NIO Implementation Version3.0.3.GA

七月 18, 2016 11:16:30 上午 org.jboss.remoting3.EndpointImpl<clinit>

INFO: JBoss Remoting version 3.2.3.GA

七月 18, 2016 11:16:31 上午org.jboss.ejb.client.remoting.VersionReceiver handleMessage

INFO: Received server version 1 andmarshalling strategies [river]

七月 18, 2016 11:16:31 上午 org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiverassociate

INFO: Successful version handshakecompleted for receiver contextEJBReceiverContext{clientContext=org.jboss.ejb.client.EJBClientContext@514577,receiver=Remoting connection EJB receiver [connection=Remoting connection<278a47>,channel=jboss.ejb,nodename=retacn]}
on channel Channel IDc4627bd2 (outbound) of Remoting connection 0198339a to localhost/127.0.0.1:4447

七月 18, 2016 11:16:31 上午org.jboss.ejb.client.remoting.ChannelAssociation$ResponseReceiver handleMessage

WARN: Unsupported message received withheader 0xffffffff

retacn say:hello world! this is myfirst EJB test!

查看ejb的JNDI,可以通过以下方式:

打开http://localhost:9990/,选择profile页签,选择container下的naming,选择页面中的java:global就可以看到我们的应用

把jboss集成到eclipse中,需要下载插件

使用ant打包 ejb项目,示例代码如下:

<?xml version="1.0"encoding="UTF-8"?>

<projectname="HelloWorldEJB"basedir=".">

<!--变量定义-->

<propertyname="src.dir"value="${basedir}\src"/>

<!--环境变量-->

<propertyenvironment="env"/>

<propertyname="jboss.home"value="${env.JBOSS_HOME}"/>

<propertyname="jboss.server.config"value="default"/>

<propertyname="build.dir"value="${basedir}\WebContent\WEB-INF\classes"/>

<propertyname="export.dir"value="${basedir}\WebContent"/>

<!--添加jar包-->

<pathid="build.classpath">

<filesetdir="${jboss.home}\bin\client">

<includename="*.jar"/>

</fileset>

<pathelementlocation="${build.dir}"/>

</path>

<!--初始化工作-->

<targetname="prepare">

<deletedir="${build.dir}"/>

<mkdirdir="${build.dir}"/>

</target>

<!--编 译-->

<targetname="compile"depends="prepare"description="编译">

<javacsrcdir="${src.dir}"destdir="${build.dir}"includeantruntime="false">

<classpathrefid="build.classpath"/>

</javac>

<copyfile="${src.dir}\jboss-ejb-client.properties"todir="${build.dir}"/>

</target>

<!--应用打包-->

<targetname="ejbwar"depends="compile"description="创建EJB发布包">

<wardestfile="${basedir}\${ant.project.name}.war">

<filesetdir="${export.dir}">

<includename="**/*"/>

</fileset>

</war>

</target>

<!--发布应用-->

<targetname="deploy"depends="ejbwar"description="发布EJB">

<copyfile="${basedir}\${ant.project.name}.war"todir="${jboss.home}\standalone\deployments"/>

</target>

<!--卸载应用-->

<targetname="undeploy"description="卸载ejb">

<deletefile="${jboss.home}\standalone\deployments${ant.project.name}.war"/>

</target>

</project>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: