entr_jvbeans6_app.pdf

Similar documents
新・明解Java入門

V8.1新規機能紹介記事

Java演習(4) -- 変数と型 --

Gartner Day

PowerPoint プレゼンテーション

ユニット・テストの概要

ALG ppt

untitled

コンテナでテストをまわせ! Java EE への自動テストの導入 1 小西高之 JBoss Technical Support Engineer Red Hat K.K.

Oracle Forms Services R6i

Oracle9i JDeveloperによるWebサービスの構築

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

A B 1: Ex. MPICH-G2 C.f. NXProxy [Tanaka] 2:

rmi.book

WEBシステムのセキュリティ技術

JAVA H13 OISA JAVA 1


II 1 p.1 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway Interface Web HTML Web Web CGI CGI CGI Perl, PHP C JavaScript Web CGI HTML 1.2 Servlet Java

ワークショップ テスト駆動開発

untitled

Web 1 p.2 1 Servlet Servlet Web Web Web Apache Web Servlet JSP Web Apache Tomcat Jetty Apache Tomcat, Jetty Java JDK, Eclipse

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

K227 Java 2

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

HTML Java Tips dp8t-asm/java/tips/ Apache Tomcat Java if else f

Q&A集

解きながら学ぶJava入門編

HTML Java Tips dp8t-asm/java/tips/ Apache Tomcat Java if else f

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

PowerPoint プレゼンテーション

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

(Eclipse\202\305\212w\202\324Java2\215\374.pdf)

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

Microsoft PowerPoint - Lecture_3



3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

"CAS を利用した Single Sign On 環境の構築"


9iAS_DEV.PDF

Oracle9i JDeveloper R9.0.3 チュートリアル

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

JavaFest04.PDF

untitled

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

Microsoft Word - jpluginmanual.doc

1: JX-model XML File Package Import Class Intf Ctor Method SInit Field Param Local ExtdOpt ImplOpt ThrwOpt Members QName Type Stmt Label Expr ident li

2

intra-mart Accel Platform


SCA BB Service Configuration API を使用したプログラミング

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java

JavaプログラミングⅠ

55 7 Java C Java TCP/IP TCP/IP TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] a

「Android Studioではじめる 簡単Androidアプリ開発」正誤表

main.dvi

tkk0408nari

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

VB.NETコーディング標準

Client Client public void sendobject(object message) String String Web Container String RemoteEndpoint String Endpoint throwsioexception, EncodeExcept

ストラドプロシージャの呼び出し方

Web JavaScript Java Applet Flash ActionScript CGI (C, perl, ruby ) PHP Servlet, JSP (JavaServer Pages) ASP 7-2

JavaプログラミングⅠ

Condition DAQ condition condition 2 3 XML key value

アルゴリズムとデータ構造1

intra-mart Accel Platform — アクセスコンテキスト 拡張プログラミングガイド   第2版  

PowerPoint Presentation

1: Preference Display 1 package sample. pref ; 2 3 import android. app. Activity ; 4 import android. content. Intent ; 5 import android. content. Shar

ALG ppt

Cubby in Action

JavaScript の使い方

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

226

1 Java Java GUI , 2 2 jlabel1 jlabel2 jlabel3 jtextfield1 jtextfield2 jtextfield3 jbutton1 jtextfield1 jtextfield2 jtextfield3

FileMaker ODBC and JDBC Guide


Java学習教材

TopLink å SampleClient.java... 5 Ò readallsample() querysample() cachesample() Ç..

Servlet JSP JSP Servlet/JSP における 日 本 語 の 処 理 - 1

インターネットマガジン2001年4月号―INTERNET magazine No.75

サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere Gla

SpringSecurity

Java - Visual Editor

コーディング基準.PDF

untitled

アプリケーションサーバ用データベースアクセス 汎用コントロール Version Copyright(c) 2004 MRO co;ltd All Rights Reserved

Applet java.lang.object java.awt.component java.awt.container java.awt.panel java.applet.applet


class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

2: 3: A, f, φ f(t = A sin(2πft + φ = A sin(ωt + φ ω 2πf 440Hz A ( ( 4 ( 5 f(t = sin(2πf 1t + sin(2πf 2 t = 2 sin(2πt(f 1 + f 2 /2 cos(2πt(f 1 f

JBoss Application Server におけるディレクトリトラバーサルの脆弱性

IIJ Technical WEEK REST API型クラウドストレージサービス「FV/S」の自社への実装

Programming-C-9.key

Q&A集

B2-Servlet-0112.PDF

Transcription:

V 5 EJB EJB http://community.jboss.org/groups/oreillyejb6th JBoss Community EJB LGPL JDK Java Development Kit 1.6.0+ 1.7.0 Apache Maven 2.0.9 Git Eclipse IDE m2eclipse 0.10.0 Eclipse IntelliJ IDEA

Subversion SCM $> git clone git://github.com/jbossejb3/oreilly-ejb-6thedition-book-examples.git $> git clone git@github.com:jbossejb3/oreilly-ejb-6thedition-book-examples.git $> cd oreilly-ejb-6thedition-book-examples tags http://github.com/jbossejb3/oreilly-ejb-6thedition-book-examples 1.0.0 EJB Maven mylocation $> mvn clean install JBoss Nexus EJB POJO EJB EJB JUnit http://www.junit.org/

JUnit JUnit JUnit API TestNG http://testng.org JBoss.org 2 ShrinkWrap http://jboss.org/shrinkwrap ShrinkWrap Java JAR WAR EAR API Java Archives JAR Enterprise Archives EAR 1 Web ShrinkWrap API ZIP Exploded File URL ShrinkWrap JAR EAR ShrinkWrap EJB IDE ShrinkWrap EJB Arquillian EJB POJO

Arquillian http://jboss.org/arquillian Arquillian Arquillian Java Arquillian 2 JVM Arquillian Arquillian JVM Arquillian Java EE GlassFish JBoss AS GlassFish Tomcat Jetty Bean Wsld SE Arquillian Arquillian 1. / 2. 3. @Inject @EJB @Resource 4. / 5. Arquillian JUnit 4 TestNG 5 IDE Ant Maven Arquillian

5 A FirstEJB A.1 EJB EJB 2.x EJB 3.1 EJB POJO EJB EJB POJO A.2 http://community.jboss.org/docs/doc-15566 http://github.com/jbossejb3/oreilly-ejb-6thedition-book-examples/tree/master/ch04- firstejb/ A.3 A.3.1 A.3.1.1 CalculatorBeanBase.java package org.jboss.ejb3.examples.ch04.firstejb; import org.jboss.logging.logger; CalculatorEJB Bean

6 @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public class CalculatorBeanBase implements CalculatorCommonBusiness // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(CalculatorBeanBase.class); // --------------------------------------------------------------------------- // ---------------------------------------------------------------- // --------------------------------------------------------------------------- @inheritdoc @see org.jboss.ejb3.examples.ch04.firstejb.calculatorcommonbusiness#add(int[]) / @Override public int add(final int... arguments) // final StringBuffer sb = new StringBuffer(); sb.append("adding arguments: "); int result = 0; // for (final int arg : arguments) result += arg; sb.append(arg); sb.append(" "); // log.info(sb.tostring()); log.info("result: " + result); return result;

7 A.3.1.2 CalculatorCommonBusiness.java package org.jboss.ejb3.examples.ch04.firstejb; CalculatorEJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface CalculatorCommonBusiness // --------------------------------------------------------------------------- // ---------------------------------------------------------------------- // --------------------------------------------------------------------------- @return / int add(int... arguments); A.3.1.3 CalculatorLocal.java package org.jboss.ejb3.examples.ch04.firstejb; import javax.ejb.ejblocalobject; CalculatorEJB EJB 2.x @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface CalculatorLocal extends CalculatorCommonBusiness, EJBLocalObject A.3.1.4 CalculatorLocalBusiness.java package org.jboss.ejb3.examples.ch04.firstejb; CalculatorEJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a>

8 / public interface CalculatorLocalBusiness extends CalculatorCommonBusiness A.3.1.5 CalculatorLocalHome.java package org.jboss.ejb3.examples.ch04.firstejb; import javax.ejb.createexception; import javax.ejb.ejblocalhome; CalculatorEJB EJB 2.x @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface CalculatorLocalHome extends EJBLocalHome // --------------------------------------------------------------------------- // create<method> ---------------------------------------------------- // --------------------------------------------------------------------------- CalculatorEJB / CalculatorLocal create() throws CreateException; A.3.1.6 CalculatorRemote.java package org.jboss.ejb3.examples.ch04.firstejb; import javax.ejb.ejbobject; CalculatorEJB EJB 2.x @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface CalculatorRemote extends CalculatorCommonBusiness, EJBObject

9 A.3.1.7 CalculatorRemoteBusiness.java package org.jboss.ejb3.examples.ch04.firstejb; CalculatorEJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface CalculatorRemoteBusiness extends CalculatorCommonBusiness A.3.1.8 CalculatorRemoteHome.java package org.jboss.ejb3.examples.ch04.firstejb; import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; CalculatorEJB EJB 2.x @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface CalculatorRemoteHome extends EJBHome // --------------------------------------------------------------------------- // create<method> ---------------------------------------------------- // --------------------------------------------------------------------------- CalculatorEJB / CalculatorRemote create() throws CreateException, RemoteException; A.3.1.9 ManyViewCalculatorBean.java package org.jboss.ejb3.examples.ch04.firstejb; import javax.ejb.local; import javax.ejb.localbean; import javax.ejb.localhome; import javax.ejb.remote;

10 import javax.ejb.remotehome; import javax.ejb.stateless; EJB 3.1 CalculatorEJB Bean @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @Stateless @Local(CalculatorLocalBusiness.class) @Remote(CalculatorRemoteBusiness.class) @LocalHome(CalculatorLocalHome.class) @RemoteHome(CalculatorRemoteHome.class) @LocalBean // No-interface view public class ManyViewCalculatorBean extends CalculatorBeanBase implements CalculatorCommonBusiness / / A.3.1.10 NoInterfaceViewCalculatorBean.java package org.jboss.ejb3.examples.ch04.firstejb; import javax.ejb.localbean; import javax.ejb.stateless; CalculatorEJB Bean @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @Stateless @LocalBean public class NoInterfaceViewCalculatorBean extends CalculatorBeanBase //

11 A.3.1.11 SimpleCalculatorBean.java package org.jboss.ejb3.examples.ch04.firstejb; import javax.ejb.local; import javax.ejb.stateless; CalculatorEJB Bean @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @Stateless @Local(CalculatorLocalBusiness.class) public class SimpleCalculatorBean extends CalculatorBeanBase implements CalculatorCommonBusiness / / A.3.2 A.3.2.1 CalculatorAssertionDelegate.java package org.jboss.ejb3.examples.ch04.firstejb; import junit.framework.testcase; import org.jboss.logging.logger; @link CalculatorCommonBusiness @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / class CalculatorAssertionDelegate // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- /

12 private static final Logger log = Logger.getLogger(CalculatorAssertionDelegate.class); // --------------------------------------------------------------------------- // -------------------------------------------------------------- // --------------------------------------------------------------------------- Calculator / void assertadditionsucceeds(final CalculatorCommonBusiness calc) // final int[] arguments = new int[] 2, 3, 5; final int expectedsum = 10; // final int actualsum = calc.add(arguments); // TestCase.assertEquals(" ", expectedsum, actualsum); // final StringBuffer sb = new StringBuffer(); sb.append("obtained expected result, "); sb.append(actualsum); sb.append(", from arguments: "); for (final int arg : arguments) sb.append(arg); sb.append(" "); log.info(sb.tostring()); A.3.2.2 CalculatorIntegrationTestCase.java package org.jboss.ejb3.examples.ch04.firstejb; import java.net.malformedurlexception; import javax.ejb.ejb; import org.jboss.arquillian.api.deployment; import org.jboss.arquillian.junit.arquillian;

13 import org.jboss.logging.logger; import org.jboss.shrinkwrap.api.shrinkwrap; import org.jboss.shrinkwrap.api.spec.javaarchive; import org.junit.beforeclass; import org.junit.test; import org.junit.runner.runwith; 1 CalculatorEJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @RunWith(Arquillian.class) public class CalculatorIntegrationTestCase // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(CalculatorIntegrationTestCase.class); CalculatorEJB EJB 3.x / @EJB private static CalculatorLocalBusiness calclocalbusiness; Calculator / private static CalculatorAssertionDelegate assertiondelegate; / @Deployment public static JavaArchive createdeployment() throws MalformedURLException final JavaArchive archive = ShrinkWrap.create("firstejb.jar", JavaArchive.class). addpackage(calculatorbeanbase.class.getpackage()); log.info(archive.tostring(true)); return archive;

14 // --------------------------------------------------------------------------- // ---------------------------------------------------- // --------------------------------------------------------------------------- 1 / @BeforeClass public static void beforeclass() throws Throwable // assertiondelegate = new CalculatorAssertionDelegate(); // --------------------------------------------------------------------------- // -------------------------------------------------------------------- // --------------------------------------------------------------------------- EJB 3.x CalculatorEJB / @Test public void testadditionusingbusinessreference() throws Throwable // log.info("testing EJB via business reference..."); assertiondelegate.assertadditionsucceeds(calclocalbusiness); A.3.2.3 CalculatorUnitTestCase.java package org.jboss.ejb3.examples.ch04.firstejb; import junit.framework.testcase; import org.jboss.logging.logger; import org.junit.beforeclass; import org.junit.test; CalculatorEJB

15 @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public class CalculatorUnitTestCase // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(CalculatorUnitTestCase.class); POJO / private static CalculatorCommonBusiness calc; // --------------------------------------------------------------------------- // ---------------------------------------------------- // --------------------------------------------------------------------------- @BeforeClass public static void beforeclass() // CalculatorCommonBusiness // POJO calc = new SimpleCalculatorBean(); // --------------------------------------------------------------------------- // -------------------------------------------------------------------- // --------------------------------------------------------------------------- CalculatorEJB POJO / @Test public void testaddition() // final int[] arguments = new int[] 3, 7, 2; final int expectedsum = 12;

16 // final int actualsum = calc.add(arguments); // TestCase.assertEquals(" ", expectedsum, actualsum); // final StringBuffer sb = new StringBuffer(); sb.append("obtained expected result, "); sb.append(actualsum); sb.append(", from arguments: "); for (final int arg : arguments) sb.append(arg); sb.append(" "); log.info(sb.tostring()); A.3.2.4 MultiViewCalculatorIntegrationTestCase.java package org.jboss.ejb3.examples.ch04.firstejb; import java.net.malformedurlexception; import javax.naming.context; import javax.naming.initialcontext; import org.jboss.arquillian.api.deployment; import org.jboss.arquillian.junit.arquillian; import org.jboss.logging.logger; import org.jboss.shrinkwrap.api.shrinkwrap; import org.jboss.shrinkwrap.api.spec.javaarchive; import org.junit.beforeclass; import org.junit.test; import org.junit.runner.runwith; CalculatorEJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @RunWith(Arquillian.class) public class MultiViewCalculatorIntegrationTestCase // ---------------------------------------------------------------------------

17 // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(MultiViewCalculatorIntegrationTestCase.class); JNDI / private static Context namingcontext; CalculatorEJB EJB 3.x / private static CalculatorLocalBusiness calclocalbusiness; CalculatorEJB EJB 2.x / private static CalculatorLocal calclocal; Calculator / private static CalculatorAssertionDelegate assertiondelegate; JNDI / // JNDI private static final String JNDI_NAME_CALC_LOCAL_BUSINESS = ManyViewCalculatorBean.class. getsimplename() + "Local"; JNDI / // JNDI private static final String JNDI_NAME_CALC_REMOTE_HOME = ManyViewCalculatorBean.class. getsimplename() + "LocalHome"; / @Deployment

18 public static JavaArchive createdeployment() throws MalformedURLException final JavaArchive archive = ShrinkWrap.create("firstejb.jar", JavaArchive.class).addPackage( CalculatorBeanBase.class.getPackage()); log.info(archive.tostring(true)); return archive; // --------------------------------------------------------------------------- // ---------------------------------------------------- // --------------------------------------------------------------------------- 1 / @BeforeClass public static void beforeclass() throws Throwable // CP jndi.properties namingcontext = new InitialContext(); // EJB 3.x calclocalbusiness = (CalculatorLocalBusiness) namingcontext.lookup(jndi_name_calc_local_business); // assertiondelegate = new CalculatorAssertionDelegate(); // EJB 2.x final Object calclocalhomereference = namingcontext.lookup(jndi_name_calc_remote_home); final CalculatorLocalHome calcremotehome = (CalculatorLocalHome) calclocalhomereference; calclocal = calcremotehome.create(); // --------------------------------------------------------------------------- // -------------------------------------------------------------------- // --------------------------------------------------------------------------- EJB 3.x CalculatorEJB / @Test public void testadditionusingbusinessreference() throws Throwable //

19 log.info("testing remote business reference..."); assertiondelegate.assertadditionsucceeds(calclocalbusiness); EJB 2.x CalculatorEJB / @Test public void testadditionusingcomponentreference() throws Throwable // log.info("testing remote component reference..."); assertiondelegate.assertadditionsucceeds(calclocal); A.3.2.5 jndi.properties # OpenEJB JNDI java.naming.factory.initial=org.apache.openejb.client.localinitialcontextfactory

21 B EJB B.1 Bean SLSB / SLSB XML B.2 http://community.jboss.org/docs/doc-15567 http://github.com/jbossejb3/oreilly-ejb-6thedition-book-examples/tree/master/ch05- encryption/ B.3 B.3.1 B.3.1.1 EncryptionBean.java package org.jboss.ejb3.examples.ch05.encryption; import java.io.unsupportedencodingexception; import java.security.messagedigest; import java.security.nosuchalgorithmexception; import java.security.spec.algorithmparameterspec; import java.security.spec.keyspec; import javax.annotation.postconstruct;

22 import javax.annotation.resource; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.crypto.spec.pbekeyspec; import javax.crypto.spec.pbeparameterspec; import javax.ejb.local; import javax.ejb.remote; import javax.ejb.sessioncontext; import javax.ejb.stateless; import org.apache.commons.codec.binary.base64; import org.jboss.logging.logger; EncryptionEJB Bean @PostConstruct 2 @author <a href="mailto:alr@jboss.org">alr</a> / @Stateless(name = EncryptionBean.EJB_NAME) @Local(EncryptionLocalBusiness.class) @Remote(EncryptionRemoteBusiness.class) public class EncryptionBean implements EncryptionLocalBusiness, EncryptionRemote Business // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(EncryptionBean.class); EJB META-INF/ejb-jar.xml / static final String EJB_NAME = "EncryptionEJB"; ejb-jar.xml

23 / private static final String ENV_ENTRY_NAME_CIPHERS_PASSPHRASE = "cipherspassphrase"; ejb-jar.xml / private static final String ENV_ENTRY_NAME_MESSAGE_DIGEST_ALGORITHM = "messagedigestalgorithm"; / private static final String DEFAULT_ALGORITHM_MESSAGE_DIGEST = "MD5"; / / private static final String CHARSET = "UTF-8"; / private static final String DEFAULT_ALGORITHM_CIPHER = "PBEWithMD5AndDES"; / / private static final String DEFAULT_PASSPHRASE = "LocalTestingPassphrase"; / / private static final byte[] DEFAULT_SALT_CIPHERS = (byte) 0xB4, (byte) 0xA2, (byte) 0x43, (byte) 0x89, 0x3E, (byte) 0xC5, (byte)0x78, (byte) 0x53; / / private static final int DEFAULT_ITERATION_COUNT_CIPHERS = 20; // --------------------------------------------------------------------------- // ------------------------------------------------------ // --------------------------------------------------------------------------- /

24 API / EJB SessionContext @Resource EJB / @Resource private SessionContext context; SessionContext.lookup / private String cipherspassphrase; env-entry name @Resource / @Resource(name = ENV_ENTRY_NAME_MESSAGE_DIGEST_ALGORITHM) private String messagedigestalgorithm; / private MessageDigest messagedigest; / private Cipher encryptioncipher; / private Cipher decryptioncipher; // --------------------------------------------------------------------------- // ------------------------------------------------------------ // ---------------------------------------------------------------------------

25 @throws Exception / @PostConstruct public void initialize() throws Exception // log.info(" " + PostConstruct.class.getName() + " "); / / // final String cipheralgorithm = DEFAULT_ALGORITHM_CIPHER; final byte[] cipherssalt = DEFAULT_SALT_CIPHERS; final int ciphersiterationcount = DEFAULT_ITERATION_COUNT_CIPHERS; final String cipherspassphrase = this.getcipherspassphrase(); // final KeySpec cipherskeyspec = new PBEKeySpec(ciphersPassphrase.toCharArray(), cipherssalt, ciphersiterationcount); final SecretKey cipherskey = SecretKeyFactory.getInstance(cipherAlgorithm). generatesecret(cipherskeyspec); final AlgorithmParameterSpec paramspec = new PBEParameterSpec(ciphersSalt, ciphersiterationcount); // this.encryptioncipher = Cipher.getInstance(ciphersKey.getAlgorithm()); this.decryptioncipher = Cipher.getInstance(ciphersKey.getAlgorithm()); encryptioncipher.init(cipher.encrypt_mode, cipherskey, paramspec); decryptioncipher.init(cipher.decrypt_mode, cipherskey, paramspec); // log.info("initialized encryption cipher: " + this.encryptioncipher); log.info("initialized decryption cipher: " + this.decryptioncipher); / / // final String messagedigestalgorithm = this.getmessagedigestalgorithm(); // try

26 this.messagedigest = MessageDigest.getInstance(messageDigestAlgorithm); catch (NoSuchAlgorithmException e) throw new RuntimeException("Could not obtain the " + MessageDigest.class.getSimpleName() + " for algorithm: " + messagedigestalgorithm, e); log.info("initialized MessageDigest for one-way hashing: " + this.messagedigest); // --------------------------------------------------------------------------- // ---------------------------------------------------------------- // --------------------------------------------------------------------------- @inheritdoc @see org.jboss.ejb3.examples.ch05.encryption.encryptioncommonbusiness#compare(java.lang.string, java.lang.string) / @Override public boolean compare(final String hash, final String input) throws IllegalArgumentException, EncryptionException // if (hash == null) throw new IllegalArgumentException("hash is required."); if (input == null) throw new IllegalArgumentException("Input is required."); // final String hashofinput = this.hash(input); // final boolean equal = hash.equals(hashofinput); // return equal; @inheritdoc

27 @see org.jboss.ejb3.examples.ch05.encryption.encryptioncommonbusiness#decrypt(java.lang.string) / @Override public String decrypt(final String input) throws IllegalArgumentException, IllegalStateException, EncryptionException // final Cipher cipher = this.decryptioncipher; if (cipher == null) throw new IllegalStateException("Decryption cipher not available, has this service been initialized?"); // byte[] resultbytes = null;; try final byte[] inputbytes = this.stringtobytearray(input); resultbytes = cipher.dofinal(base64.decodebase64(inputbytes)); catch (final Throwable t) throw new EncryptionException("Error in decryption", t); final String result = this.bytearraytostring(resultbytes); // log.info("decryption on "" + input + " ": " + result); // return result; @inheritdoc @see org.jboss.ejb3.examples.ch05.encryption.encryptioncommonbusiness#encrypt(java.lang.string) / @Override public String encrypt(final String input) throws IllegalArgumentException, EncryptionException // final Cipher cipher = this.encryptioncipher; if (cipher == null) throw new IllegalStateException("Encryption cipher not available, has this service been initialized?");

28 // byte[] inputbytes = this.stringtobytearray(input); // byte[] resultbytes = null; try resultbytes = Base64.encodeBase64(cipher.doFinal(inputBytes)); catch (final Throwable t) throw new EncryptionException("Error in encryption of: " + input, t); // log.info("encryption on "" + input + " ": " + this.bytearraytostring(resultbytes)); // final String result = this.bytearraytostring(resultbytes); return result; 1 2 N / / (non-javadoc) @see org.jboss.ejb3.examples.ch05.encryption.encryptioncommonbusiness#hash(java.lang.string) / @Override public String hash(final String input) throws IllegalArgumentException, EncryptionException // if (input == null) throw new IllegalArgumentException("Input is required."); //

29 byte[] inputbytes = this.stringtobytearray(input); // final MessageDigest digest = this.messagedigest; // digest.update(inputbytes, 0, inputbytes.length); final byte[] hashbytes = digest.digest(); final byte[] encodedbytes = Base64.encodeBase64(hashBytes); // final String hash = this.bytearraytostring(encodedbytes); log.info("one-way hash of "" + input + " ": " + hash); // return hash; env-entry API @see org.jboss.ejb3.examples.ch05.encryption.encryptionbeanbase#getcipherspassphrase() / @Override public String getcipherspassphrase() // String passphrase = this.cipherspassphrase; // if (passphrase == null) // SessionContext passphrase = this.getenvironmententryasstring(env_entry_name_ciphers_passphrase);

30 // if (passphrase == null) // log.warn("no encryption passphrase has been supplied explicitly via " + "an env-entry, falling back on the default..."); // passphrase = DEFAULT_PASSPHRASE; // this.cipherspassphrase = passphrase; // log.info("using encryption passphrase for ciphers keys: " + passphrase); // return passphrase; ejb-jar.xml env-entry @see org.jboss.ejb3.examples.ch05.encryption.encryptionremotebusiness#getmessagedigestalgorithm() / @Override public String getmessagedigestalgorithm() // / if (this.messagedigestalgorithm == null) // log.warn("no message digest algorithm has been supplied explicitly via " + "an env-entry, falling back on the default..."); // this.messagedigestalgorithm = DEFAULT_ALGORITHM_MESSAGE_DIGEST; //

31 log.info("configured MessageDigest one-way hash algorithm is: " + this.messagedigestalgorithm); // return this.messagedigestalgorithm; // --------------------------------------------------------------------------- // ------------------------------------------------------ // --------------------------------------------------------------------------- @link IllegalStateException null @param enventryname @return @throws IllegalStateException / private String getenvironmententryasstring(final String enventryname) throws IllegalStateException // SessionContext final SessionContext context = this.context; if (context == null) log.warn("no SessionContext, bypassing request to obtain environment entry: " + enventryname); return null; // SessionContext JNDI ENC Object lookupvalue = null; try lookupvalue = context.lookup(enventryname); log.debug(" " + enventryname + " " + lookupvalue); catch (final IllegalArgumentException iae) // EJB // null log.warn(" " + enventryname); return null;

32 // String returnvalue = null; try returnvalue = String.class.cast(lookupValue); catch (final ClassCastException cce) throw new IllegalStateException(" " + lookupvalue + " " + String.class.getName() + " ", cce); // return returnvalue; @link EncryptionBeanBase#getCharset() @link UnsupportedEncodingException @link RuntimeException @param bytes @return @throws RuntimeException @throws IllegalArgumentException / private String bytearraytostring(final byte[] bytes) throws RuntimeException, IllegalArgumentException // if (bytes == null) throw new IllegalArgumentException("Byte array is required."); // String result = null; final String charset = this.getcharset(); try result = new String(bytes, charset); catch (final UnsupportedEncodingException e)

33 throw new RuntimeException("Specified charset is invalid: " + charset, e); // return result; @link EncryptionBeanBase#getCharset() @link UnsupportedEncodingException @link RuntimeException @param input @return @throws RuntimeException @throws IllegalArgumentException null / private byte[] stringtobytearray(final String input) throws RuntimeException, IllegalArgumentException // if (input == null) throw new IllegalArgumentException("Input is required."); // byte[] result = null; final String charset = this.getcharset(); try result = input.getbytes(charset); catch (final UnsupportedEncodingException e) throw new RuntimeException("Specified charset is invalid: " + charset, e); // return result; /

34 @return / private String getcharset() return CHARSET; B.3.1.2 EncryptionCommonBusiness.java package org.jboss.ejb3.examples.ch05.encryption; EncryptionEJB @author <a href="mailto:alr@jboss.org">alr</a> / public interface EncryptionCommonBusiness // --------------------------------------------------------------------------- // ---------------------------------------------------------------------- // --------------------------------------------------------------------------- @param input @return @throws IllegalArgumentException null @throws EncryptionException / String encrypt(string input) throws IllegalArgumentException, EncryptionException; @link EncryptionCommonBusiness#encrypt(String) @param input @return @throws IllegalArgumentException null @throws EncryptionException / String decrypt(string input) throws IllegalArgumentException, EncryptionException;

35 @param input @return @throws IllegalArgumentException null @throws EncryptionException / String hash(string input) throws IllegalArgumentException, EncryptionException; @param hash @param input @return @throws IllegalArgumentException null @throws EncryptionException / boolean compare(string hash, String input) throws IllegalArgumentException, EncryptionException; / / / @return / String getcipherspassphrase(); @return /

36 String getmessagedigestalgorithm(); B.3.1.3 EncryptionException.java package org.jboss.ejb3.examples.ch05.encryption; import javax.ejb.applicationexception; @author <a href="mailto:alr@jboss.org">alr</a> / @ApplicationException // Exception // public class EncryptionException extends Exception // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- JVM / private static final long serialversionuid = 1L; // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / / public EncryptionException() super(); public EncryptionException(String message, Throwable cause) super(message, cause);

37 public EncryptionException(String message) super(message); public EncryptionException(Throwable cause) super(cause); B.3.1.4 EncryptionLocalBusiness.java package org.jboss.ejb3.examples.ch05.encryption; EncryptionEJB EJB 3.x @author <a href="mailto:alr@jboss.org">alr</a> / public interface EncryptionLocalBusiness extends EncryptionCommonBusiness // B.3.1.5 EncryptionRemoteBusiness.java package org.jboss.ejb3.examples.ch05.encryption; EncryptionEJB EJB 3.x @author <a href="mailto:alr@jboss.org">alr</a> / public interface EncryptionRemoteBusiness extends EncryptionCommonBusiness // B.3.1.6 META-INF/ejb-jar.xml <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1"> <enterprise-beans>

38 <!-- EncryptionEJB --> <session> <!-- Bean @Stateless.name --> <ejb-name>encryptionejb</ejb-name> <!-- --> <env-entry> <env-entry-name>cipherspassphrase</env-entry-name> <env-entry-type>java.lang.string</env-entry-type> <env-entry-value>overriddenpassword</env-entry-value> </env-entry> <!-- --> <env-entry> <env-entry-name>messagedigestalgorithm</env-entry-name> <env-entry-type>java.lang.string</env-entry-type> <env-entry-value>sha</env-entry-value> </env-entry> </session> </enterprise-beans> </ejb-jar> B.3.2 B.3.2.1 EncryptionIntegrationTestCase.java package org.jboss.ejb3.examples.ch05.encryption; import java.net.malformedurlexception; import java.net.url; import javax.ejb.ejb; import junit.framework.testcase; import org.jboss.arquillian.api.deployment; import org.jboss.arquillian.junit.arquillian; import org.jboss.logging.logger; import org.jboss.shrinkwrap.api.shrinkwrap; import org.jboss.shrinkwrap.api.spec.javaarchive;

39 import org.junit.test; import org.junit.runner.runwith; EncryptionEJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @RunWith(Arquillian.class) public class EncryptionIntegrationTestCase extends EncryptionTestCaseSupport // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(EncryptionIntegrationTestCase.class); EncryptionEJB EJB 3.x / @EJB private static EncryptionLocalBusiness encryptionlocalbusiness; ejb-jar.xml env-entry / private static final String EXPECTED_CIPHERS_PASSPHRASE = "OverriddenPassword"; ejb-jar.xml env-entry / private static final String EXPECTED_ALGORITHM_MESSAGE_DIGEST = "SHA"; / @Deployment public static JavaArchive createdeployment() throws MalformedURLException final JavaArchive archive = ShrinkWrap.create("slsb.jar", JavaArchive.class). addclasses(encryptionbean.class, EncryptionCommonBusiness.class, EncryptionLocalBusiness.class, EncryptionRemoteBusiness.class, EncryptionException.class).addManifestResource(new URL(Encryption IntegrationTestCase.class.getProtectionDomain().getCodeSource().getLocation(), "../classes/meta-

40 INF/ejb-jar.xml"), "ejb-jar.xml"); // SHRINKWRAP-141 ejb-jar log.info(archive.tostring(true)); return archive; // --------------------------------------------------------------------------- // -------------------------------------------------------------------- // --------------------------------------------------------------------------- / EJB / @see @link EncryptionTestCaseSupport#assertHashing(EncryptionCommonBusiness) / @Test public void testhashing() throws Throwable // log.info("testhashing"); // this.asserthashing(encryptionlocalbusiness); @see @link EncryptionTestCaseSupport#assertEncryption(EncryptionCommonBusiness) / @Test public void testencryption() throws Throwable // log.info("testencryption"); // this.assertencryption(encryptionlocalbusiness); ejb-jar.xml @throws Throwable /

41 @Test public void testmessagedigestalgorithmoverride() throws Throwable // log.info("testmessagedigestalgorithmoverride"); // final String algorithm = encryptionlocalbusiness.getmessagedigestalgorithm(); log.info("using MessageDigest algorithm: " + algorithm); // TestCase.assertEquals("MessageDigest algorithm should have been overridden from the environment entry", EXPECTED_ALGORITHM_MESSAGE_DIGEST, algorithm); ejb-jar.xml @throws Throwable / @Test public void testcipherspassphraseoverride() throws Throwable // log.info("testcipherspassphraseoverride"); // final String passphrase = encryptionlocalbusiness.getcipherspassphrase(); log.info("using Encryption passphrase: " + passphrase); // TestCase.assertEquals("Encryption passphrase should have been overridden from the environment entry", EXPECTED_CIPHERS_PASSPHRASE, passphrase); B.3.2.2 EncryptionTestCaseSupport.java package org.jboss.ejb3.examples.ch05.encryption; import junit.framework.testcase; import org.jboss.logging.logger; Encryption POJO EncryptionEJB

42 @author <a href="mailto:alr@jboss.org">alr</a> / public class EncryptionTestCaseSupport // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(EncryptionTestCaseSupport.class); / private static final String TEST_STRING = "EJB 3.1 Examples Test String"; // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- 1 2 @param service POJO EJB @throws Throwable / protected void asserthashing(final EncryptionCommonBusiness service) throws Throwable // log.info("asserthashing"); // final String input = TEST_STRING; // final String hash = service.hash(input); log.info(" " + input + " " + hash); //

43 TestCase.assertNotSame("The hash function had no effect upon the supplied input", input, hash); // final boolean equal = service.compare(hash, input); // TestCase.assertTrue("The comparison of the input to its hashed result failed", equal); 1 2 @param POJO EJB @throws Throwable / protected void assertencryption(final EncryptionCommonBusiness service) throws Throwable // log.info("assertencryption"); // final String input = TEST_STRING; // final String encrypted = service.encrypt(input); log.info("encrypted result of "" + input + " ": " + encrypted); // TestCase.assertNotSame("The encryption function had no effect upon the supplied input", input, encrypted); // final String roundtrip = service.decrypt(encrypted); // TestCase.assertEquals("The comparison of the input to its encrypted result failed", input, roundtrip);

44 B.3.2.3 EncryptionUnitTestCase.java package org.jboss.ejb3.examples.ch05.encryption; import org.jboss.logging.logger; import org.junit.beforeclass; import org.junit.test; EncryptionEJB @author <a href="mailto:alr@jboss.org">alr</a> / public class EncryptionUnitTestCase extends EncryptionTestCaseSupport // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / private static final Logger log = Logger.getLogger(EncryptionUnitTestCase.class); POJO / private static EncryptionBean encryptionservice; // --------------------------------------------------------------------------- // ------------------------------------------------------------ // --------------------------------------------------------------------------- / @BeforeClass public static void initialize() throws Throwable // POJO encryptionservice = new EncryptionBean(); encryptionservice.initialize(); // // ---------------------------------------------------------------------------

45 // -------------------------------------------------------------------- // --------------------------------------------------------------------------- / POJO / @see @link EncryptionTestCaseSupport#assertHashing(EncryptionCommonBusiness) / @Test public void testhashing() throws Throwable // log.info("testhashing"); // this.asserthashing(encryptionservice); @see @link EncryptionTestCaseSupport#assertEncryption(EncryptionCommonBusiness) / @Test public void testencryption() throws Throwable // log.info("testencryption"); // this.assertencryption(encryptionservice);

47 C EJB FTP C.1 FTP Bean FTP RAM SFSB / C.2 http://community.jboss.org/docs/doc-15568 http://github.com/jbossejb3/oreilly-ejb-6thedition-book-examples/tree/master/ch06- filetransfer/ C.3 C.3.1 C.3.1.1 FileTransferBean.java package org.jboss.ejb3.examples.ch06.filetransfer; import java.io.ioexception; import java.io.serializable; import javax.annotation.postconstruct; import javax.annotation.predestroy;

48 import javax.ejb.postactivate; import javax.ejb.prepassivate; import javax.ejb.remote; import javax.ejb.remove; import javax.ejb.stateful; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpfile; import org.apache.commons.net.ftp.ftpreply; import org.jboss.logging.logger; Bean FileTransferEJB Bean @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @Stateful(name = FileTransferBean.EJB_NAME) @Remote(FileTransferRemoteBusiness.class) public class FileTransferBean implements FileTransferRemoteBusiness, Serializable // ---------------------------------------------------------- UID / private static final long serialversionuid = 1L; / private static final Logger log = Logger.getLogger(FileTransferBean.class); JNDI EJB / public static final String EJB_NAME = "FileTransferEJB"; / private static String CONNECT_HOST = "localhost";

49 FTP IANA 21 nix 12345 / private static int CONNECT_PORT = 12345; // ---------------------------------------------------- FTP / private FTPClient client; / private String presentworkingdirectory; //--------------------------------------------------------------------------- // ----------------------------------------------- //--------------------------------------------------------------------------- @see org.jboss.ejb3.examples.ch06.filetransfer.filetransfercommonbusiness# disconnect() / @PrePassivate @PreDestroy @Override public void disconnect() // FTP final FTPClient client = this.getclient(); //

50 if (client!= null) // if (client.isconnected()) // try client.logout(); log.info("logged out of: " + client); catch (final IOException ioe) log.warn("exception encountered in logging out of the FTP client", ioe); // try log.debug("disconnecting: " + client); client.disconnect(); log.info("disconnected: " + client); catch (final IOException ioe) log.warn("exception encountered in disconnecting the FTP client", ioe); // null this.client = null; FTP @see org.jboss.ejb3.examples.ch06.filetransfer.filetransfercommonbusiness#connect() / @PostConstruct @PostActivate @Override public void connect() throws IllegalStateException, FileTransferException

51 / / final FTPClient clientbefore = this.getclient(); if (clientbefore!= null && clientbefore.isconnected()) throw new IllegalStateException("FTP "); // final String connecthost = this.getconnecthost(); final int connectport = this.getconnectport(); // final FTPClient client = new FTPClient(); final String canonicalservername = connecthost + ":" + connectport; log.debug("connecting to FTP Server at " + canonicalservername); try client.connect(connecthost, connectport); catch (final IOException ioe) throw new FileTransferException("Error in connecting to " + canonicalservername, ioe); // log.info("connected to FTP Server at: " + canonicalservername); this.setclient(client); // this.checklastoperation(); try // client.login("user", "password"); // this.checklastoperation(); catch (final Exception e) throw new FileTransferException("Could not log in", e); // pwd cd

52 final String pwd = this.getpresentworkingdirectory(); if (pwd!= null) this.cd(pwd); //--------------------------------------------------------------------------- // --------------------------------------------------------------- //--------------------------------------------------------------------------- / (non-javadoc) @see org.jboss.ejb3.examples.ch06.filetransfer.filetransfercommonbusiness#cd(java.lang.string) / @Override public void cd(final String directory) // final FTPClient client = this.getclient(); // cd try // cd client.changeworkingdirectory(directory); e); // this.checklastoperation(); catch (final Exception e) throw new FileTransferException("Could not change working directory to "" + directory + " "", // pwd log.info("cd > " + directory); this.setpresentworkingdirectory(directory); / (non-javadoc) @see org.jboss.ejb3.examples.ch06.filetransfer.filetransfercommonbusiness#mkdir(java.lang.string) / @Override public void mkdir(final String directory)

53 // final FTPClient client = this.getclient(); // cd try // mkdir client.makedirectory(directory); // this.checklastoperation(); catch (final Exception e) throw new FileTransferException("Could not make directory "" + directory + " "", e); / (non-javadoc) @see org.jboss.ejb3.examples.ch06.filetransfer.filetransfercommonbusiness#pwd() / @Override public String pwd() // final FTPClient client = this.getclient(); // pwd try final FTPFile[] files = client.listfiles(); for (final FTPFile file : files) log.info(file); // pwd return client.printworkingdirectory(); catch (final IOException ioe) throw new FileTransferException("Could not print working directory", ioe);

54 //--------------------------------------------------------------------------- // ---------------------------------------------------- //--------------------------------------------------------------------------- @link FileTransferException @throws FileTransferException / protected void checklastoperation() throws FileTransferException // final FTPClient client = this.getclient(); // final int connectreply = client.getreplycode(); if (!FTPReply.isPositiveCompletion(connectReply)) // throw new FileTransferException("Did not receive positive completion code from server, instead code was: " + connectreply); / (non-javadoc) @see org.jboss.ejb3.examples.ch06.filetransfer.filetransferremotebusiness#endsession() / @Remove @Override public void endsession() log.info("session Ending..."); // / ------------------------------------------------- @return connecthost / public String getconnecthost() return CONNECT_HOST;

55 @return connectport / public int getconnectport() return CONNECT_PORT; @return client / protected final FTPClient getclient() return client; @param client / private void setclient(final FTPClient client) this.client = client; @return presentworkingdirectory / private String getpresentworkingdirectory() return presentworkingdirectory; @param presentworkingdirectory presentworkingdirectory / private void setpresentworkingdirectory(string presentworkingdirectory) this.presentworkingdirectory = presentworkingdirectory;

56 C.3.1.2 FileTransferCommonBusiness.java package org.jboss.ejb3.examples.ch06.filetransfer; FileTransferEJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface FileTransferCommonBusiness // --------------------------------------------------------------------------- // ---------------------------------------------------------------------- // --------------------------------------------------------------------------- @throws IllegalStateException / void mkdir(string directory) throws IllegalStateException; @param directory @throws IllegalStateException / void cd(string directory) throws IllegalStateException; @return @throws IllegalStateException / String pwd() throws IllegalStateException; /

57 / void disconnect(); FTP @throws IllegalStateException / / void connect() throws IllegalStateException; C.3.1.3 FileTransferException.java package org.jboss.ejb3.examples.ch06.filetransfer; @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public class FileTransferException extends RuntimeException // ---------------------------------------------------------- private static final long serialversionuid = 1L; // ---------------------------------------------------------- public FileTransferException() super(); public FileTransferException(final String message, final Throwable cause) super(message, cause); public FileTransferException(final String message)

58 super(message); public FileTransferException(final Throwable cause) super(cause); C.3.1.4 FileTransferRemoteBusiness.java package org.jboss.ejb3.examples.ch06.filetransfer; import javax.ejb.remove; FileTransferEJB EJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public interface FileTransferRemoteBusiness extends FileTransferCommonBusiness // --------------------------------------------------------------------------- // ---------------------------------------------------------------------- // --------------------------------------------------------------------------- Bean @link javax.ejb.remove SFSB @Remove / void endsession(); C.3.2 C.3.2.1 FileTransferIntegrationTestCase.java package org.jboss.ejb3.examples.ch06.filetransfer; import java.io.file; import javax.ejb.ejb; import javax.ejb.nosuchejbexception;

59 import junit.framework.testcase; import org.jboss.arquillian.api.deployment; import org.jboss.arquillian.junit.arquillian; import org.jboss.logging.logger; import org.jboss.shrinkwrap.api.shrinkwrap; import org.jboss.shrinkwrap.api.spec.javaarchive; import org.junit.after; import org.junit.afterclass; import org.junit.beforeclass; import org.junit.test; import org.junit.runner.runwith; FileTransferEJB EJB Bean @link FileTransferTestCaseBase EJB @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / @RunWith(Arquillian.class) public class FileTransferIntegrationTestCase extends FileTransferTestCaseBase // ---------------------------------------------------------- / private static final Logger log = Logger.getLogger(FileTransferIntegrationTestCase.class); FTP / private static final String FTP_SERVER_USERS_CONFIG_FILENAME = "ftpusers.properties"; FTP / private static final int FTP_SERVER_BIND_PORT = 12345;

60 FTP / private static FtpServerPojo ftpserver; @return / @Deployment public static JavaArchive createdeployment() final JavaArchive archive = ShrinkWrap.create("ftpclient.jar", JavaArchive.class). addpackage(filetransferbean.class.getpackage()); log.info(archive.tostring(true)); return archive; // ---------------------------------------------------- EJB / @EJB private FileTransferRemoteBusiness client1; FTP / @EJB private FileTransferRemoteBusiness client2; //------------------------------------------------------------------------- // --------------------------------------------------------- //------------------------------------------------------------------------- FTP / @BeforeClass public static void startftpserver() throws Exception // final FtpServerPojo server = new FtpServerPojo();

61 // server.setusersconfigfilename(ftp_server_users_config_filename); server.setbindport(ftp_server_bind_port); // server.initializeserver(); server.startserver(); ftpserver = server; FTP @throws Exception / @AfterClass public static void stopftpserver() throws Exception ftpserver.stopserver(); FTP SFSB / @After public void endclientsessions() throws Exception // 1 try client1.endsession(); // catch (final NoSuchEJBException nsee) // // 2 try client2.endsession(); // catch (final NoSuchEJBException nsee)

62 // // ------------------------------------------------------------------ 2 @throws Exception / @Test public void testsessionisolation() throws Exception // log.info("testsessionisolation"); // final FileTransferRemoteBusiness session1 = this.getclient(); // final FileTransferRemoteBusiness session2 = this.client2; // final String ftphome = getftphome().getabsolutepath(); session1.cd(ftphome); session2.cd(ftphome); // final String newdirsession1 = "newdirsession1"; final String newdirsession2 = "newdirsession2"; session1.mkdir(newdirsession1); session1.cd(newdirsession1); session2.mkdir(newdirsession2); session2.cd(newdirsession2); // final String pwdsession1 = session1.pwd(); final String pwdsession2 = session2.pwd(); // TestCase.assertEquals(" 1 pwd ", ftphome + File.separator + newdirsession1, pwdsession1); TestCase.assertEquals(" 2 pwd ", ftphome + File.separator + newdirsession2, pwdsession2);

63 // 2 1 session2.endsession(); @link FileTransferRemoteBusiness#endSession() SFSB @link NoSuchEJBException @throws Exception / @Test public void testsfsbremoval() throws Exception // log.info("testsfsbremoval"); // final FileTransferRemoteBusiness sfsb = this.getclient(); // final String ftphome = getftphome().getabsolutepath(); sfsb.cd(ftphome); // pwd final String pwdbefore = sfsb.pwd(); TestCase.assertEquals(" FTP ", // Bean // @Remove sfsb.endsession(); // NoSuchEJBException boolean gotexpectedexception = false; try // @Remove sfsb.pwd(); catch (final NoSuchEJBException nsee) gotexpectedexception = true; TestCase.assertTrue(" SFSB Bean ", gotexpectedexception);

64 // -------------------------------------------------------------- / (non-javadoc) @see org.jboss.ejb3.examples.ch06.filetransfer.filetransfertestcasebase#getclient() / @Override protected FileTransferRemoteBusiness getclient() return this.client1; C.3.2.2 FileTransferTestCaseBase.java package org.jboss.ejb3.examples.ch06.filetransfer; import java.io.file; import junit.framework.testcase; import org.jboss.logging.logger; import org.junit.after; import org.junit.before; import org.junit.test; @author <a href="mailto:andrew.rubinger@jboss.org">alr</a> / public abstract class FileTransferTestCaseBase // ---------------------------------------------------------- / private static final Logger log = Logger.getLogger(FileTransferTestCaseBase.class);