ADF Contextual Event

相关blog
http://www.oracle.com/technetwork/issue-archive/2011/11-may/o31adf-352561.html
http://oracle.sys-con.com/node/1497222/mobile
http://biemond.blogspot.com/2009/01/passing-adf-events-between-task-flow.html
http://one-size-doesnt-fit-all.blogspot.com/2010/08/jdev-contextual-events-payload-payload.html
http://jobinesh.blogspot.com/2010/11/triggering-navigation-from-contextual.html

关于Region间通讯(一个Region订阅另一个Region发布的事件),由于订阅的Region通过配置界面不可能选择到发布Region的事件,因此需要手工的修改订阅页面的PageDef.xml来订阅事件,代码如下,注意红字部分:
<?xml version=”1.0” encoding=”UTF-8” ?>
<pageDefinition xmlns=”http://xmlns.oracle.com/adfm/uimodel
version=”11.1.1.60.13” id=”eventTargetPageDef”
Package=”dj.demo.contextualevent.view.fragments”>
<parameters/>
<executables>
<variableIterator id=”variables”/>
</executables>
<bindings>
<methodAction id=”eventHandler” InstanceName=”TestPage.dataProvider”
DataControl=”TestPage” RequiresUpdateModel=”true”
Action=”invokeMethod” MethodName=”eventHandler”
IsViewObjectMethod=”false”>
<NamedData NDName=”event” NDType=”java.lang.Object”/>
</methodAction>
</bindings>
<eventMap xmlns=”http://xmlns.oracle.com/adfm/contextualEvent"&gt;
<event name=”buttonPressed”><!–订阅名称–>
<producer region=”*”><!–订阅来源–>
<consumer region=”” handler=”eventHandler” handleCondition=””>
<parameters>
<parameter name=”event” value=”#{payLoad}”/>
</parameters>
</consumer>
</producer>
</event>
</eventMap>
<events xmlns=”http://xmlns.oracle.com/adfm/contextualEvent"/&gt;
</pageDefinition>

关于将Backing Bean 方法暴露为DataControl,如果使用自动的方法,将生成一堆东西。
解决方法为生成后删除或手工配置,相关配置文件及示例(Bean Class为TestPage,注意红字部分):
DataControls.dcx
<?xml version=”1.0” encoding=”UTF-8” ?>
<DataControlConfigs xmlns=”http://xmlns.oracle.com/adfm/configuration
version=”11.1.1.60.13” id=”DataControls”
Package=”dj.demo.contextualevent.view“>
<AdapterDataControl id=”TestPage”
FactoryClass=”oracle.adf.model.adapter.DataControlFactoryImpl”
ImplDef=”oracle.adf.model.adapter.bean.BeanDefinition”
SupportsTransactions=”false” SupportsSortCollection=”true”
SupportsResetState=”false” SupportsRangesize=”false”
SupportsFindMode=”false” SupportsUpdates=”true”
Definition=”dj.demo.contextualevent.TestPage
BeanClass=”dj.demo.contextualevent.TestPage
xmlns=”http://xmlns.oracle.com/adfm/datacontrol"&gt;
<CreatableTypes>
<TypeInfo FullName=”dj.demo.contextualevent.TestPage“/>
</CreatableTypes>
<Source>
<bean-definition BeanClass=”dj.demo.contextualevent.TestPage
xmlns=”http://xmlns.oracle.com/adfm/adapter/bean"/&gt;
</Source>
</AdapterDataControl>
</DataControlConfigs>
TestPage.xml
<?xml version=”1.0” encoding=”UTF-8” ?>
<JavaBean xmlns=”http://xmlns.oracle.com/adfm/beanmodel“ version=”11.1.1.60.13”
id=”TestPage” Package=”dj.demo.contextualevent”
BeanClass=”dj.demo.contextualevent.TestPage” isJavaBased=”true”>
<MethodAccessor IsCollection=”false” Type=”void” id=”eventHandler”
ReturnNodeName=”Return”>
<ParameterInfo id=”event” Type=”java.lang.Object” isStructured=”false”/>
</MethodAccessor>
<ConstructorMethod IsCollection=”true” Type=”dj.demo.contextualevent.TestPage”
BeanClass=”dj.demo.contextualevent.TestPage”
id=”TestPage”/>
</JavaBean>
DataBindings.cpx
<?xml version=”1.0” encoding=”UTF-8” ?>
<Application xmlns=”http://xmlns.oracle.com/adfm/application
version=”11.1.1.60.13” id=”DataBindings” SeparateXMLFiles=”false”
Package=”dj.demo.contextualevent.view” ClientType=”Generic”>
<definitionFactories>
<factory nameSpace=”http://xmlns.oracle.com/adf/controller/binding
className=”oracle.adf.controller.internal.binding.TaskFlowBindingDefFactoryImpl”/>
<dtfactory className=”oracle.adf.controller.internal.dtrt.binding.BindingDTObjectFactory”/>
</definitionFactories>
<pageMap>
<page path=”/TestPage.jspx”
usageId=”dj_demo_contextualevent_view_TestPagePageDef”/>
<page path=”/dj/demo/contextualevent/view/fragments/eventSource.jsff”
usageId=”dj_demo_contextualevent_view_eventSourcePageDef”/>
<page path=”/dj/demo/contextualevent/view/fragments/eventTarget.jsff”
usageId=”dj_demo_contextualevent_view_eventTargetPageDef”/>
</pageMap>
<pageDefinitionUsages>
<page id=”dj_demo_contextualevent_view_TestPagePageDef”
path=”dj.demo.contextualevent.view.pageDefs.TestPagePageDef”/>
<page id=”dj_demo_contextualevent_view_eventSourcePageDef”
path=”dj.demo.contextualevent.view.fragments.eventSourcePageDef”/>
<page id=”dj_demo_contextualevent_vieweventTargetPageDef”
path=”dj.demo.contextualevent.view.fragments.eventTargetPageDef”/>
</pageDefinitionUsages>
<dataControlUsages>
<dc id=”TestPage” path=”dj.demo.contextualevent.view.TestPage”/>
</dataControlUsages>
</Application>
如果DataControls.dcx是新建立的话,还需修改adfm.xml adfm.xml
<?xml version=”1.0” encoding=”UTF-8” ?>
<MetadataDirectory xmlns=”http://xmlns.oracle.com/adfm/metainf
version=”11.1.1.0.0”>
<DataBindingRegistry path=”dj/demo/contextualevent/view/DataBindings.cpx”/>
<DataControlRegistry path=”dj/demo/contextualevent/view/DataControls.dcx”/>
</MetadataDirectory>
关于Action和Listener的Type,参见这两份Java Doc
http://myfaces.apache.org/trinidad/trinidad-api/apidocs/org/apache/myfaces/trinidad/event/package-tree.html
http://download.oracle.com/javaee/6/api/javax/faces/event/package-tree.html
Listener和Event的使用,需要修改发布Event的page的pageDef.xml,示例如下,注意红字部分
pageDef.xml_
<?xml version=”1.0” encoding=”UTF-8” ?>
<pageDefinition xmlns=”http://xmlns.oracle.com/adfm/uimodel
version=”11.1.1.60.13” id=”eventSourcePageDef”
Package=”dj.demo.contextualevent.view.fragments”>
<parameters/>
<executables>
<variableIterator id=”variables”/>
</executables>
<bindings>
<eventBinding id=”eventBinding”
Listener=”javax.faces.event.ActionListener”>
<events xmlns=”http://xmlns.oracle.com/adfm/contextualEvent"&gt;
<event name=”buttonPressed”
customPayLoad=”#{pageFlowScope.ctePayload}
eventType=”Action Event”/>
</events>
</eventBinding>
</bindings>
<events xmlns=”http://xmlns.oracle.com/adfm/contextualEvent"&gt;
<event name=”buttonPressed” customPayLoad=”#{pageFlowScope.ctePayload}
eventType=”Action Event”/>
</events>
</pageDefinition>
在Backing Bean 代码中raise event,注意Listener的转换类型与Event的类型需要与上述配置匹配
package view;

import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import oracle.adf.model.BindingContext;
import oracle.binding.BindingContainer;
import oracle.jbo.uicli.binding.JUEventBinding;

public class PublisherBean {
public PublisherBean() {
}

public void doAction(ActionEvent actionEvent) {

BindingContainer bindingContainer = BindingContext.getCurrent().getCurrentBindingsEntry();
JUEventBinding eventBinding = (JUEventBinding)bindingContainer.get("publisherEvent");

ActionListener actionListener = (ActionListener)eventBinding.getListener();
actionListener.processAction(actionEvent);

}
}

ORABPEL-30017: Initialization Error

Product: Oracle SOA/BPM
Version: 11.1.1.4
OS: Windows 7

I deployed successfully to the SOA Server, however when I open BPM I get an initialization error.

To fix this error, go to your database, login as XX_SOAINFRA(where XX is the prefix that you specified during the installation of the SOAINFRA schema using the RCU utility) and run the following SQL:

select processId, processName, domainName, compositeName, revision, scaLabel, compositeDN, label, processType,
targetNamespace, status, organizationalUnitId, subType from BPM_CUBE_PROCESS.

and update the status to -1 for all entries.

ADF take aways from Oracle Open World 2011

[Fusion Middleware笔记整理]

需要关注的主题:

  • ADF Mobile,即将问世的混合型移动应用框架,code once run anywhere。令人忧虑的是以web作为展现形式是否能够提供合适的流畅度与易于实现的动画效果以提升用户体验。
  • Data Visualization Controls ,几种新的DVT组件及其效果
  • Maven Integration,11gR2的版本里支持更多的特性。但令人遗憾的是仍为IDE层面的Maven支持,仍未提供ADF的Maven Repository。
  • ADF Turning,ADF – Real World Performance Tuning 囊括了常规状况下需要进行的ADF应用性能调整。
  • FMW Road Map

全文链接http://one-size-doesnt-fit-all.blogspot.com.au/2011/10/adf-take-aways-from-oracle-open-world.html

JDeveloper/ADF 11g Release 2 (11.1.2.0.0 Build 6017) 释出

新的JDeveloper版本已经释出:JDeveloper 11g Release 2, aka JDeveloper 11.1.2.0.0 Build 6017

可以从这里下载 OTN.

安装说明在 [这里] 新特性在 [这里].

这里还有一个 认证支持的操作系统/DB/Browser等矩阵.

全部的文档可以从 [这里] 访问.

这是第一个支持JSF2.0的ADF版本,欢呼吧,筒子们。

Important Note - This version of JDeveloper doesn’t include the SOA and WebCenter pieces - to use these components you’ll need to download Oracle JDeveloper 11.1.1.5.0.

Oracle JDeveloper, ADF, WebCenter Suit, SOA Suit等发布PS4版本(11.1.1.5.0)

这次Oracle的动作不知道为什么这么快。不过从JDeveloper公布的Bugfix来看,功能修正有限啊。

JDeveloper & ADF [下载] [bugfix] [Extensions]
SOA Suit [下载]
BPM Suit [下载]
WebLogic 10.3.5 [下载]
AIA Foundation Pack 11gR1 [下载]
WebCenter Suit [下载] 终于有独立安装包了,不用从.2一直升级到.5了,掩面泪奔……

设置Zimbra允许POP3进行明文登录

由于大多数Zimbra实施的用户均没有申请专为Zimbra使用的SSL信道证书,所以为保证邮件客户端正确的工作,可能需要允许POP3,IMAP的Cleartext login。

在Zimbra的管理控制界面,我们可以看到这一选项,但发现该选项无法更改。

更改的方式为登录Zimbra系统安装的服务器
su - zimbra
zmprov ms server.example.com zimbraImapCleartextLoginEnabled TRUE zimbraPop3CleartextLoginEnabled TRUE

zmprov命令还可以设置更多Zimbra管理控制界面没有定义的功能。

从Domino向Zimbra迁移邮件系统

准备

下载ZCSDominoMigrationWizard-<版本号>.exe

  • 获取Lotus Domino邮件系统管理员id文件及密码
  • 在进行导入操作的Windows OS主机的host文件中设置FQDN,形如
    192.168.1.1 zimbra-test.com mail

运行ZCSDominoMigrationWizard

  1. 欢迎界面
  2. 设置目标Zimbra服务器
  3. 选择导入Zimbra服务器的Domian
  4. 设置源服务器Lotus Domino的LDAP信息

  5. 设置源服务器Lotus Domino的管理员id文件及密码

  6. 设置需要从Lotus Domino导入到Zimbra的用户列表
  • Object Picker可以选择用户进行导入
  • Query Builder可以构建查询以选择批量用户
    3. 检查Lotus Domino对应账户是否已存在于Zimbra
  1. 设置是否在Zimbra中创建账户
  2. 设置每个账户导入的内容,是否包括邮件、联系人、文档
  3. 设置是否导入已删除及垃圾邮件,设置导入指定日期之后的邮件,设置并发导入线程数
  4. 开始导入,等待导入完成
  5. 查看导入日志

    导入过程中需注意的几点,有些上面已经提到了,由于比较重要这里依然重申:

配置Zimbra使用外部LDAP验证

Zimbra 自带OpenLDAP用于用户存储及配置存储,但可配置外部LDAP或Microsoft AD用于用户验证。外部LDAP或AD并不能作为用户数据源,亦不可替代Zimbra内部的OpenLDAP。配置完成的效果为最终用户可用外部LDAP 或AD中的用户名/密码进行登录,登录后进入对应的用户邮箱中。

配置步骤

选择需要配置外部LDAP验证的Domain,进入配置引导

  • 配置LDAP服务器地址及端口;
  • 配置LDAP filter进行外部LDAP与Zimbra内部LDAP用户的匹配。如此处配置为cn=%u,意为外部用LDAP中如用户cn=test1对应至Zimbra内部邮件地址为test1@domain.com的用户;
  • 配置LDAP search base,此处为用户验证时搜索的根节点。如此处配置为ou=people,ou=myrealm,dc=owc_domain,则将搜索ou=people节点下所有节点作为用户验证。
    一般外部LDAP均不会允许匿名访问,此处用于设置可搜索上一步设置的LDAP search base下节点的LDAP用户名称及密码。

这里使用符合前两步设置的规则的外部LDAP中的用户进行测试,以验证配置是否正确

配置正确的话可看到验证成功界面