Seam-genの試用手記


Seam-genとは?Seam-genはSeamが持っているプロジェクト生成ツールです.開発者はcmdまたはEclipseのUIで簡単な構成を行うだけで自動的に1つのプロジェクトを生成することができ、このプロジェクトはすでに完全なCRUD機能を備えている.開発者はニーズに基づいてプロジェクトを修正するだけでよい.この点ではRoRとよく似ていて、それから盗んだのかどうか分かりません.開発環境準備jdk 1.5.0--Java 5以上でなければなりません.jboss-4.2.2.GA--最新の試用版を使わないことをお勧めします.そうしないと、どのように死んでも分からないので、価値がありません.jboss-seam-2.0.2.SP 1--jbossのように、ダウンロードして直接解凍すればいいです.MySQL Server 5.0--おじいさんたちは何度も詰めていますよね?終わったらもちろん環境変数の設定を忘れてはいけません.このDemoは何をしていますか?小さな項目で、3つのテーブルしかありません.userテーブルには、管理者アカウントと一般ユーザーアカウントが格納されています.suppliersテーブルはプロバイダで、id、name、codeがあります.dealテーブルは取引情報を格納し、supplieridはそのforeign keyとして使用されます.そう言えば、何をしているのか分かるだろう.取引情報を管理することです.終わったらMySqlでデータベースとテーブルを作成します.
Javaコード
  • create database seam;  
  •   
  • use seam;  
  •   
  • create table suppliers(  
  •   id integer primary key auto_increment,  
  •   name varchar(32 ) not  null ,  
  •   code varchar(32 ) not  null   
  • );  
  •   
  • create table deal(  
  •   id integer primary key auto_increment,  
  •   name varchar(32 ) not  null ,  
  •   supplierid integer,  
  •   Foreign Key (supplierid) references suppliers(id)  
  • );  
  •   
  • create table user(  
  •   id integer primary key auto_increment,  
  •   name varchar(32 ),  
  •   password varchar(32 ),  
  •   role varchar(32 )  
  • );  
  • create database seam;
    
    use seam;
    
    create table suppliers(
      id integer primary key auto_increment,
      name varchar(32) not null,
      code varchar(32) not null
    );
    
    create table deal(
      id integer primary key auto_increment,
      name varchar(32) not null,
      supplierid integer,
      Foreign Key (supplierid) references suppliers(id)
    );
    
    create table user(
      id integer primary key auto_increment,
      name varchar(32),
      password varchar(32),
      role varchar(32)
    );
    

    管理者のレコードをuserテーブルに挿入します.何の役にも立たないでしょう.
    Javaコード
  • insert into user values( '1' , 'admin' ,  'password' ,  'admin' );  
  • insert into user values('1','admin', 'password', 'admin');
    

    これがSeam-genです.Seam-genはEclipseのpluginで1.2にしか更新されず、時代の発展を完全に無視しているので、cmdで手動で生成し、Eclipseに移植するしかありません.以下は構成の記録で、後でゆっくり説明します:C:devjboss-seam-2.0.2.SP 1はSeamのインストールディレクトリseam setup--Seamプロジェクトの構成手順に入る.プロジェクトワークスペース--作業ディレクトリ、任意;JBoss home--Jbossインストールディレクトリ;プロジェクト名--プロジェクト名;ICEFaces--でもn可y、私のこのdemoは使えないなら役に立たない.RichFaces skin--いくつか試したことがありますが、個人的にはwineが好きです.ワインレッドです.as an EAR--EJBのものを使う必要がなければ、warを選んでください.そうしないとear;package name--爱はどうですか;Database--そのデータベース、候補の中から1つ選んで、私のはmysqlです;Hibernate dialect--書き間違えてはいけません.何が起こっているのか分かりません.JDBC driver jar--あなたのjtdsが保管している場所;JDBC driver class--comを使っています.mysql.jdbc.Driver; JDBC url--データベースに接続するurlです.例えば、jdbc:mysql://localhost:3306/seam「username」--データベースのユーザー名をリンクします.password--パスワード;Database catalog--Enterキーを直接押してスキップします.Already exist--y:データベースはすでにあります.n:データベースを再作成します.私のところはもちろんyです.drop and recreate--私はnを選びます.やった!早くしなさい.もちろん、Seamのディレクトリに直接あるbuildという設定もあります.propertiesファイルで直接編集すると、より効率的になる可能性があります.次に、プロジェクト:seam new-projectを生成します.とても簡単で、一歩でできます.もし私がbuildを使っていたらと聞かれるかもしれません.propertiesが構成したのも、このようにプロジェクトを生成しますか?はい、構成が終わったらseamのディレクトリに入り、直接コマンドを入力すればいいです.エンティティの生成:やはり簡単です:seam generate-entities.コマンドを入力すると、seamはデータベースに接続され、データベースのテーブルにJavaエンティティとmappingのプロファイルが生成されます.EclipseでEclipseを開くか、次の手順に従ってプロジェクトimportを入力します.Newプロジェクト-->Generalプロジェクト-->あなたのプロジェクト名(provider)です.これでEclipseで開発できます.Eclipseが作成されると、アプリケーションサーバに配置して実行しようとします.構成は非常に簡単です:cmdに次のコマンドを入力しました:seam deploy;Jbossを再起動し、ブラウザに入力します.http://localhost:8080/provider.牛!ロギンプロジェクトが生成されたとき、Seamは自動的にAuthenticatorを作成しました.JAvaファイル、中にはmethodが1つしかありません.もちろん、最初はビジネスロジックがなかったに違いありません.これらは自分で書かなければなりません.次のJava codeは、簡単なloginロジックを実現します.
    Javaコード
  • @Name ( "authenticator")  
  • public   class  Authenticator  
  • {  
  •     @Logger  Log log;  
  •       
  •     @In  Identity identity;  
  •       
  •     @In  EntityManager entityManager;  
  •      
  •     public   boolean  authenticate()  
  •     {  
  •         try   
  •         {  
  •            User user = (User) entityManager.createQuery(  
  •            "from User where name = :username and password = :password")  
  •            .setParameter("username", Identity.instance().getUsername())  
  •            .setParameter("password", Identity.instance().getPassword())  
  •            .getSingleResult();  
  •   
  •            if  (user.getRole() !=  null )  
  •            {  
  •                Identity.instance().addRole(user.getRole());  
  •            }  
  •            return   true ;  
  •         }  
  •         catch  (NoResultException ex)  
  •         {  
  •            return   false ;  
  •         }  
  •     }  
  • }  
  • @Name("authenticator")
    public class Authenticator
    {
        @Logger Log log;
        
        @In Identity identity;
        
        @In EntityManager entityManager;
       
        public boolean authenticate()
        {
        	try
            {
               User user = (User) entityManager.createQuery(
               "from User where name = :username and password = :password")
               .setParameter("username", Identity.instance().getUsername())
               .setParameter("password", Identity.instance().getPassword())
               .getSingleResult();
    
               if (user.getRole() != null)
               {
            	   Identity.instance().addRole(user.getRole());
               }
               return true;
            }
            catch (NoResultException ex)
            {
               return false;
            }
        }
    }
    

    機能は簡単です.データベースにユーザー入力ユーザー名とパスワードが存在するかどうかを検索し、存在しない場合falseに戻ります.存在する場合は、このユーザのroleをIdentity objectに割り当てます.ここでroleはuserテーブルのフィールドで、userまたはadminの2つの可能な値しか存在しません.空は許可されません.IdentityはSeamのbuilt-inのオブジェクトで、私たちが持ってきて使えます.私はそれをあまり説明しません.とにかくsecurityと関係があります.自動的に生成されるすべてのページに対して1つのプロファイルが設定されているページを設定します.例えばメニューには「menu.xhtmlとmenu.xhtml.xml.もう1つのプロファイル:page.xml.コンフィギュレーションファイルの山は、確かに少し煩わしいです.実は構成も簡単で、ログイン後にアクセスできるページやメニューオプションにlogin-required=「true」を追加します.管理者としてアクセスする必要がある場所にidentityを追加します.loggedIn and s:hasRole('admin')ではアクセス制限が実現されます.簡単!はい、ppに行きましょう.メニューにはホームという誰でもアクセスできるリンクしか残っていません.普通のユーザーがログインしてもuserListは見えませんが、dealとsuppliersを編集することができます.管理者としてログインすれば何でもできる.さっき、管理者のレコードを手動でデータベースに挿入すると言いましたが、管理者としてログインしてからwebに新しいユーザーレコードを挿入することができます.総括pros:特にデータベースに対して操作する中小規模のプロジェクトで、しかも簡単で、速くて、あります....さわやか!cons:再構成できますが、多くのプロファイルを生成します.大きなプロジェクトには向いていません.そうしないと、自分で構成してから開発したほうがいいことに気づきます.とにかく何でもやってみて、あなたが望んでいるかどうか分かります.ENJOY!