yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2018/12 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
 垂オ訳ございませんが、現在このブログではトラックバックを受け入れていません。

 この記事に対してリンクされる場合には、こちらのURLをご利用ください。
http://void.yamicha.com/blog/blog.cgi?mode=view&number=766
 上記URLをトリプルクリックされますと、簡単にURL全体の選択が行えます。

※以下の記事がトラックバックされます。
カン菅
2010/06/05(Sat)22:31:34
 鳩山氏の突然の辞任劇の後、後任の民主党代表には菅氏が選出され、新首相となりました。代表選は菅氏と樽床氏の対決でしたが、岡田氏や前原氏など有力者が相次いで菅氏の支持に回り、反小沢勢力の多くを取り込んだ菅氏が勝利しました。鳩山氏の残り任期が菅氏の任期となるため、今回の代表選における任期自体は9月末までと非常に短いですが、参院選はこの体制で行われることになります。
 民主党としても党内事情はあるはずですが、期待感に欠ける代表選であると言わざるを得ません。現状では民主党も自民党も支持を完全に失っていますが、それは双方が旧来的な体質を保持しているためです。政党どころか日本の政治自体が大混乱に陥っているのですから、ここで古い体質を払拭する必要があり、そのためには若手を代表にして大ナタを振るうのが早道でした。
 ところが、今回の民主党代表選の候補は、反小沢ではあってもベテランと評して差し支えない菅氏と、小沢氏の影響力がささやかれる樽床氏でした。仮に樽床氏が選ばれたとしても、小沢氏が体制に介入してくるようなら、当然ながら大ナタを振るうことはできませんから、今回の代表選はどう転んでも大きな期待は得られにくかったはずで、党の事情による性急な日程もあり、実質的に盛り上がりのない代表選でした。
 これだけの窮地にあって、果たして民主党には本当に体制を刷新する気があるのでしょうか。自民党政権下でも安部・福田・麻生各氏と1年程度での首相交代が続きましたが、3度目の麻生氏の時点では最初から非常に苦しい状況に置かれていました。つまり、もし2度目の菅氏で失敗してしまえば、「3度目」は非常に厳しい立場に置かれるのです。それを防ぐためには、当面は菅氏の体制で刷新を進めていくしかありませんが、ここで体制を刷新できるかといえば、道は険しいと評するよりありません。
 また、党内に小沢氏の勢力が残っているのも気がかりです。仮に人事面で小沢氏の影響力を排除できたとしても、政策面で小沢氏が余計な口出しをすれば、民主党は間違いなく混乱に陥りますし、支持も得られなくなります。国民が望んでいるのは、小沢氏が単に幹事長などのポストを去ることではなく、その影響力をも返上することに他なりません。党内に絶大な影響力が残っている限り、党を旧自民党的体質から脱却させるのは困難です。
 国民の審判を受ける参院選が迫っている今のタイミングは、これまでの政策を見直すまたとない機会でもあります。無意味なバラマキを改善し、財政を立て直す政策を示せば、支持を集められる可能性は十分にあります。しかし、小沢氏の影響力を気にしている限り、小沢氏の選挙目当ての政策を覆すのは非常に難しいはずで、政策面で不要なものを見直す行為の足かせにすらなります。そして、ここで政策見直しが上手く行えなければ、後に政策見直しを断行したくなったとしても、国民の負託もなしに政策を変更するか、解散に打って出るしかなくなるため、極めて選択肢が限られます。
 すなわち、菅氏は外からは期待を集められなくなりかねず、中からは小沢氏に脅かされ、最初から非常に苦しい立場に立たされているといえます。世論の後押しも限られてしまい、小沢氏と対立しようにもなかなか上手くいかないはずですし、かといって融和の姿勢を見せようものなら、即座に支持を失うのは間違いありません。
 ただ、民主党自体は決して能力が低い政党ではありませんので、小沢氏の勢力を上手く抑え込んだ上で、菅氏が積極的に能力のある若手を用い、大ナタを振るうことができるようにすれば、変化する可能性がないわけではありません。自民党にも第三党にも期待できない状況下では、それを望む以外にはありません。

 JPA 1.0では@OneToManyと@ManyToOneをセットで、あるいは@ManyToManyを両側に書かなくてはなりませんでしたが、JPA 2.0ではUnidirectionalの機能が導入されており、片側に書くだけでも動作させられるようになっています。この機能は初期のGlassFish v3 Previewでは使えませんでしたが、最近のGlassFishでは使えるようになっています。
 ひとまず簡単に使用してみました。
/com
 /yamicha
  /unidirect
   Category.java
   Content.java
   UnidirectAccess.java
   UnidirectServlet.java
/META-INF
 persistence.xml
 persistence.xmlはこれまで同様です。
<?xml version="1.0" encoding="UTF-8"?>

<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="MySQL" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/MySQL</jta-data-source>
<properties>
<property name="eclipselink.jdbc.driver"
value="com.mysql.jdbc.Driver" />
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.target-database" value="MySQL" />
<property name="eclipselink.logging.level" value="FINE"/>
</properties>
</persistence-unit>
</persistence>
 通常の書き方とUnidirectの違いが出るのはここからです。Category.javaには@OneToManyと@JoinColumnの両方を書きます。
package com.yamicha.unidirect;

import javax.sql.*;
import javax.persistence.*;
import java.util.*;

@Entity @Table(name="unidirect_category" , schema="yamicha")
	public class Category implements java.io.Serializable{
	private int id;
	private String name;
	private List<Content> contents;

	public Category(){
		contents = new ArrayList<Content>();
	}
	public Category(String s){
		this();
		name = s;
	}

	@Id @GeneratedValue @Column(name="id") public int getId(){
		return id;
	}
	@Column(name="name") public String getName(){
		return name;
	}
	@OneToMany(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
		@JoinColumn(name="category" , referencedColumnName="id")
		public List<Content> getContents(){
		return contents;
	}

	public void setId(int i){
		id = i;
	}
	public void setName(String s){
		name = s;
	}
	public void setContents(List<Content> c){
		contents = c;
	}
}
 ここで混乱しがちなのが@JoinColumnです。これはもともと@ManyToOneの側につけるものであるため、nameは「Content側が持つ、Categoryとのリレー用IDを格納する」カラム名、referencedColumnNameは「Category側が持つリレー用ID」となっています。うっかり逆に書くと大変です。
 Content.javaも普通のEntityですが、@ManyToOneをつけるべきプロパティ自体が不要である点が異なります。
package com.yamicha.unidirect;

import javax.sql.*;
import javax.persistence.*;

@Entity @Table(name="unidirect_content" , schema="yamicha")
	public class Content implements java.io.Serializable{
	private int id;
	private String name;

	public Content(){
	}
	public Content(String s){
		name = s;
	}

	@Id @Column(name="id") @GeneratedValue public int getId(){
		return id;
	}
	@Column(name="name") public String getName(){
		return name;
	}

	public void setId(int i){
		id = i;
	}
	public void setName(String s){
		name = s;
	}
}
 Categoryを保持するプロパティは不要です。Many側からOne側にアクセスする必要がない場合、もしくはJAXBのように循環参照しているとまずい場合には効果を発揮しそうです。
 Many側がOne側を保持していない点を除けば、使い方は通常のものと全く同じです。
// UnidirectAccess.java
package com.yamicha.unidirect;

import javax.ejb.*;
import javax.annotation.*;
import javax.persistence.*;
import java.util.List;
import java.util.ArrayList;

@Remote @Stateless(name="UnidirectAccess" ,
	mappedName="ejb/UnidirectAccess")
	public class UnidirectAccess{
	@PersistenceContext(unitName="MySQL") private EntityManager em;

	public void regist(){
		Category c1 = new Category("資産");
		c1.getContents().add(new Content("現金"));
		c1.getContents().add(new Content("売掛金"));
		c1.getContents().add(new Content("社債発行差金"));

		Category c2 = new Category("負債");
		c2.getContents().add(new Content("未払金"));
		c2.getContents().add(new Content("当座借越"));

		Category c3 = new Category("収益");
		c3.getContents().add(new Content("売上"));
		c3.getContents().add(new Content("受取手数料"));

		em.persist(c1);
		em.persist(c2);
		em.persist(c3);
	}
	public List<Category> getCategories(){
		return em.createQuery("SELECT c FROM Category c" ,
			Category.class).getResultList();
	}
	public Category getCategory(Object id){
		return em.find(Category.class , id);
	}
}

// UnidirectServlet.java
package com.yamicha.unidirect;

import javax.servlet.annotation.*;
import javax.ejb.*;
import javax.annotation.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.persistence.*;
import java.io.*;
import java.util.List;
import java.util.ArrayList;

@WebServlet(name="unidirectservlet" , urlPatterns={"/*"})
	public class UnidirectServlet extends HttpServlet{
	@EJB(beanName="UnidirectAccess") private UnidirectAccess ua;

	public void doGet(HttpServletRequest request ,
		HttpServletResponse response) throws IOException{
		doPost(request , response);
	}
	public void doPost(HttpServletRequest request ,
		HttpServletResponse response) throws IOException{
		response.setCharacterEncoding("UTF-8");
		response.setHeader("Content-type" ,
			"text/plain;charset=UTF-8");
		PrintWriter out = response.getWriter();

		ua.regist();

		List<Category> categories = ua.getCategories();
		for(Category category : categories){
			out.println(category.getName());
			for(Content c : category.getContents()){
				out.println("t" + c.getName());
			}
		}

		out.close();
	}
}
 JAXBと組み合わせれば@XmlTransientを書く必要もなくなるなど、様々な使い方ができそうです。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -