Archive for 6 月 28th, 2009

JSTL こういうこともできるのか

日曜日, 6 月 28th, 2009

<%@page contentType=”text/html”%>
<%@page pageEncoding=”UTF-8″%>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
    “http://www.w3.org/TR/html4/loose.dtd”>
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
<html>
    <head>
        <title>偶数? 奇数?</title>
    </head>
    <body>
        <h2>偶数? 奇数?</h2>
        <hr/>
        <c:set var=”miniValue” value=”2″/>
        <c:set var=”maxValue” value=”12″/>
        <c:forEach var=”i” begin=”2″ end=”${maxValue}”>
            <c:choose>
                <c:when test=”${i%2 == 0}”>
                    <c:out value=”${i} は偶数です。”/><br/>
                </c:when>
                <c:otherwise>
                    <c:out value=”${i} は奇数です。”/><br/>
                </c:otherwise>
            </c:choose>
        </c:forEach>
    </body>
    <hr/>
    <i>ビット演算は使えない\${i&1 == 0}</i>
</html>

2

ビット演算は使えないようです。

1

読むことのできない英語の本を買ってしまった。

パラパラとめくっていたらこんなことができるようなので早速試してみたしだいです。

Hatena タグ:

Singleton Session Beans の並行処理 その3

日曜日, 6 月 28th, 2009

この前のサンプルはちょっとあれでしたので Sun のチュートリアルとほぼ同じコードを載せておきます。

package counter.web;

import counter.ejb.CounterBean;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class Count {

    @EJB
    private CounterBean counterBean;
    private int hitCount;

    public Count() {
        this.hitCount = 0;
    }

    public int getHitCount() {
        hitCount = counterBean.getHits();
        return hitCount;
    }

    public void setHitCount(int newHits) {
        this.hitCount = newHits;
    }
}

——————————————————————————————————————————————

package counter.ejb;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.AccessTimeout;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Singleton;

@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) // デフォルトで適用されるので無くてもOK
@Singleton
@AccessTimeout(value = 20000)
public class CounterBean {

    private int hits = 1;

    @Lock(LockType.WRITE) // デフォルトで適用されるので無くてもOK
    public int getHits() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {
            Logger.getLogger(CounterBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hits++;
    }
}

—————————————————————————————————————————————

<?xml version=’1.0′ encoding=’UTF-8′ ?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
    “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”
      xmlns:h=”http://java.sun.com/jsf/html”>
    <body>
        <h:outputText value=”This page has been accessed #{count.hitCount} time(s).”/>
    </body>
</html>

以上です。

CounterBean をこのように変更することも可能です。

@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
@Singleton
@AccessTimeout(value = 20000)
public class CounterBean {

    private int hits = 1;

    public synchronized int getHits() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {
            Logger.getLogger(CounterBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return hits++;
    }
}

このような便利な機能を使わない場合は

@ConcurrencyManagement(ConcurrencyManagementType.CONCURRENCY_NOT_ALLOWED) とすればいいみたい。

う~ん・・・ いまいちこの機能のありがたさが解らない。

JEE6 が正式リリースされたら誰かが解りやすいサンプルと解説をしてくれるだろうからそれまで気長に待つとしよう(^^;

Hatena タグ: