博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jboss3.0-Tomat4.03下Ejb的开发之一(SessionBean的开发) (转)
阅读量:2500 次
发布时间:2019-05-11

本文共 10968 字,大约阅读时间需要 36 分钟。

Jboss3.0-Tomat4.03下Ejb的开发之一(SessionBean的开发) (转)[@more@] 

 :namespace prefix = o ns = "urn:schemas--com::office" />

 

从今天开始,给大家说说3.0下的的开发,首先给大家说的是一个很简单的SessionBean的开法,在此基础上我会慢慢的说在SessionBean如何连接,如何发电子,如何进行事务处理等等。

一、首先你的保证你的能正常的运行起动,对EJB有一定的了解。

二、现在所说的EJB都是标准的EJB没有用到Jboss所特有的特性等等。

1、在E:\我建立了E:JbossEjbTestjbosssessionbean est目录,在下面我写了以下几个,一个是Home接口,一个是Remote接口,一个实现Bean,还有ejb-jar.xml和jboss.xml还有build.bat文件和Client测试文件,还有是Run.bat文件等等。

2、Home接口文件TestSessionHome.

package jboss.sessionbean.test;

import java.io.Serializable;

import java..RemoteException;

import javax.ejb.CreateException;

import javax.ejb.EJBHome;

public interface TestSessionHome extends EJBHome

{

public TestSession create() throws RemoteException, CreateException;

}

 

3、Remote接口TestSession.java

package jboss.sessionbean.test;

import javax.ejb.EJB;

import java.rmi.RemoteException;

 

public interface TestSession extends EJBObject

{

public String getBeanName() throws RemoteException;

}

4、实现Bean类TestSessionBean.java

package jboss.sessionbean.test;

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

public class TestSessionBean implements SessionBean

{

public String getBeanName()throws RemoteException

{

System.out.println ("Someone called `getBeanName!' Method");

return "This Ejb's Nameis SessionBean Test";

}

public TestSessionBean() {}

public void ejbCreate() {}

public void ejbRemove() {}

public void ejbActivate() {}

public void ejbPassivate() {}

public void setSessionContext(SessionContext sc) {}

}

以上是三个最基本的文件,很简单。但一个最简单的测试算是OK了。

接下来的是两个文件

1、ejb-jar.xml配置文件

<?xml version="1.0" encoding="iso8859-1"?>

 

 

  JBoss Ejb Test

  Test

 

  TestSession

  jboss.sessionbean.test.TestSessionHome

  jboss.sessionbean.test.TestSession

  jboss.sessionbean.test.TestSessionBean

  Stateless

  Bean

 

 

 

2、jboss.xml配置文件

 

<?xml version="1.0" encoding="iso8859-1"?>

 

 

 

  TestSession

  TestSessionHomeJndi//这里是在客户端的JNDI名

 

 

下面的是一个Build文件,主要是打包生成jar文件。平时我最喜欢用的是ant工具,不过为了很通用而容易使用,所以写了Bat文件的形式build.bat

set JAVA_HOME=e:1.3.1

set JBOSS_HOME=e:Jboss3.0_4.03

@echo.

@echo ============== Building JbossEjb ============

@echo.

set JDK_CLASSES=%JAVA_HOME%lib ools.jar

set CLASSPATH=.;%JDK_CLASSES%;%JBOSS_HOME%serverdefaultlibjboss-.jar

set PATH=%JAVA_HOME%in;%PATH%

set JAVAC=%JAVA_HOME%injavac

mkdir ejbtemp

mkdir ejbtempMETA-INF

%JAVAC% -d ejbtemp *.java

copy META-INF*.xml ejbtempMETA-INF

cd ejbtemp

jar vcf TestSession.jar jboss/sessionbean/test/*.class META-INF

jar -tvf TestSession.jar

cd ..

@echo on

@echo.

运行这个批处理文件后在E:JbossEjbTestjbosssessionbean est目录下生成一个ejbtemp目录在下面有一个TestSession.jar文件,把它放在serverdefaultdeploy目录下会自动发布的。

下面的是客户端测试的两个文件,

TestClient.java文件,这是一个应用形式的java文件,在后我会通过,等各种Client端来测试。

import javax.naming.*;

import javax.rmi.PortableRemoteObject;

import jboss.sessionbean.test.*;

import java.util.*;

 

public class TestClient{

 

public TestClient(){

 

}

public static void main(String[] args) {

Hashtable hash=new Hashtable();

hash.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");

hash.put("java.naming.provr.url","localhost:1099");

try{

    InitialContext context = new InitialContext(hash);

Object testObject  = context.lookup("TestSessionHomeJndi");

TestSessionHome testSessionHome = (TestSessionHome)PortableRemoteObject.narrow(testObject,TestSessionHome.class);

TestSession testSession = testSessionHome.create();

System.out.println("Ejb Name:"+testSession.getBeanName());

  }

catch(Exception e)

{

System.out.println(e.toString());

}

 

}

运行和编译的批处理文件Run.bat文件

set JAVA_HOME=e:jdk1.3.1

set JBOSS_HOME=e:Jboss3.0_Tomcat4.03

set Program_HOME=E:JbossEjbTestjbosssessionbean est

@echo.

@echo ============== Building JbossEjb ============

@echo.

set JDK_CLASSES=%JAVA_HOME%lib ools.jar

set CLASSPATH=%JDK_CLASSES%;%Program_HOME%ejbtemp;%JBOSS_HOME%clientjbosssx-client.jar;%JBOSS_HOME%clientjboss-client.jar;%JBOSS_HOME%clientlog4j.jar;%JBOSS_HOME%serverdefaultlibjboss-j2ee.jar;%JBOSS_HOME%clientjnp-client.jar;%JBOSS_HOME%client.jar;%JBOSS_HOME%clientjboss-common-client.jar;

set PATH=%JAVA_HOME%in

set JAVAC=%JAVA_HOME%injavac

set JAVA=%JAVA_HOME%injava

%JAVAC% TestClient.java

set CLASSPATH=%CLASSPATH%;.

%JAVA% TestClient

@echo on

@echo.

以上就是这个基本测试所测试的文件,在你进行测试的时候,你可要修改的就是一些路径如JAVA_HOME;JBOSS_HOME;Program_HOME等等,同时这是一个很简单的测试SessinBean的东东,我会在上面的基础上慢慢的扩大,拓展其很多方面的运用。好了,今天就OK到这里了。

SessionBean连接数据库其实和JSP中基本上是一样的。

一、参考前面的配置库配置,建立一个数据库的连接服务。

我的配置文件如下(Oracle)

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

  source.connectionmanager.LocalTxConnectionManager" name="jboss.jca:service=LocalTxCM,name=DS">

 

 

 

  <!--embedded mbean--&gt

 

 

  OracleDS

 

 

   jc:oracle:thin:@cuipeng:1521:ora8

  driverClass" type="java.lang.String">oracle..driver.OracleDriver

  system

  word" type="java.lang.String">manager

 

 

 

  jboss.jca:service=RARDeployment,name=JBoss LocalTransaction JDBC Wrapper

 

 

 

  <!--embedded mbean--&gt

 

 

  0

  50

  5000

  15

 

  ByContainer

 

 

  jboss.jca:service=CachedConnectionManager

 

  jboss.security:service=JaasSecurityManager

  java:/TransactionManager

  jboss.jca:service=RARDeployer

 

二、在前面的接口文件TestSession.java加入下面这样的一个方法,当然名字可以自定哦

public Collection getDBTableName() throws RemoteException;

三、在实现的Bean中TestSessionBean.java加入对接口中的方法的实现。

  public Collection getDBTableName() throws RemoteException

  {

    Vector temp=new Vector();

    System.out.println("Jboss SessionBean Connection DB Test");

  try{

    InitialContext ctx = new InitialContext();

    DataSource ds = (DataSource) ctx.lookup("java:/OracleDS"); //和前面的对应

    Connection conn = ds.getConnection();

    Statement stmt = conn.createStatement();

    ResultSet rs = stmt.executeQuery(" * FROM TAB");

    while ( rs.next() ) {

    temp.addElement(rs.getString("TNAME"));

  }

    conn.close();

    }catch(Exception e){

    System.out.println(e);

  }

  return temp;

  }  

四、在测试的Client端文件TestClient.java中修改为如下:

import javax.naming.*;

import javax.rmi.PortableRemoteObject;

import jboss.sessionbean.test.*;

import java.util.*;

 

public class TestClient{

 

public TestClient(){

 

}

public static void main(String[] args) {

  Hashtable hash=new Hashtable();

  hash.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");

  hash.put("java.naming.provider.url","localhost:1099");

  try{

      InitialContext context = new InitialContext(hash);

    Object testObject  = context.lookup("TestSessionHomeJndi");

    TestSessionHome testSessionHome = (TestSessionHome)PortableRemoteObject.narrow(testObject,TestSessionHome.class);

    TestSession testSession = testSessionHome.create();

    System.out.println("Ejb Name:"+testSession.getBeanName());

    Collection col=testSession.getDBTableName();

    Iterator it=col.iterator();

    while(it.hasNext()){

    String tableName=(String)it.next();

    System.out.println(tableName);

  }

  }

  catch(Exception e)

  {

    System.out.println(e.toString());

  }

 

}

其余的文件都不需要修改,先运行build.bat文件,然后将生成的Jar文件发布,然后运行client端测试run.bat

接上面,在SessionBean进行电子邮件的发送!

一、参考前面的用JavaMail发电子邮件的配置,建立一个连接。

我的-service.xml文件如下:

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

 

  archives="mail.jar, activation.jar, mail-plugin.jar"/>

 

  name="jboss:service=Mail">

  java:/TestJbossMail

  lacklhl//名

  password//密码

 

 

   

   

   

   

   

    bug" value="false"/>

 

 

 

用的是21cn的免费的,不过它是需要验证的

二、前面的远程接口文件TestSession.java加入下面这样的一个方法,当然名字可以自定哦

public String (String from,String to,String subject,String content)throws RemoteException;

三、在实现的Bean中TestSessionBean.java如下。

package jboss.sessionbean.test;

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import javax.naming.*;

import javax..*;

import java.sql.*;

import java.util.*;

import javax.mail.*;

import javax.mail.internet.*;

public class TestSessionBean implements SessionBean

{

InitialContext ctx;

public String getBeanName()throws RemoteException

  {

    System.out.println ("Someone called `getBeanName!' Method");

  return "This Ejb's Nameis SessionBean Test";

  }

public Collection getDBTableName() throws RemoteException

  {

    Vector temp=new Vector();

    System.out.println("Jboss SessionBean Connection DB Test");

  try{

   

    DataSource ds = (DataSource) ctx.lookup("java:/OracleDS");

    Connection conn = ds.getConnection();

    Statement stmt = conn.createStatement();

    ResultSet rs = stmt.executeQuery("SELECT * FROM TAB");

    while ( rs.next() ) {

    temp.addElement(rs.getString("TNAME"));

  }

    conn.close();

    }catch(Exception e){

    System.out.println(e);

  }

  return temp;

  }

public String sendMail(String from,String to,String subject,String content)throws RemoteException

  {

  String temp;

  try{

  Session sessions = (Session) ctx.lookup("java:/TestJbossMail");

  MimeMessage msg = new MimeMessage(sessions);

  msg.setFrom(new InternetAddress(from));

  msg.setRecipients(javax.mail.Message.RecipientType.TO,to);

  msg.setSubject(subject);

  msg.setSentDate(new java.util.Date());

  Multipart multipt = new MimeMultipart();

  MimeBodyPart msgbody = new MimeBodyPart();

  msgbody.setContent(content,"text/plain");

  multipt.addBodyPart(msgbody);

  msg.setContent(multipt);

  Transport.send(msg);

  temp="SendMail OK!";

  System.out.println("SendMail OK!");

  }

  catch(Exception e)

  {

  temp="Error:"+e;

  e.printStackTrace();

  }

  return temp;

 

}

public TestSessionBean() {

  }

public void ejbCreate() {

  try{

  ctx = new InitialContext();

  }catch(Exception e){

    System.out.println(e);

  }

}

public void ejbRemove() {}

public void ejbActivate() {}

public void ejbPassivate() {}

public void setSessionContext(SessionContext sc) {}

}

四、Build.bat文件改动如下

set JAVA_HOME=e:jdk1.3.1

set JBOSS_HOME=e:Jboss3.0_Tomcat4.03

@echo.

@echo ============== Building JbossEjb ============

@echo.

set JDK_CLASSES=%JAVA_HOME%lib ools.jar

set CLASSPATH=.;%JDK_CLASSES%;%JBOSS_HOME%serverdefaultlibjboss-j2ee.jar;%JBOSS_HOME%serverdefaultlibmail.jar

set PATH=%JAVA_HOME%in;%PATH%

set JAVAC=%JAVA_HOME%injavac

mkdir ejbtemp

mkdir ejbtempMETA-INF

%JAVAC% -d ejbtemp TestSession*.java

copy *.xml ejbtempMETA-INF

cd ejbtemp

jar vcf TestSession.jar jboss/sessionbean/test/*.class META-INF

jar -tvf TestSession.jar

cd ..

@echo on

@echo.

五、在测试的Client端文件TestClient.java中修改为如下:

import javax.naming.*;

import javax.rmi.PortableRemoteObject;

import jboss.sessionbean.test.*;

import java.util.*;

 

public class TestClient{

 

public TestClient(){

 

}

public static void main(String[] args) {

  Hashtable hash=new Hashtable();

  hash.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");

  hash.put("java.naming.provider.url","localhost:1099");

  try{

      InitialContext context = new InitialContext(hash);

    Object testObject  = context.lookup("TestSessionHomeJndi");

    TestSessionHome testSessionHome = (TestSessionHome)PortableRemoteObject.narrow(testObject,TestSessionHome.class);

    TestSession testSession = testSessionHome.create();

    //Test Method

    System.out.println("Ejb Name:"+testSession.getBeanName());

    //Test DB

    Collection col=testSession.getDBTableName();

    Iterator it=col.iterator();

    while(it.hasNext()){

    String tableName=(String)it.next();

    System.out.println(tableName);

  }

    //Test Mail

    String temp=testSession.sendMail("lacklhl@21cn.com","lacklhl@21cn.com","Test SessionBean Mail","Test SessionBean Mail");

    System.out.println(temp);

  }

  catch(Exception e)

  {

    System.out.println(e.toString());

  }

 

}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-959297/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-959297/

你可能感兴趣的文章
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>
一个异步网络请求的坑:关于NSURLConnection和NSRunLoopCommonModes
查看>>
iOS 如何放大按钮点击热区
查看>>
ios设备唯一标识获取策略
查看>>
获取推送通知的DeviceToken
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>