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>




2013年2月4日月曜日

Tomahawkの<t:jscookMenu>をJSF-RIで動作させる

JSF-RIでTomahawkのjscookmenuを使用した結果、何も反応無く動作しなかったので調べた結果…
どうやら数年前から抱えているバグだった。

で、その回避策が書かれていたので記録しておく。

参考ページ
action not working in t:navigationMenuItem
http://mail-archives.apache.org/mod_mbox/myfaces-users/200704.mbox/%3C9833177.post@talk.nabble.com%3E

Finally I got it working. I had to add this line in my JSP page.

<input type="hidden" name="jscook_action" />

But I have no idea why the above line is required !!

どうやらTomahawkが吐き出すスクリプトがバグってるようで、未だにそれが直ってない様子。
よって、フォームの中に<input type="hidden" name="jscook_action" />を入れて動いた。
その結果がこんな感じ。

<h:form>
<input type="hidden" name="jscook_action" />
<t:jscookMenu layout="hbr" theme="ThemeOffice">
<t:navigationMenuItem itemLabel="メニュー1" action="menu1" />
<t:navigationMenuItem itemLabel="メニュー2" action="menu2" />
</t:jscookMenu>
</h:form>

2013年2月3日日曜日

Tobagoのレイアウト設定

Tobagoのグリッドレイアウトを説明したドキュメント。
http://myfaces.apache.org/tobago/guide.html#Layout

Layout
レイアウト
Tobago organizes the placement of components with the help of layout managers.
Tobagoは、レイアウトマネージャの助けを借りて、コンポーネントの配置を整理します。
The main layout manager is called grid layout.
メインレイアウトマネージャは、グリッドレイアウトと呼ばれます。
It divides the available rectangular space into grid cells.
これは、グリッドのセルに使用可能な矩形領域を分割する。
The grid is spawned by the column and row values of the tag. 
グリッドは、タグの列と行の値によって生成されます。
The syntax of these values is based on the multi-length notation known from HTML.
これらの値の構文は、HTMLから知られているマルチレングス表記に基づいています。
To add a layout manager to a container like box, panel or page you have to add a layout facet (i.e. a facet with the name 'layout') to the respective container tag.
box, panelやpageのようなコンテナにレイアウトを追加するには、それぞれのコンテナにレイアウトファセットを追加する必要があります。
A code fragment from the address book example:
アドレスブックの例のコード·フラグメント:
<tc:panel>
  <f:facet name="layout">
    <tc:gridlayout columns="*" rows="fixed;fixed;*" />
  </f:facet>
  <tx:in label="First Name" />
  <tx:in label="Last Name" />
  <tc:cell />
</tc:panel>

In this example we place to two input controls with labels into two consecutive rows.
この例では、2つの連続した行にラベルを使用して2つの入力コントロールを配置します。
Below the two input fields we add a spacer element.
2つの入力フィールドの下にスペーサ要素を追加します。
The layout token 'fixed' advises the layout manager to give the input control the height, which this kind of control normally possesses in the selected theme.
レイアウト・トークン'fixed'は、レイアウトマネージャにインプット・コントロールの高さを与えるアドバイスを行い、この種のコントロールは通常選択されたテーマ中で処理されます。
The values of the column and row attributes of the tag can contain a semicolon separated list of layout tokens. 
タグのcolumnとrow属性の値は、セミコロン区切りでレイアウト・トークンのリストを含めることができます。
A layout token can be an exact length in pixels like 200px, a percentage length like 25%, a relative length like 2*, or a specific length called fixed, which's exact length is determined by the theme and make sure the control is usable -- a single-line input control for example needs to be so high that characters from the assigned font can be read inside the control.
レイアウト・トークンは「200px」のような ピクセルの正確な長さ、「25%」のようなパーセンテージ 、 「2*」のような相対的な 長さ、あるいは、「fixed」と呼ばれる特定の長さが可能です--たとえば、1行の入力コントロールは、割り当てられたフォント からのキャラクターがコントロール中に読まれることができるように高い必要があります。
Relative lengths are determined last by the layout manager.
相対的な長さは、レイアウトマネージャによって最後に決定されます。
The available remaining space is distributed among the existing relative lengths.
利用できる残りのスペースは、既存の相対的な長さに分配されます。
Each length receives space proportional to the integer before the '*'.
各々の長さは、「*」前の整数に比例したスペースを受けます。
A single '*' is a shorthand for '1*'.
一つの「*」は、「1*」の短縮形です。
The layout manager handles the rendered attribute of controls, too.
レイアウトマネージャは、コントロールのrendered属性も取り扱います。
If the rendered attribute is dynamically defined by a value binding, the page can contain fewer controls in some cases than in others.
rendered属性は動的にバリュー・バインディングによって定義されている場合、ページが他に比べていくつかのケースでは少ないコントロールを含めることができます。
The layout manager can then distribute the newly available space between the remaining relative and percentage lengths.
レイアウトマネージャは、その後、残りの相対的な割合と長との間に新たに利用可能なスペースを分配することができます。

2012年12月28日金曜日

OpenShiftのTomcat添付README(作成中)

OpenShiftのTomcatに付いていたREADME。
徐々に翻訳予定。


Repo layout
レポレイアウト
===========
webapps/ - location for built wars (Details below)
webapps/ - 構築されたWARファイルの配置場所(以下詳細)
src/ - Maven src structure
src/ - Mavenのソース構造
pom.xml - Maven build file
pom.xml - Mavenのビルドファイル
.openshift/ - location for openshift specific files
.openshift/ - openshiftの詳細ファイル配置場所
.openshift/config/ - location for configuration files such as standalone.xml (used to modify jboss config such as datasources)
.openshift/config/ - standalone.xmlなど設定ファイル配置場所 (データソースなどJBoss設定に使用)
ん?standalone.xmlなんか無いぞ?server.xmlなどtomcatの設定ファイルだぞ?
.openshift/action_hooks/pre_build - Script that gets run every git push before the build (on the CI system if available)
.openshift/action_hooks/pre_build - git pushビルドの前に実行されるスクリプト(もし有効であればCIシステム上で)
.openshift/action_hooks/build - Script that gets run every git push as part of the build process (on the CI system if available)
.openshift/action_hooks/build - git pushビルドプロセスの一部として実行されるスクリプト(もし有効であればCIシステム上で)
.openshift/action_hooks/deploy - Script that gets run every git push after build but before the app is restarted
.openshift/action_hooks/deploy - git pushビルド後毎に実行されるアプリが再起動される前に実行されるスクリプト
.openshift/action_hooks/post_deploy - Script that gets run every git push after the app is restarted
.openshift/action_hooks/post_deploy - アプリが再起動された後、git push毎に実行されるスクリプト
.openshift/action_hooks/pre_start_jbossews-1.0 - Script that gets run prior to starting EWS1.0
.openshift/action_hooks/pre_start_jbossews-1.0 - EWS1.0を開始する前に実行されるスクリプト
.openshift/action_hooks/post_start_jbossews-1.0 - Script that gets run after EWS1.0 is started
.openshift/action_hooks/post_start_jbossews-1.0 - EWS1.0開始後に実行されるスクリプト
.openshift/action_hooks/pre_stop_jbossews-1.0 - Script that gets run prior to stopping EWS1.0
.openshift/action_hooks/pre_stop_jbossews-1.0 - EWS1.0を停止する前に実行されるスクリプト
.openshift/action_hooks/post_stop_jbossews-1.0 - Script that gets run after EWS1.0 is stopped
.openshift/action_hooks/post_stop_jbossews-1.0 - EWS1.0停止後に実行されるスクリプト


Notes about layout
レイアウトについての注意事項
==================
Note: Every time you push, everything in your remote repo dir gets recreated
      please store long term items (like an sqlite database) in the OpenShift
      data directory, which will persist between pushes of your repo.
注意:あなたがpushをかける度に、あなたのリモート・レポ・ディレクトリ内全ては再作成を受けるので、OpenShiftデータ・ディレクトリには長期アイテム(sqliteデータベースのような)をストアしてください。そこはプッシュの間も持続されます。
      The OpenShift data directory is accessible relative to the remote repo
      directory (../data) or via an environment variable OPENSHIFT_DATA_DIR.
OpenShiftのdataディレクトリは、相対的なリモートレポ(../data)経由、又はOPENSHIFT_DATA_DIR環境変数を経由してアクセス可能です。


Details about layout and deployment options
レイアウトとデプロイメント・オプションの詳細
==================
There are two options for deploying content to the Tomcat Server within OpenShift.
OpenShiftのTomcatサーバーにコンテンツをデプロイするのに2つのオプションがある。 
Both options can be used together (i.e. build one archive from source and others pre-built)
どちらのオプションも一緒に使用される(すなわち、ソースと他のプレ・ビルドから一つのアーカイブがビルドされる)。

1) (Preferred) You can upload your content in a Maven src structure as is this sample project and on git push have the application built and deployed.
1) (好ましい方法)サンプルプロジェクトのようにMavenソース構造のコンテンツをアップロード可能であり、そしてgit pushでアプリケーションをビルドし、デプロイされる。
For this to work you'll need your pom.xml at the root of your repository and a maven-war-plugin like in this sample to move the output from the build to the webapps directory.
これが正常に機能するために、レポジトリルートにpom.xmlが必要で、サンプルのようなmaven-war-pluginがbuildからwebappsディレクトリへ出力するのに必要だろう。
By default the warName is ROOT within pom.xml.
デフォルトのWARファイル名は、pom.xmlの中にあるROOTである。
This will cause the webapp contents to be rendered at http://app_name-amespace.rhcloud.com/.
これはwebappコンテンツがhttp://app_name-amespace.rhcloud.com/で表示されるためである。
If you change the warName in pom.xml to app_name, your base url would then become http://app_name-namespace.rhcloud.com/app_name.
もしpom.xml中のwarNameをapp_nameに変えたなら、ベースURLはhttp://app_name-namespace.rhcloud.com/app_nameとなる。
Note: If you are building locally you'll also want to add any output wars under webapps
from the build to your .gitignore file.
注意:もしローカルでビルドしているのなら、幾つかwebapps下に出力したwarファイルを、ビルドから.gitignoreファイルまで追加を望むでしょう。
Note: If you are running scaled EWS1.0 then you need an application deployed to the root context (i.e. http://app_name-namespace.rhcloud.com/) for the HAProxy load-balancer to recognize that the EWS1.0 instance is active.
注意:もし貴方がスケールされたEWS1.0を実行しているなら、EWS1.0インスタンスがアクティブであることを認識する為に、HAProxyロードバランサーの為に、ルートコンテキストへのアプリケーション配備が必要です。
or
もしくは
2) You can git push pre-built wars into webapps/.
2) webappsフォルダにプレビルドのwarをgit pushすることができる。
To do this with the default repo you'll want to first run 'git rm -r src/ pom.xml' from the root of your repo.
デフォルトのレポでこれを行うには、あなたのレポのルートから'git rm -r src/ pom.xml'を最初に実行しようと望むだろう。
Basic workflows for deploying pre-built content (each operation will require associated git add/commit/push operations to take effect):
ビルド前コンテンツをデプロイするための基本ワークフロー(各オペレーションは有効となるためにgit add/commit/push操作に関連が必要となる):

A) Add new zipped content and deploy it:
A)新規ZIPコンテンツを追加し、それをデプロイする:

1. cp target/example.war webapps/

B) Undeploy currently deployed content:
B)現在デプロイされたコンテンツをアンデプロイする:

1. git rm webapps/example.war

C) Replace currently deployed zipped content with a new version and deploy it:
C)現在デプロイされたZIPコンテンツを新バージョンに置き換え、それをデプロイする:

1. cp target/example.war webapps/

Note: You can get the information in the uri above from running 'rhc domain show'
注意:あなたは'rhc domain show'実行結果のURIの中で、情報を入手可能である。

If you have already committed large files to your git repo, you rewrite or reset the history of those files in git to an earlier point in time and then 'git push --force' to apply those changes on the remote OpenShift server.
あなたがGitレポに、既にコミットされた大きなファイルを有しているのなら、あなたは上書き又はそれらのファイルの履歴をgit以前の時点にリセットし、次に'git push --force'を適用してリモートOpenShiftサーバー上でこれらを変更して欲しい。
A git gc on the remote OpenShift repo can be forced with (Note: tidy also does other cleanup including clearing log files and tmp dirs):
リモートOpenShift上のgit gcは、強制させることもできる(注意:)
rhc app tidy -a appname


Whether you choose option 1) or 2) the end result will be the application
deployed into the webapps directory. The webapps directory in the
Tomcat distribution is the location end users can place
their deployment content (e.g. war, ear, jar, sar files) to have it
automatically deployed into the server runtime.

Environment Variables
=====================

OpenShift provides several environment variables to reference for ease
of use.  The following list are some common variables but far from exhaustive:

    System.getenv("OPENSHIFT_APP_NAME")  - Application name
    System.getenv("OPENSHIFT_DATA_DIR")  - For persistent storage (between pushes)
    System.getenv("OPENSHIFT_TMP_DIR")   - Temp storage (unmodified files deleted after 10 days)
    System.getenv("OPENSHIFT_INTERNAL_IP")  - The IP address used to bind EWS1.0

When embedding a database using 'rhc app cartridge add', you can reference environment
variables for username, host and password. For example, when embedding MySQL 5.1, the
following variables will be available:

    System.getenv("OPENSHIFT_MYSQL_DB_HOST")      - DB host
    System.getenv("OPENSHIFT_MYSQL_DB_PORT")      - DB Port
    System.getenv("OPENSHIFT_MYSQL_DB_USERNAME")  - DB Username
    System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD")  - DB Password

To get a full list of environment variables, simply add a line in your
.openshift/action_hooks/build script that says "export" and push.