2013年9月23日月曜日

Client action on order fill and close

Client action on order fill and close
オーダー記入とクローズする上でのクライアントアクション

Consider that from the program you wish to do some extra logging on both order fill and close.
オーダー記入とクローズの両方において、拡張的ロギングが必要ならば、プログラム上で行うことを検討して欲しい。
And also you wish to set order stop loss:
また、あなたはストップロスオーダーを望むだろう:
client.startStrategy(new StrategyPublicMethods(new StrategyPublicMethods.ClientActions() {
                       
    @Override
    public void onOrderFill(IOrder order) {
        LOGGER.info("Order filled, execute here some logic on client side, say set stop loss if the order is long");
        if(order.isLong()){
            try {
                order.setStopLossPrice(order.getOpenPrice() - order.getInstrument().getPipValue() * 10);
            } catch (JFException e) {
                e.printStackTrace();
            }
        }
    }
                       
    @Override
    public void onOrderClose(IOrder order) {
        LOGGER.info("Order closed, execute here some logic on client side");                                  
    }
}));
Consider introducing an interface in a strategy which would serve as an order fill and close listener.
オーダー記入とクローズの助けとして、ストラテジの中でインタフェイスの導入を検討して欲しい。
Implementation of the interface would get passed from the IClient program:
インタフェイスの実装はIClientプログラムから渡されるだろう。
public class StrategyPublicMethods implements IStrategy {
       
    private IConsole console;
    private IEngine engine;
    private StrategyPublicMethods.ClientActions clientActions;
   
    public interface ClientActions {
        void onOrderClose(IOrder order);
        void onOrderFill(IOrder order);
    }
   
    //for the launch from standalone
    public StrategyPublicMethods (StrategyPublicMethods.ClientActions clientActions){
        this.clientActions = clientActions;
    }

    //...
}
Then on every order fill and close execute the logic that has been passed from the IClient program:
そして、全てのオーダー記入とクローズ時、IClientプログラムから渡されたロジックが実行される。 
@Override
public void onMessage(IMessage message) throws JFException {
    if(message.getType() == IMessage.Type.ORDER_FILL_OK){
        clientActions.onOrderFill(message.getOrder());
    }
    if(message.getType() == IMessage.Type.ORDER_CLOSE_OK){
        clientActions.onOrderClose(message.getOrder());
    }
}

2013年9月21日土曜日

Program communicating with a strategy

Program communicating with a strategy
ストラテジとしてのプログラム・コミュニケイティング

By defining a listener (in the means of public interface) within a strategy one can implement some client side logic on strategy events.
ストラテジの中でリスナー (パブリックインターフェイスの意味で)を定義することにより、一つのストラテジ・イベントにいくつかのクライアント側のロジックを実装することができる。



2013年9月18日水曜日

Change chart theme

Change chart theme
チャートテーマの変更

Note: Available with JForex-API 2.7.9
注意:JForex-API 2.7.9にて有効
IChartTheme represents a chart theme, it can be retreived and set to a chart by using the getTheme and setTheme methods of the IClientChartPresentationManager interface.
IChartThemeはチャートテーマを表示するものであり、IClientChartPresentationManagerインタフェイスのgetThemeメソッドとsetThemeメソッドの使用により取り出され、チャートにセットすることができる。
Consider changing chart's background and tick/candle colors:
チャートの背景やティック/ローソク足の色の変更を検討して欲しい。
chartPresentationManager.setTheme(
    chartPresentationManager.getTheme()
        .setName("Custom tick/candle color theme")
        .setColor(ColoredElement.BACKGROUND, new Color(254, 244, 214))
        .setColor(ColoredElement.CANDLE_BEAR, Color.CYAN)
        .setColor(ColoredElement.CANDLE_BULL, Color.ORANGE)
        .setColor(ColoredElement.ASK, Color.YELLOW.darker())
        .setColor(ColoredElement.BID, Color.PINK.darker())
);
One can retrieve a predefined theme by calling the IClientChartPresentationManager.getPredefinedTheme method.
IClientChartPresentationManager.getPredefinedThemeメソッドのコールにより、あらかじめ定義されたテーマを取り出すことができる。
Consider setting a predefined theme to a chart:
あらかじめ定義されたテーマをチャートにセッティングすることを検討して欲しい。
chartPresentationManager.setTheme(chartPresentationManager.getPredefinedTheme(IChartTheme.Predefined.BLUE_BLACK_ON_GRAY));
For full usage example look up the cmbChartTheme combo box in:
全ての使用方法の例をcmbChartThemeコンボボックスで検索できる。 

2013年9月15日日曜日

Add chart objects

Add chart objects
チャートオブジェクトの追加

One can not only plot chart objects from within a strategy, but also from the program running IClient.
ストラテジの中からチャートオブジェクトをプロットできるだけではなく、IClient実行中のプログラムからも可能である。
Consider creating a button panel which receives an IChart from IClientGUI.getChart():
IClientGUI.getChart()からIChartを受信するボタンパネルの作成を検討して欲しい。 

@SuppressWarnings("serial")
private class ChartObjectPanel extends JPanel {
   
    private final IChart chart;
    private ChartObjectPanel(IChart chart){
        this.chart = chart;
        addButtons();
    }
   
    private void addButtons(){          
        JButton btnVLine = new JButton("Add VLine");
        btnVLine.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                //draw the line at the time of the last drawn feed element on the chart
                ITimedData[] chartData = chart.getLastRequestedData();
                long time = chartData[chartData.length - 1].getTime();
                IChartObject obj = chart.getChartObjectFactory().createVerticalLine("vLine", time);
                obj.setColor(Color.RED);
                chart.add(obj);
            }});
        add(btnVLine);          
        JButton btnHLine = new JButton("Add HLine");
        btnHLine.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {  
                //draw the line in the chart price axis midpoint
                double price = chart.getMinPrice() + (chart.getMaxPrice() - chart.getMinPrice()) / 2;
                System.out.println(String.format("%.5f", price));                  
                IChartObject obj = chart.getChartObjectFactory().createHorizontalLine("hLine", price);
                obj.setColor(Color.GREEN);
                chart.add(obj);
            }});
        add(btnHLine);
    }
   
}

Handle IContext.openChart

Handle IContext.openChart
IContext.openChartのハンドル

Consider a program which opens a chart whenever the strategy calls IContext.openChart and closes a chart whenever the strategy call IContext.closeChart:
ストラテジがIContext.openChartをコールするごとにチャートを開くか、ストラテジがIContext.closeChartをコールするごとにチャートを閉じるか、ということをプログラムとして検討して欲しい。

client.addClientGUIListener(new IClientGUIListener() {  
    @Override
    public void onOpenChart(final IClientGUI clientGUI) {
        LOGGER.info("Chart opened from a startegy " + clientGUI.getChart().getFeedDescriptor());
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ChartFrame frame = new ChartFrame(clientGUI, client.getSubscribedInstruments());
                chartFrameMap.put(clientGUI.getChart(), frame);
                //Handle manual close - we need to call IClient.closeChart for strategy to know that the chart is no more there
                frame.addWindowListener(new WindowAdapter(){
                    public void windowClosing(WindowEvent e) {
                        LOGGER.info("Chart manually closed, removing the chart from the strategy context");
                        client.closeChart(clientGUI.getChart());
                        updateOnClose(clientGUI.getChart());
                    }
                });
            }
        });
    }
 
    @Override
    public void onCloseChart(IChart chart) {
        LOGGER.info("Chart closed from a startegy " + chart.getFeedDescriptor());
        //we need to take care of closing the frame ourselves in gui
        ChartFrame frame = chartFrameMap.get(chart);
        frame.dispose();
        updateOnClose(chart);
    }
 
    private void updateOnClose(IChart chart){
        chartFrameMap.remove(chart);
        if(chartFrameMap.isEmpty()){
            LOGGER.info("All charts closed, stopping the program");
            System.exit(0);
        }
    }
});

2013年9月14日土曜日

Open a chart from IClient

Open a chart from IClient
IClientからチャートを開く。

Note: Available with JForex-API 2.7.1
注意:JForex-API 2.7.1として有効。
Consider opening multiple charts - for each instrument in an array instrArr:
複数チャートを開く場合を検討 - instrArr配列の中でfor each命令ループを使用。
for(Instrument instrument : instrArr){
    IFeedDescriptor feedDescriptor = new TicksFeedDescriptor(instrument);
    feedDescriptor.setOfferSide(OfferSide.BID);// need to set due to platform requirements
    IChart chart = client.openChart(feedDescriptor);
    final IClientGUI clientGUI = client.getClientGUI(chart);
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            ChartFrame frame = new ChartFrame(clientGUI, client.getSubscribedInstruments());
            chartFrameMap.put(clientGUI.getChart(), frame);
            //Handle manual close - we need to call IClient.closeChart for strategy to know that the chart is no more there
            frame.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e) {
                    LOGGER.info("Chart manually closed, removing the chart from the strategy context");
                    client.closeChart(clientGUI.getChart());
                    chartFrameMap.remove(clientGUI.getChart());
                    if(chartFrameMap.isEmpty()){
                        LOGGER.info("All charts closed, stopping the program");
                        System.exit(0);
                    }
                }
            });
        }
    });
}

2013年9月13日金曜日

Work with charts

Work with charts
チャートとしての機能

There are two ways how one can open a chart:
チャートを開くことができる方法が2つある:
IClient.openChart is used to open a chart without running a strategy.
IClient.openChartはストラテジを実行せずチャートを開くのに使われる。
IClient.addClientGUIListener adds a listener for the program to handle IContext.openChart and IContext.closeChart events.
IClient.addClientGUIListenerはプログラムにリスナを追加し、IContext.openChartとIContext.closeChartイベントをハンドルする。

2013年9月8日日曜日

Stopping strategy

Stopping strategy
ストラテジの停止

One retrieves strategy process id from IClient.startStrategy, which afterwards can be used to stop the strategy by using the IClient.stopStrategy method.
IClient.startStrategyからストラテジのプロセスIDを取得した後、IClient.stopStrategyメソッドを使うことで、ストラテジの停止が可能である。
Consider a program which starts an anonymous strategy and checks every second if the user has typed in the console "stop", if so then the program stops the strategy.
プログラムでストラテジを停止するならば、匿名のストラテジを開始して、毎秒ユーザがコンソールに"stop"とタイプするかをチェックするプログラムを検討してほしい。

final long strategyId = client.startStrategy(new IStrategy(){
    public Instrument instrument = Instrument.EURUSD;
    private IConsole console;

    public void onStart(IContext context) throws JFException {      
        console = context.getConsole();  
    }
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
        if ( instrument == this.instrument){
            console.getOut().println(" bar: " + period  + " " + askBar);
        }
    }
    public void onTick(Instrument instrument, ITick tick) throws JFException {    }
    public void onMessage(IMessage message) throws JFException {    }
    public void onAccount(IAccount account) throws JFException {    }
    public void onStop() throws JFException {    }
});
//now it's running

//every second check if "stop" had been typed in the console - if so - then stop the strategy
Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {              
        Scanner s = new Scanner(System.in);                
        while(true){
            while(s.hasNext()){
                String str = s.next();
                if(str.equalsIgnoreCase("stop")){
                    System.out.println("Strategy stop by console command.");
                    client.stopStrategy(strategyId);
                    break;
                }
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    });
thread.start();
MainStopFromConsole.java

2013年9月7日土曜日

Running strategies

Running strategies
ストラテジの実行

One runs a strategy by passing it to IClient.startStrategy, for instance:
インスタンスとして、IClient.startStrategyへストラテジを一つ渡して実行する。
client.startStrategy(new MA_Play());

One might also run multiple strategies.
複数のストラテジを実行するかもしれない。
For instance, one might run two instances of the same strategy but with different parameters:
インスタンスとして、2つの同じだがパラメータの異なるストラテジを実行するかもしれない。
StrategySimple strategy1 = new StrategySimple();
StrategySimple strategy2 = new StrategySimple();
strategy1.amount = 0.01;
strategy1.stopLossPips = 20;
strategy1.takeProfitPips = 10;
strategy2.amount = 0.02;
strategy2.stopLossPips = 60;
strategy2.takeProfitPips = 60;
     
client.startStrategy(strategy1);
client.startStrategy(strategy2);

2013年9月6日金曜日

Subscribing to instruments

Subscribing to instruments
インスツルメンツへのサブスクライブ

In contrary to JForex client, in Standalone API one always has to explicitly subscribe to all instruments that his strategy is going to use.
JForexクライアントに反し、スタンドアロンAPIの一つは、常に明示的に、ストラテジの使用予定として、全インスツルメントをサブスクラブする必要がある。

This can be done by using the setSubscribedInstruments method.
これは、setSubscribedInstrumentsメソッドを用いて行うことができる。

Note that the subscription is asynchronous, thus if the in it is advised to subscribe in the following way:
サブスクリプションが非同期であることに注意すべき、それゆえ、その中にあるならば、それは以下のようにしてサブスクライブするよう助言される:

2013年9月4日水曜日

System listener

System listener
システムリスナ

ISystemListener interface allows the user to execute some business logic on system connects and disconnects as well as on start and stop of every strategy.
ISystemListenerインタフェイスは、全ストラテジの開始や終了と同様、システムの接続や切断を行う際に、幾つかのビジネスロジックの実行を可能にする。 

System listener gets added to IClient by using the setSystemListener method, for instance:
システムリスナは、setSystemListenerメソッドを使うことで、IClientインスタンスへ追加される。

2013年9月3日火曜日

IClient functionality

IClient functionality
IClientの機能性

IClient interface is used for working with live data and ITesterClient inherits its functionality for working with historical data.
IClientインタフェイスはライブデータを操作するために使用され、ITesterClientは履歴データを操作するために、その機能を継承している。
One gets an instance of IClient by using ClientFactory.getDefaultInstance().
ClientFactory.getDefaultInstance()を使うことでIClientのインスタンスを取得する。
One connects to dukascopy servers by using the connect method, for example:
例題のように、connectメソッドを使うことで、dukascopyサーバに接続する。
client.connect("https://www.dukascopy.com/client/demo/jclient/jforex.jnlp", "username", "password");

2013年9月2日月曜日

JForex SDK

JForex理解度向上の為、SDKドキュメントを翻訳。
JForex SDK
http://www.dukascopy.com/wiki/#JForex_SDK

JForex Software Development Kit (JForex SDK) allows the user to use JForex API without JForex client.
JForexソフトウェア開発キット (JForex SDK)は、JForexクライアントを使うことなく、JForex APIの使用を可能にする。
Most prominently it enables the user to run his strategies from a custom java application.
最も顕著に有効なのは、カスタムJavaアプリケーションから自身のストラテジの実行を可能にすることだ。
One uses the IClient interface for working with live data and ITesterClient for working with historical data.
まず、ライブデータを操作するにはIClientインターフェイス過去データを扱うにはITesterClientのどちらか一つを使用する
Also JForex SDK provides interfaces for working with charts outside JForex client, find examples in sections Work with charts and Backtesting in GUI mode.
またJForex SDKは、JForexクライアント外部でのチャート操作として機能するインタフェイスを提供しており、Work with chartsセクションやBacktesting in GUI modeセクションで例題を見つけて欲しい。
Go to Use in Eclipse or Use in NetBeans to download the SDK with examples and get started.
例題としてSDKをダウンロードするのに、Use in Eclipse、又はUse in NetBeansに向かい、すぐに始めて欲しい。

2013年5月31日金曜日

PrimeFacesでのテーマ追加

PrimeFacesでテーマをデフォルトから変更する方法を探したら、
その方法を説明したページがあったので記録しておく。
[参考]
Themes
http://www.primefaces.org/themes.html

で、具体的には…
1.まず、使いたいテーマのJARファイルをダウンロードする。
2.次に、web.xmlのコンテキストパラムにprimefaces.THEMEというパラメータを追加して、テーマ名を設定する。

Installation
インスタレーション
Applying a theme from Theme Gallery to your PrimeFaces project is very easy, you just need to download the theme jar, add it your classpath and configure PrimeFaces to use it.
テーマギャラリからのテーマをあなたのPrimeFacesプロジェクトに適用するのは、とても簡単で、テーマのJARをダウンロードし、それをクラスパスに追加して、PrimeFacesがそれを使うように設定すればよい。

1) You can either download the theme manually from repository or using maven.
1) あなたはテーマを手動か、mavenを使ったレポジトリからダウンロードすることができる。

Manual Download
手動のダウンロード

PrimeFaces themes are bundled as jar files available at PrimeFaces Repository.
PrimeFacesテーマはPrimeFacesレポジトリにJARファイルとしてバンドルされている。

2) Next and final step is setting primefaces.
2) 次に最後のステップはprimefacesの設定である。
THEME parameter with the theme name, note that you can also use an EL expression for dynamic themes.
テーマ名を伴ったTHEMEパラメータで、あなたはまたダイナミックテーマの為にEL式を使うことができるのに注目して欲しい。

<context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>bootstrap</param-value>
</context-param>

2013年4月23日火曜日

JBoss7にJSF1.2をデプロイする

JBoss7のGateInに、JSF1.2のポートレットをデプロイしてアクセスすると、
必ずUnsupportedOperationExceptionが発生して動かない。

で、調べてみた処web.xmlにコンテキストパラメータを設定しないといけないようだ。

[参考ページ]
Deploying Simple JSF 1.2 application in jboss 7
https://community.jboss.org/thread/170729
Design of AS7 multi-JSF feature
https://community.jboss.org/wiki/DesignOfAS7Multi-JSFFeature
JBoss AS7 tips
http://www.liferay.com/ja/community/wiki/-/wiki/Main/JBoss+AS7+tips
JSF 1.2 in AS 7
JBoss AS7 comes with JSF 2.0 implementation. Still, you can enable JSF 1.2 very simply, by adding the following snipped in web.xml:
<context-param>
      <param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
      <param-value>Mojarra-1.2</param-value>
</context-param>

Lastly, application do not need jsf implementation jars or jstl jars, as they are already available by JBoss AS7.

20130527 追記
ただし、使用可能なのはデフォルトのMojarra 1.2, Mojarra 2.0, MyFaces 2.0。
MyFaces 1.2以下はデフォルトではNGみたい。
Chapter 3. Deploying Your JSF Applications
http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.deployer.config.html
JBoss AS ships with three JSF Implementations, Mojarra 1.2, Mojarra 2.0, and MyFaces 2.0.

ちなみにMyFacesの場合は、こんな感じ。
Tomcatアプリケーションで動かす場合でも、この設定が必要。
(JBoss7固有の方便が、Tomcatでも強制されるってのは非常に迷惑だと思うのだが…)
<context-param>
      <param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
      <param-value>MyFaces-1.2</param-value>
</context-param>


20130527 追記
上記はOpenShiftのEWS(Tomcat7)上でTobagoを動作させるのに使用した設定。
JBoss7.1上ではNGかもしれない。
素朴にスンゴク迷惑千万なWEBコンテナに思えるのだが…。

[web.xml]

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>FileServlet</servlet-name>
<servlet-class>com.test.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/FileServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/view.jsp</welcome-file>
</welcome-file-list>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<context-param>
<param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
<param-value>Mojarra-1.2</param-value>
</context-param>
</web-app>

2013年4月21日日曜日

JSFポートレット・ファイルアップロード

JSFのファイルアップロード方法を解説したページがあったのでここに載せておく。
JSF Portlet File Upload
https://jsfportletbridge.java.net/public/JSFPortletFileUpload.html

まだ試してないが、
たぶんサブミットのアクションリスナで実装するのだと思う。

JSFにはファイルアップロード機能が無いので、SpringをWEBフレームワークとして優先させてたけど、ファイルアップロードがOKならばハナシはチョット変わってくる。
(ただJSF的には亜流感がかなりあるように思うが…)

そもそも何故JSFは2.0になってもファイルアップロード機能がサポートされないのだろう?
と疑問に思う。
誰も必要としていないのだろうか?
それなら、このような解説ページができるワケが無いよね。
何故なのだろう?

JSF Portlet File Upload
JSFポートレット・ファイルアップロード
This uses Portlet Filter approach to provide File Upload functionality in JSF Portlet.
これはJSFポートレットの中にファイルアップロード機能を提供する為にポートレットフィルタを使用したアプローチである。
This provides a generic solution that works in all JSF Portlet Bridges and will work on portals that support JSR 286.
ここで提供するのは通常のソリューションであり、全JSFポートレットブリッジで機能し、JSR286をサポートするポータルで機能する。
Following are the steps to add fileupload functionality in your jsf portlet ( See the example jsf fileupload portlet that uses this functionality.)
下記に追記するのは、あなたのJSFポートレットの中にファイルアップロード機能を追加するステップである(JSFファイルアップロード・ポートレットの例でこの機能の使用を見て欲しい)。

1. Add the following JARs to the WEB-INF/lib of the jsf portlet webapp.The version numbers doesn't matter as long as you get the newest.
1.下記JARファイルをJSFポートレットwebappのWEB-INF/libに追加する。最新版を入手する限り、バージョン番号は重要ではない。
commons-fileupload-1.2.1-jar  (supports file upload capability for a portlet)
commons-fileupload-1.2.1-jar  (ポートレットのファイルアップロード機能をサポート)
commons-io-1.4-jar (required by commons-fileupload)
commons-io-1.4-jar (commons-fileuploadに必要)
portlet-fileupload-filter.jar (handles the portlet filter and the fileupload functionality and makes the org.apache.commons.fileupload.FileItem available as a request attribute, Source Code)
portlet-fileupload-filter.jar (ポートレットフィルタとファイルアップロード機能をハンドルし、org.apache.commons.fileupload.FileItemをリクエスト属性として有効にさせる, ソースコード)


2. Add the following portlet filter entry in the portlet.xml
2.portlet.xmlに下記ポートレットフィルタ・エントリを追加する。
<portlet-app ..... version='2.0'>
    <portlet>
        <portlet-name>name_of_the_portlet</portlet-name>
                ........
    </portlet>
    <filter>
        <filter-name>PortletFileUploadFilter</filter-name>
        <filter-class>com.sun.portlet.PortletFileUploadFilter</filter-class>
        <lifecycle>ACTION_PHASE</lifecycle>
    </filter>
    <filter-mapping>
        <filter-name>PortletFileUploadFilter</filter-name>
        <portlet-name>name_of_the_portlet</portlet-name>
    </filter-mapping>
</portlet-app>


3. Define the fileupload component in the JSF page (you will use the name to get FileItem from the request)
3.JSFページにファイルアップロード・コンポーネントを定義する (リクエストからFileItemを入手するのにnameを使用する)
<input type="file" name="name_of_the_component" />


4. After you submit the JSF page, you can obtain the org.apache.commons.fileupload.FileItem for the input file component from the PortletRequest as follows. Once you have access to FileItem you can get the name, the I/O stream of the uploaded file.
4.JSFページでサブミットした後、下記でポートレットリクエストからインプットファイル・コンポーネントのFileItemが使用可能になる。一度FileItemのアクセスを取得すれば、アップロードされたファイルからnameやI/Oストリームが取得できる。
FacesContext facesContext = FacesContext.getCurrentInstance();
PortletRequest portletRequest = (PortletRequest) facesContext.getExternalContext().getRequest();
FileItem fileItem = (FileItem)portletRequest.getAttribute("name_of_the_component");



2013年3月4日月曜日

JSR286ポートレット2.0CSS

CSS Style Definitions

To achieve a common look and feel throughout the portal page, all portlets in the portal page should use a common CSS style sheet when generating content.
5 This appendix defines styles for a variety of logical units in the markup.
It follows the style being considered by the OASIS Web Services for Remote Portlets Technical
Committee.

PLT.C.1 Links (Anchor)
A custom CSS class is not defined for A the tag.
The entity should use the default 10 classes when embedding anchor tags.

PLT.C.2 Fonts
The font style definitions affect the font attributes only (font face, size, color, style, etc).
Style Description Example 
portlet-font Font attributes for the “normal” fragment font. Normal Text
portlet-font-dim Font attributes similar to the .portlet.font but the color is lighter. Dim Text
If an portlet developer wants a certain font type to be larger or smaller, they should 15 indicate this using a relative size. For example:
<div class="portlet-font" style="font-size:larger">Important information</div>
<div class="portlet-font-dim" style="font-size:80%">Small and 20 dim</div>

PLT.C.3 Messages
Message style definitions affect the rendering of a paragraph (alignment, borders, background color, etc) as well as text attributes.
Style Description Example
portlet-msg-status Status of the current operation. Progress: 80%
portlet-msg-info Help messages, general additional information, etc. Info about
portlet-msg-error Error messages. Portlet not available
portlet-msg-alert Warning messages. Timeout occurred, try again later
portlet-msg-success Verification of the successful completion of a task. Operation completed successfully

PLT.C.4 Sections
5 Section style definitions affect the rendering of markup sections such as table, div and span (alignment, borders, background color, etc) as well as their text attributes.
Style Description
portlet-section-header Table or section header
portlet-section-body Normal text in a table cell
portlet-section-alternate Text in every other row in the cell
portlet-section-selected Text in a selected cell range
portlet-section-subheader Text of a subheading
portlet-section-footer Table or section footnote
portlet-section-text Text that belongs to the table but does not fall in one of the other categories (e.g. explanatory or help text that is associated with the section).

PLT.C.5 Tables
Table style definitions affect the rendering (i.e. alignment, borders, background color, etc.) as well as their text attributes.
Style Description
portlet-table-header Table header
portlet-table-body Normal text in a table cell
portlet-table-alternate Text in every other row in the table
portlet-table-selected Text in a selected cell range
portlet-table-subheader Text of a subheading
portlet-table-footer Table footer
portlet-table-text Text that belongs to the table but does not fall in one of the other categories (e.g. explanatory or help text that is associated with the table).

5 PLT.C.6 Forms
Form styles define the look-and-feel of the elements in an HTML form.
Style Description
portlet-form-label Text used for the descriptive label of the whole form
(not the labels for fields.
portlet-form-input-field Text of the user-input in an input field.
portlet-form-button Text on a button
portlet-icon-label Text that appears beside a context dependent action icon.
portlet-dlg-icon-label Text that appears beside a “standard” icon (e.g. Ok, or Cancel)
portlet-form-field-label Text for a separator of fields (e.g. checkboxes, etc.)
portlet-form-field Text for a field (not input field, e.g. checkboxes, etc)
portlet-form-field-label Text that appears beside a form field (e.g. input fields, checkboxes, etc.)
portlet-form-field Text for a field which is not input field (e.g. checkboxes, etc)

PLT.C.7 Menus
Menu styles define the look-and-feel of the text and background of a menu structure.
This structure may be embedded in the aggregated page or may appear as a context sensitive
5 popup menu.
Style Description
portlet-menu General menu settings such as background color, margins, etc
portlet-menu-item Normal, unselected menu item.
portlet-menu-item-selected Selected menu item.
portlet-menu-item-hover Normal, unselected menu item when the mouse hovers over it.
portlet-menu-item-hover-selected Selected menu item when the mouse hovers over it.
portlet-menu-cascade-item Normal, unselected menu item that has submenus.
portlet-menu-cascade-item-selected Selected sub-menu item that has sub-menus.
portlet-menu-cascade General sub-menu settings such as background color, margins, etc
portlet-menu-cascade-item A normal, unselected sub-menu item
portlet-menu-cascade-item-selected Selected sub-menu item
portlet-menu-cascade-item-hover Normal, unselected sub-menu item when the mouse hovers over it
portlet-menu-cascade-item-hoverselected Selected sub-menu item when the mouse hovers over it
portlet-menu-separator Separator between menu items
portlet-menu-cascade-separator Separator between sub-menu items
portlet-menu-content Content for a normal, unselected menu or sub-menu item
portlet-menu-content-selected Content for an selected menu or sub-menu item
portlet-menu-content-hover Content for an unselected menu or sub-menu item when the mouse hovers over it
portlet-menu-content-hover-selected Content for a selected menu or sub-menu item when the mouse hovers over it
portlet-menu-indicator Indicator that a menu item has an associated sub-menu
portlet-menu-indicator-selected Indicator when the associated menu item is selected
portlet-menu-indicator-hover Indicator when the associated menu item has the mouse hover over it
portlet-menu-indicator-hover-selected Indicator when the associated menu item is selected and has the mouse hover over it
portlet-menu-description Descriptive text for the menu (e.g. in a help context below the menu)
portlet-menu-caption Menu caption

2013年2月10日日曜日

「Deploying GateIn to OpenShift」の間違い点


OpenShiftのJBossにGateInをデプロイして実行させた結果、起動できず。
で、調べてみた処、standalone.xmlの設定が間違っていたので、修正して、なんとか起動できた。
その報告を書いておく。
[参考ページ]
Deploying GateIn to OpenShift
https://community.jboss.org/wiki/DeployingGateInToOpenShift

間違っていた箇所は3箇所。
間違っていた箇所は4箇所。(20130520)
1つ目は、環境変数の指定。
2つ目は、TCPPINGのinitial_hostsプロパティの指定。
3つ目は、AUTHのauth_valueプロパティの指定。
4つ目は、.openshift/config/modules/org/jboss/as/webの作成とモジュールのコピー。(20130520)

1.環境変数の指定
参考ページによると、「standalone.xmlをダウンロードして、修正しろ」ってことだった。
で、そのstandalone.xmlは現状、こんな内容。
<system-properties>
 <property name="exo.conf.dir" value="/var/lib/stickshift/${USER_ID}/${APP_NAME}/jbossas-7/standalone/configuration/gatein" />
 <property name="gatein.conf.dir" value="/var/lib/stickshift/${USER_ID}/${APP_NAME}/jbossas-7/standalone/configuration/gatein" />
 <property name="exo.conf.dir.name" value="gatein" />
</system-properties>
この${USER_ID}を自分にユーザ名に変更しろってのはOK。
だが${APP_NAME}を"portal"に変更しろってのは間違い。
本当は"jbossas-7"に変更しなければいけない。
あと、パスの一部にある"stickshift"も間違いで、本当は"openshift"に変更しなければいけない。
よって、正しい内容は下記になる。
<system-properties>
 <property name="exo.conf.dir" value="/var/lib/openshift/ユーザー名/jbossas-7/jbossas-7/standalone/configuration/gatein" />
 <property name="gatein.conf.dir" value="/var/lib/openshift/ユーザー名/jbossas-7/jbossas-7/standalone/configuration/gatein" />
 <property name="exo.conf.dir.name" value="gatein" />
</system-properties>
(20130520)環境変数を使用した設定に変更。
<system-properties>
 <property name="exo.conf.dir" value="${env.JBOSS_HOME}/standalone/configuration/gatein" />
 <property name="gatein.conf.dir" value="${env.JBOSS_HOME}/standalone/configuration/gatein" />
 <property name="exo.conf.dir.name" value="gatein" />
</system-properties>


2.TCPPINGのinitial_hostsプロパティの指定。
ダウンロードしたstandalone.xmlは現状、こんな内容。
<protocol type="TCPPING">
<property name="timeout">3000</property>
<property name="initial_hosts">${env.OPENSHIFT_JBOSS_CLUSTER}</property>
<property name="port_range">0</property>
<property name="num_initial_members">1</property>
</protocol>
この${env.OPENSHIFT_JBOSS_CLUSTER}は間違いで、正しくは${env.OPENSHIFT_JBOSSAS_CLUSTER}。
よって、正しい内容は下記になる。
<protocol type="TCPPING">
 <property name="timeout">3000</property>
 <property name="initial_hosts">${env.OPENSHIFT_JBOSSAS_CLUSTER}</property>
 <property name="port_range">0</property>
 <property name="num_initial_members">1</property>
</protocol>

3.AUTHのauth_valueプロパティの指定
これも上記同様${env.OPENSHIFT_JBOSS_CLUSTER}は間違いで、正しくは${env.OPENSHIFT_JBOSSAS_CLUSTER}。
よって、正しい内容は下記になる。
<protocol type="AUTH">
 <property name="auth_class">org.jgroups.auth.MD5Token</property>
 <property name="token_hash">SHA</property>
 <property name="auth_value">${env.OPENSHIFT_JBOSSAS_CLUSTER}</property>
</protocol>

4..openshift/config/modules/org/jboss/as/webの作成とモジュールのコピー。
説明ページでは、
We also have to override org.jboss.as.web module, by adding a dependency into its modules.xml file. We just copy the whole patched-up module:
mkdir -p .openshift/config/modules/org/jboss/as/web
cp -r ../GateIn-3.2.0.Final-jbossas7-preview/modules/org/jboss/as/web .openshift/config/modules/org/jboss/as
とあるが、これは現在のOpenShiftバージョンでは不要

というか禁止
これやると起動できない。

その他にも、${env.OPENSHIFT_DB_HOST}:${env.OPENSHIFT_DB_PORT}など、修正が必要になる箇所が多数あるようす。
何せ、古いstandalone.xmlを使ってるもんだからね。

(20130520)今回使用したstandalone.xml
OpenShiftのデフォルトxmlに、GateInの設定を追加(したつもり)。
[standalone.xml]
<?xml version='1.0' encoding='UTF-8'?>

<server xmlns="urn:jboss:domain:1.1">

<extensions>
<extension module="org.jboss.as.clustering.infinispan" />
<extension module="org.jboss.as.clustering.jgroups" />
<extension module="org.jboss.as.cmp" />
<extension module="org.jboss.as.configadmin" />
<extension module="org.jboss.as.connector" />
<extension module="org.jboss.as.deployment-scanner" />
<extension module="org.jboss.as.ee" />
<extension module="org.jboss.as.ejb3" />
<extension module="org.jboss.as.jacorb" />
<extension module="org.jboss.as.jaxr" />
<extension module="org.jboss.as.jaxrs" />
<extension module="org.jboss.as.jdr" />
<extension module="org.jboss.as.jmx" />
<extension module="org.jboss.as.jpa" />
<extension module="org.jboss.as.jsr77" />
<extension module="org.jboss.as.logging" />
<extension module="org.jboss.as.mail" />
<extension module="org.jboss.as.messaging" />
<extension module="org.jboss.as.naming" />
<extension module="org.jboss.as.osgi" />
<extension module="org.jboss.as.pojo" />
<extension module="org.jboss.as.remoting" />
<extension module="org.jboss.as.sar" />
<extension module="org.jboss.as.security" />
<extension module="org.jboss.as.threads" />
<extension module="org.jboss.as.transactions" />
<extension module="org.jboss.as.web" />
<extension module="org.jboss.as.webservices" />
<extension module="org.jboss.as.weld" />
<extension module="org.gatein" />
</extensions>

<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION"
value="on" />
<property name="exo.conf.dir"
value="${env.JBOSS_HOME}/standalone/configuration/gatein" />
<property name="gatein.conf.dir"
value="${env.JBOSS_HOME}/standalone/configuration/gatein" />
<property name="exo.conf.dir.name" value="gatein" />
</system-properties>

<management>
<management-interfaces>
<native-interface>
<socket-binding native="management-native" />
</native-interface>
<http-interface>
<socket-binding http="management-http" />
</http-interface>
</management-interfaces>
</management>

<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1">
<!--console-handler name="CONSOLE"> <level name="INFO"/> <formatter> <pattern-formatter
pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/> </formatter> </console-handler -->
<periodic-rotating-file-handler name="FILE">
<formatter>
<pattern-formatter
pattern="%d{yyyy/MM/dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n" />
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log" />
<suffix value=".yyyy-MM-dd" />
<append value="true" />
</periodic-rotating-file-handler>
<logger category="com.arjuna">
<level name="WARN" />
</logger>
<logger category="org.apache.tomcat.util.modeler">
<level name="WARN" />
</logger>
<logger category="sun.rmi">
<level name="WARN" />
</logger>
<logger category="jacorb">
<level name="WARN" />
</logger>
<logger category="jacorb.config">
<level name="ERROR" />
</logger>
<root-logger>
<level name="INFO" />
<handlers>
<!--handler name="CONSOLE"/ -->
<handler name="FILE" />
</handlers>
</root-logger>
</subsystem>
<subsystem xmlns="urn:jboss:domain:cmp:1.0" />
<subsystem xmlns="urn:jboss:domain:configadmin:1.0" />
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jndi-name="java:jboss/datasources/ExampleDS"
enabled="true" use-java-context="true" pool-name="H2DS">
<connection-url>jdbc:h2:${jboss.server.data.dir}/test;DB_CLOSE_DELAY=-1
</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jndi-name="java:jboss/datasources/MysqlDS"
enabled="${mysql.enabled}" use-java-context="true" pool-name="MysqlDS"
use-ccm="true">
<connection-url>jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}
</connection-url>
<driver>mysql</driver>
<security>
<user-name>${env.OPENSHIFT_MYSQL_DB_USERNAME}</user-name>
<password>${env.OPENSHIFT_MYSQL_DB_PASSWORD}</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<background-validation>true</background-validation>
</validation>
<pool>
<flush-strategy>IdleConnections</flush-strategy>
</pool>
</datasource>
<datasource jndi-name="java:jboss/datasources/PostgreSQLDS"
enabled="${postgresql.enabled}" use-java-context="true" pool-name="PostgreSQLDS"
use-ccm="true">
<connection-url>jdbc:postgresql://${env.OPENSHIFT_POSTGRESQL_DB_HOST}:${env.OPENSHIFT_POSTGRESQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}
</connection-url>
<driver>postgresql</driver>
<security>
<user-name>${env.OPENSHIFT_POSTGRESQL_DB_USERNAME}</user-name>
<password>${env.OPENSHIFT_POSTGRESQL_DB_PASSWORD}</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<background-validation>true</background-validation>
</validation>
<pool>
<flush-strategy>IdleConnections</flush-strategy>
</pool>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource
</xa-datasource-class>
</driver>
<driver name="mysql" module="com.mysql.jdbc">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
</xa-datasource-class>
</driver>
<driver name="postgresql" module="org.postgresql.jdbc">
<xa-datasource-class>org.postgresql.xa.PGXADataSource
</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
<deployment-scanner path="deployments"
relative-to="jboss.server.base.dir" scan-interval="5000"
deployment-timeout="300" />
</subsystem>
<subsystem xmlns="urn:jboss:domain:ee:1.0" />
<subsystem xmlns="urn:jboss:domain:ejb3:1.2">
<session-bean>
<stateless>
<bean-instance-pool-ref pool-name="slsb-strict-max-pool" />
</stateless>
<stateful default-access-timeout="5000" cache-ref="simple"
clustered-cache-ref="clustered" />
<singleton default-access-timeout="5000" />
</session-bean>
<mdb>
<resource-adapter-ref resource-adapter-name="hornetq-ra" />
<bean-instance-pool-ref pool-name="mdb-strict-max-pool" />
</mdb>
<pools>
<bean-instance-pools>
<strict-max-pool name="slsb-strict-max-pool"
max-pool-size="20" instance-acquisition-timeout="5"
instance-acquisition-timeout-unit="MINUTES" />
<strict-max-pool name="mdb-strict-max-pool"
max-pool-size="20" instance-acquisition-timeout="5"
instance-acquisition-timeout-unit="MINUTES" />
</bean-instance-pools>
</pools>
<caches>
<cache name="simple" aliases="NoPassivationCache" />
<cache name="passivating" passivation-store-ref="file"
aliases="SimpleStatefulCache" />
<cache name="clustered" passivation-store-ref="infinispan"
aliases="StatefulTreeCache" />
</caches>
<passivation-stores>
<file-passivation-store name="file" />
<cluster-passivation-store name="infinispan"
cache-container="ejb" />
</passivation-stores>
<async thread-pool-name="default" />
<timer-service thread-pool-name="default">
<data-store path="timer-service-data" relative-to="jboss.server.data.dir" />
</timer-service>
<remote connector-ref="remoting-connector" thread-pool-name="default" />
<thread-pools>
<thread-pool name="default">
<max-threads count="10" />
<keepalive-time time="100" unit="milliseconds" />
</thread-pool>
</thread-pools>
<!--iiop enable-by-default="false" use-qualified-name="false"/ -->
</subsystem>
<subsystem xmlns="urn:jboss:domain:infinispan:1.1"
default-cache-container="cluster">
<cache-container name="cluster" aliases="ha-partition"
default-cache="default">
<transport lock-timeout="60000" />
<replicated-cache name="default" mode="SYNC"
batching="true">
<locking isolation="REPEATABLE_READ" />
</replicated-cache>
</cache-container>
<cache-container name="web" aliases="standard-session-cache"
default-cache="repl">
<transport lock-timeout="60000" />
<replicated-cache name="repl" mode="ASYNC"
batching="true">
<file-store />
</replicated-cache>
<replicated-cache name="sso" mode="SYNC" batching="true" />
<distributed-cache name="dist" mode="ASYNC"
batching="true">
<file-store />
</distributed-cache>
</cache-container>
<cache-container name="ejb" aliases="sfsb sfsb-cache"
default-cache="repl">
<transport lock-timeout="60000" />
<replicated-cache name="repl" mode="ASYNC"
batching="true">
<eviction strategy="LRU" />
<file-store />
</replicated-cache>
<!-- Clustered cache used internally by EJB subsytem for managing the
client-mapping(s) of the socketbinding referenced by the EJB remoting connector -->
<replicated-cache name="remote-connector-client-mappings"
mode="SYNC" batching="true" />
<distributed-cache name="dist" mode="ASYNC"
batching="true">
<eviction strategy="LRU" />
<file-store />
</distributed-cache>
</cache-container>
<cache-container name="hibernate" default-cache="local-query">
<transport lock-timeout="60000" />
<local-cache name="local-query">
<transaction mode="NONE" />
<eviction strategy="LRU" max-entries="10000" />
<expiration max-idle="100000" />
</local-cache>
<invalidation-cache name="entity" mode="SYNC">
<transaction mode="NON_XA" />
<eviction strategy="LRU" max-entries="10000" />
<expiration max-idle="100000" />
</invalidation-cache>
<replicated-cache name="timestamps" mode="ASYNC">
<transaction mode="NONE" />
<eviction strategy="NONE" />
</replicated-cache>
</cache-container>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jacorb:1.1">
<orb>
<initializers transactions="spec" security="on" />
</orb>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jaxr:1.0">
<connection-factory jndi-name="java:jboss/jaxr/ConnectionFactory" />
<juddi-server publish-url="http://${env.OPENSHIFT_JBOSSAS_IP}:8080/juddi/publish"
query-url="http://${env.OPENSHIFT_JBOSSAS_IP}:8080/juddi/query" />
</subsystem>
<subsystem xmlns="urn:jboss:domain:jaxrs:1.0" />
<subsystem xmlns="urn:jboss:domain:jca:1.1">
<archive-validation enabled="true" fail-on-error="true"
fail-on-warn="false" />
<bean-validation enabled="false" />
<default-workmanager>
<short-running-threads>
<core-threads count="10" />
<queue-length count="10" />
<max-threads count="10" />
<keepalive-time time="10" unit="seconds" />
</short-running-threads>
<long-running-threads>
<core-threads count="10" />
<queue-length count="10" />
<max-threads count="10" />
<keepalive-time time="10" unit="seconds" />
</long-running-threads>
</default-workmanager>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jdr:1.0" />
<subsystem xmlns="urn:jboss:domain:jgroups:1.0"
default-stack="tcp">
<stack name="tcp">
<transport type="TCP" socket-binding="jgroups-tcp">
<property name="external_addr">${env.OPENSHIFT_GEAR_DNS}</property>
<property name="external_port">${env.OPENSHIFT_JBOSSAS_CLUSTER_PROXY_PORT}
</property>
<property name="bind_port">7600</property>
<property name="bind_addr">${env.OPENSHIFT_JBOSSAS_IP}</property>
<property name="defer_client_bind_addr">true</property>
</transport>
<protocol type="TCPPING">
<property name="timeout">30000</property>
<property name="initial_hosts">${env.OPENSHIFT_JBOSSAS_CLUSTER}</property>
<property name="port_range">0</property>
<property name="num_initial_members">1</property>
</protocol>
<protocol type="MERGE2" />
<protocol type="FD" />
<protocol type="VERIFY_SUSPECT" />
<protocol type="BARRIER" />
<protocol type="pbcast.NAKACK" />
<protocol type="UNICAST2" />
<protocol type="pbcast.STABLE" />
<protocol type="AUTH">
<property name="auth_class">org.jgroups.auth.MD5Token</property>
<property name="token_hash">SHA</property>
<property name="auth_value">${env.OPENSHIFT_APP_UUID}</property>
</protocol>
<protocol type="pbcast.GMS" />
<protocol type="UFC" />
<protocol type="MFC" />
<protocol type="FRAG2" />
<!--protocol type="pbcast.STATE_TRANSFER"/> <protocol type="pbcast.FLUSH"/ -->
</stack>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jmx:1.1">
<show-model value="true" />
<remoting-connector />
</subsystem>
<subsystem xmlns="urn:jboss:domain:jpa:1.0">
<jpa default-datasource="" />
</subsystem>
<subsystem xmlns="urn:jboss:domain:jsr77:1.0" />
<subsystem xmlns="urn:jboss:domain:mail:1.0">
<mail-session jndi-name="java:jboss/mail/Default">
<smtp-server outbound-socket-binding-ref="mail-smtp" />
</mail-session>
</subsystem>
<subsystem xmlns="urn:jboss:domain:messaging:1.1">
<hornetq-server>
<clustered>true</clustered>
<persistence-enabled>true</persistence-enabled>
<!--security-domain>messaging</security-domain -->
<security-enabled>false</security-enabled>
<journal-file-size>102400</journal-file-size>
<journal-min-files>2</journal-min-files>

<thread-pool-max-size>${messaging.thread.pool.max.size}
</thread-pool-max-size>
<scheduled-thread-pool-max-size>${messaging.scheduled.thread.pool.max.size}
</scheduled-thread-pool-max-size>

<connectors>
<netty-connector name="netty" socket-binding="messaging" />
<netty-connector name="netty-throughput"
socket-binding="messaging-throughput">
<param key="batch-delay" value="50" />
</netty-connector>
<in-vm-connector name="in-vm" server-id="0" />
</connectors>

<acceptors>
<netty-acceptor name="netty" socket-binding="messaging" />
<netty-acceptor name="netty-throughput"
socket-binding="messaging-throughput">
<param key="batch-delay" value="50" />
<param key="direct-deliver" value="false" />
</netty-acceptor>
<in-vm-acceptor name="in-vm" server-id="0" />
</acceptors>

<!--broadcast-groups> <broadcast-group name="bg-group1"> <group-address>231.7.7.7</group-address>
<group-port>9876</group-port> <broadcast-period>5000</broadcast-period> <connector-ref>
netty </connector-ref> </broadcast-group> </broadcast-groups> <discovery-groups>
<discovery-group name="dg-group1"> <group-address>231.7.7.7</group-address>
<group-port>9876</group-port> <refresh-timeout>10000</refresh-timeout> </discovery-group>
</discovery-groups> <cluster-connections> <cluster-connection name="my-cluster">
<address>jms</address> <connector-ref>netty</connector-ref> <discovery-group-ref
discovery-group-name="dg-group1"/> </cluster-connection> </cluster-connections -->

<!--security-settings> <security-setting match="#"> <permission type="send"
roles="guest"/> <permission type="consume" roles="guest"/> <permission type="createNonDurableQueue"
roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/>
</security-setting> </security-settings -->

<address-settings>
<address-setting match="#">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<max-size-bytes>10485760</max-size-bytes>
<address-full-policy>BLOCK</address-full-policy>
<message-counter-history-day-limit>10
</message-counter-history-day-limit>
<redistribution-delay>1000</redistribution-delay>
</address-setting>
</address-settings>

<jms-connection-factories>
<connection-factory name="InVmConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm" />
</connectors>
<entries>
<entry name="java:/ConnectionFactory" />
</entries>
</connection-factory>
<connection-factory name="RemoteConnectionFactory">
<connectors>
<connector-ref connector-name="netty" />
</connectors>
<entries>
<entry name="RemoteConnectionFactory" />
<entry name="java:jboss/exported/jms/RemoteConnectionFactory" />
</entries>
</connection-factory>
<pooled-connection-factory name="hornetq-ra">
<transaction mode="xa" />
<connectors>
<connector-ref connector-name="in-vm" />
</connectors>
<entries>
<entry name="java:/JmsXA" />
</entries>
</pooled-connection-factory>
</jms-connection-factories>

<jms-destinations>
<jms-queue name="testQueue">
<entry name="queue/test" />
<entry name="java:jboss/exported/jms/queue/test" />
</jms-queue>
<jms-topic name="testTopic">
<entry name="topic/test" />
<entry name="java:jboss/exported/jms/topic/test" />
</jms-topic>
</jms-destinations>
</hornetq-server>
</subsystem>
<subsystem xmlns="urn:jboss:domain:naming:1.1" />
<subsystem xmlns="urn:jboss:domain:osgi:1.2" activation="lazy">
<properties>
<!-- Specifies the beginning start level of the framework -->
<property name="org.osgi.framework.startlevel.beginning">1</property>
</properties>
<capabilities>
<!-- modules registered with the OSGi layer on startup -->
<capability name="javax.servlet.api:v25" />
<capability name="javax.transaction.api" />
<!-- bundles started in startlevel 1 -->
<capability name="org.apache.felix.log" startlevel="1" />
<capability name="org.jboss.osgi.logging" startlevel="1" />
<capability name="org.apache.felix.configadmin"
startlevel="1" />
<capability name="org.jboss.as.osgi.configadmin"
startlevel="1" />
</capabilities>
</subsystem>
<subsystem xmlns="urn:jboss:domain:pojo:1.0" />
<subsystem xmlns="urn:jboss:domain:remoting:1.1">
<connector name="remoting-connector" socket-binding="remoting" />
</subsystem>
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0" />
<subsystem xmlns="urn:jboss:domain:sar:1.0" />
<subsystem xmlns="urn:jboss:domain:security:1.1">
<security-domains>
<security-domain name="other" cache-type="default">
<authentication>
<login-module code="UsersRoles" flag="required" />
</authentication>
</security-domain>
<security-domain name="jboss-web-policy" cache-type="default">
<authorization>
<policy-module code="Delegating" flag="required" />
</authorization>
</security-domain>
<security-domain name="jboss-ejb-policy" cache-type="default">
<authorization>
<policy-module code="Delegating" flag="required" />
</authorization>
</security-domain>
<security-domain name="messaging" cache-type="default">
<authentication>
<login-module code="UsersRoles" flag="required">
<module-option name="usersProperties"
value="${jboss.server.config.dir}/application-users.properties" />
<module-option name="rolesProperties"
value="${jboss.server.config.dir}/application-roles.properties" />
</login-module>
</authentication>
</security-domain>
<security-domain name="gatein-domain" cache-type="default">
<authentication>
<login-module code="org.gatein.wci.security.WCILoginModule"
flag="optional">
<module-option name="portalContainerName" value="portal" />
<module-option name="realmName" value="gatein-domain" />
</login-module>
<login-module
code="org.exoplatform.services.security.jaas.SharedStateLoginModule"
flag="required">
<module-option name="portalContainerName" value="portal" />
<module-option name="realmName" value="gatein-domain" />
</login-module>
<login-module
code="org.exoplatform.services.security.j2ee.JbossLoginModule"
flag="required">
<module-option name="portalContainerName" value="portal" />
<module-option name="realmName" value="gatein-domain" />
</login-module>
</authentication>
</security-domain>
</security-domains>
</subsystem>
<subsystem xmlns="urn:jboss:domain:threads:1.1" />
<subsystem xmlns="urn:jboss:domain:transactions:1.1">
<core-environment>
<process-id>
<uuid />
</process-id>
</core-environment>
<recovery-environment socket-binding="txn-recovery-environment"
status-socket-binding="txn-status-manager" />
<coordinator-environment default-timeout="300" />
</subsystem>
<subsystem xmlns="urn:jboss:domain:web:1.1"
default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http"
socket-binding="http" />
<virtual-server name="default-host"
enable-welcome-root="false">
<alias name="localhost" />
</virtual-server>
</subsystem>
<subsystem xmlns="urn:jboss:domain:webservices:1.1">
<modify-wsdl-address>true</modify-wsdl-address>
<wsdl-host>${env.OPENSHIFT_GEAR_DNS}</wsdl-host>
<wsdl-port>80</wsdl-port>
<endpoint-config name="Standard-Endpoint-Config" />
<endpoint-config name="Recording-Endpoint-Config">
<pre-handler-chain name="recording-handlers"
protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
<handler name="RecordingHandler"
class="org.jboss.ws.common.invocation.RecordingServerHandler" />
</pre-handler-chain>
</endpoint-config>
</subsystem>
<subsystem xmlns="urn:jboss:domain:weld:1.0" />
<subsystem xmlns="urn:jboss:domain:gatein:1.0">
<deployment-archives>
<archive name="gatein.ear" main="true" />
</deployment-archives>
</subsystem>
</profile>

<interfaces>
<interface name="management">
<loopback-address value="${env.OPENSHIFT_JBOSSAS_IP}" />
</interface>
<interface name="public">
<loopback-address value="${env.OPENSHIFT_JBOSSAS_IP}" />
</interface>
<interface name="unsecure">
<!-- Used for IIOP sockets in the standarad configuration. To secure JacORB
you need to setup SSL -->
<loopback-address value="${env.OPENSHIFT_JBOSSAS_IP}" />
</interface>
</interfaces>

<socket-binding-group name="standard-sockets"
default-interface="public" port-offset="0">
<socket-binding name="http" port="8080" />
<socket-binding name="jacorb" interface="unsecure"
port="3528" />
<socket-binding name="jacorb-ssl" interface="unsecure"
port="3529" />
<socket-binding name="jgroups-tcp" port="7600" />
<socket-binding name="management-native" interface="management"
port="9999" />
<socket-binding name="management-http" interface="management"
port="9990" />
<socket-binding name="messaging" port="5445" />
<socket-binding name="messaging-throughput" port="5455" />
<socket-binding name="osgi-http" interface="management"
port="8090" />
<socket-binding name="remoting" port="4447" />
<socket-binding name="txn-recovery-environment" port="4712" />
<socket-binding name="txn-status-manager" port="4713" />
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25" />
</outbound-socket-binding>
</socket-binding-group>
</server>