Jboss3.0-Tomat4.03下Ejb的開發之一(SessionBean的開發) (轉)
: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配置檔案
2、jboss.xml配置檔案
下面的是一個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)
<!--embedded mbean-->
<!--embedded mbean-->
二、在前面的介面檔案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檔案如下:
archives="mail.jar, activation.jar, mail-plugin.jar"/> name="jboss:service=Mail"> 用的是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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JBoss中EJB的開發(轉)
- jbuiler開發ejbUI
- 【原創】eclipse + JBoss 5 + EJB3開發指南(2):編寫有狀態的SessionBeanEclipseSessionBean
- MyEclipse下EJB應用程式的開發Step By StepEclipse
- 有關EJB的有態SessionBean和無態SessionBean的疑惑SessionBean
- WebLogic的研究之三--開發、部署EJB(1) (轉)Web
- WebLogic的研究之三--開發、部署EJB(2) (轉)Web
- WebLogic的研究之三--開發、部署EJB(3) (轉)Web
- 開發ejb程式全功略
- web開發中公用元件的開發之一DateUtils .Web元件
- 使用MyEclipse開發Java EE應用:EJB專案開發初探(下)EclipseJava
- 微信開發系列之一 - 微信公眾號開發的開發環境搭建開發環境
- (轉帖子)JBuilder7+Weblogic7+mysql 開發EJB的配置(加入BMP,CMP開發例項)UIWebMySql
- 有關jboss開發EJB的JAR的問題?JAR
- WebSphere5.0開發EJB,工具比較篇 (轉)Web
- Linux下的軟體開發(轉)Linux
- 不用jb,該用什麼開發工具開發EJB好呀?
- 開發環境搭建之一,Clion的下載和安裝開發環境
- Oracle在Linux下的C開發(轉)OracleLinux
- 在jbuilder中開發ejb出現的問題求救!UI
- JB9+JBoss4.01開發EJB的問題
- EJB 3.0開發指南之依賴注入依賴注入
- Windows.NET下的UDDI開發指南((續) (轉)Windows
- 使用MyEclipse開發Java EE應用:EJB專案開發初探(上)EclipseJava
- 玩轉iOS開發:iOS中的GCD開發(一)iOSGC
- 玩轉iOS開發:iOS中的GCD開發(三)iOSGC
- 玩轉iOS開發:iOS中的GCD開發(二)iOSGC
- Linux下應用程式開發:QT開發簡介(轉)LinuxQT
- 請教:EJB3的SessionBean主動呼叫問題SessionBean
- 玩轉iOS開發:iOS中的NSOperation開發(一)iOS
- 玩轉iOS開發:iOS中的NSOperation開發(二)iOS
- 從遊戲開發到應用開發的轉變遊戲開發
- laravel下的團隊開發Laravel
- 開發小細節系列之一
- java webservice開發入門之一JavaWeb
- 用C++Builder 5開發Windows下的屏保 (轉)C++UIWindows
- myeclipse開發ejb 如何生成介面檔案Eclipse
- 請教關於jb中開發ejb的一個問題