password="welcome1"
keytool -genkey -validity 10000 -alias acme -keyalg RSA -keysize 1024 -dname "CN=acme, OU=Engineering, O=YourCompany, L=YourCity, ST=YourRegion, C=YourCountryCode" -keypass acmepw -keystore identity-acme.jks -storepass $password
# Self Sign the certificate
echo $passWord | keytool -selfcert -validity 10000 -v -alias acme -keypass $passWord -keystore identity-acme.jks -storetype jks
# Export the root certificate
echo $passWord | keytool -export -v -alias acme -file identity-acme.der -keystore identity-acme.jks
# Import the root certificate back with the same name as in step 1 and step 2
keytool -import -v -alias acme -trustcacerts -file identity-acme.der -keystore acme-trust.jks
Tuesday, January 31, 2012
OSB Datasources
sparse notes here....
oracle.jdbc.driver.OracleDriver vs. oracle.jdbc.OracleDriver
http://stackoverflow.com/questions/6202653/difference-between-oracle-jdbc-driver-classes
so oracle.jdbc.driver.OracleDriver is deprecated, uh?
http://docs.oracle.com/cd/E12840_01/wls/docs103/jdbc_drivers/oracle.html
Which Oracle DB version am I using?
SELECT version FROM v$instance;
I get 11.2.0.3.0
If you do "SELECT * FROM g$instance" in Oracle RAC you get the same view.
oracle.jdbc.xa.client.OracleXADataSource
wlsbjmsrpDataSource: In the Driver field, select a supported non-XA driver
http://docs.oracle.com/cd/E12840_01/common/docs103/confgwiz/howdoi.html
For Supported Configurations Matrix: http://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html
For OSB http://www.oracle.com/technetwork/middleware/ias/downloads/osb-11gr1certmatrix.xls
oracle.jdbc.driver.OracleDriver vs. oracle.jdbc.OracleDriver
http://stackoverflow.com/questions/6202653/difference-between-oracle-jdbc-driver-classes
so oracle.jdbc.driver.OracleDriver is deprecated, uh?
http://docs.oracle.com/cd/E12840_01/wls/docs103/jdbc_drivers/oracle.html
Which Oracle DB version am I using?
SELECT version FROM v$instance;
I get 11.2.0.3.0
If you do "SELECT * FROM g$instance" in Oracle RAC you get the same view.
oracle.jdbc.xa.client.OracleXADataSource
wlsbjmsrpDataSource: In the Driver field, select a supported non-XA driver
http://docs.oracle.com/cd/E12840_01/common/docs103/confgwiz/howdoi.html
For Supported Configurations Matrix: http://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html
For OSB http://www.oracle.com/technetwork/middleware/ias/downloads/osb-11gr1certmatrix.xls
Labels:
datasource,
OSB
Monday, January 30, 2012
weblogic.jndi.retainenvironment
if you specify -Dweblogic.jndi.retainenvironment=true in the WLS command line,
in WLInitialContextFactoryDelegate:
if(KernelStatus.isServer())
{
String s = System.getProperty("weblogic.jndi.retainenvironment");
if(s != null)
keepEnvironmentUntilContextClose = true;
}
if (!keepEnvironmentUntilContextClose)
JNDIEnvironment.getJNDIEnvironment().popThreadEnvironment();
I am trying to understand what this - seemingly undocumented - parameter does.
If you have an idea, pleas leave a comment...
in WLInitialContextFactoryDelegate:
if(KernelStatus.isServer())
{
String s = System.getProperty("weblogic.jndi.retainenvironment");
if(s != null)
keepEnvironmentUntilContextClose = true;
}
if (!keepEnvironmentUntilContextClose)
JNDIEnvironment.getJNDIEnvironment().popThreadEnvironment();
I am trying to understand what this - seemingly undocumented - parameter does.
If you have an idea, pleas leave a comment...
Sunday, January 29, 2012
Counting JMS messages present in a JMS Queue
here we show 2 ways:
(I have a wlsbJMSServer JMSServer, a uoo JMSModule, a uooq JNDI name for the Queue)
WLST
connect(....)
cd serverRuntime:/JMSRuntime/AdminServer.jms/JMSServers/wlsbJMSServer/Destinations/uoo!uooq
the cmo is:
[MBeanServerInvocationHandler]com.bea:ServerRuntime=AdminServer,Name=uoo!uooq,Type=JMSDestinationRuntime,JMSServerRuntime=wlsbJMSServer
cmo.getMessagesCurrentCount()
Java
see also:
http://docs.oracle.com/cd/E11035_01/wls100/javadocs_mhome/weblogic/management/runtime/JMSDestinationRuntimeMBean.html
http://docs.oracle.com/cd/E12840_01/wls/docs103/javadocs/weblogic/jms/extensions/JMSRuntimeHelper.html
If you want to invoke the same code in OSB, you can use this variant:
The alternative is to enable "Anonymous Admin Lookup Enabled" in "View Domain-wide Security Settings" in WebLogic console.
(I have a wlsbJMSServer JMSServer, a uoo JMSModule, a uooq JNDI name for the Queue)
WLST
connect(....)
cd serverRuntime:/JMSRuntime/AdminServer.jms/JMSServers/wlsbJMSServer/Destinations/uoo!uooq
the cmo is:
[MBeanServerInvocationHandler]com.bea:ServerRuntime=AdminServer,Name=uoo!uooq,Type=JMSDestinationRuntime,JMSServerRuntime=wlsbJMSServer
cmo.getMessagesCurrentCount()
Java
package com.acme.gu.jms; import java.util.Properties; import javax.jms.Destination; import javax.jms.JMSException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import weblogic.management.runtime.JMSDestinationRuntimeMBean; import weblogic.jms.extensions.JMSRuntimeHelper; public class JMSJMX { public static void main(String[] args) throws NamingException, JMSException { JMSJMX jmsjmx = new JMSJMX(); jmsjmx.countMessages(); } public void countMessages() throws NamingException, JMSException { Properties env = new Properties(); env.put(Context.PROVIDER_URL, "t3://localhost:7001"); env.put(Context.SECURITY_PRINCIPAL, "weblogic"); env.put(Context.SECURITY_CREDENTIALS, "weblogic1"); env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); InitialContext ctx = new InitialContext(env); Destination queue = (Destination) ctx.lookup("uooq"); JMSDestinationRuntimeMBean destMBean = JMSRuntimeHelper.getJMSDestinationRuntimeMBean(ctx, queue); System.out.println("count: " + destMBean.getMessagesCurrentCount()); } }
see also:
http://docs.oracle.com/cd/E11035_01/wls100/javadocs_mhome/weblogic/management/runtime/JMSDestinationRuntimeMBean.html
http://docs.oracle.com/cd/E12840_01/wls/docs103/javadocs/weblogic/jms/extensions/JMSRuntimeHelper.html
If you want to invoke the same code in OSB, you can use this variant:
package com.acme.gu.jms; /** * Method to be run inside a Container * @param jndis * @return * @throws NamingException * @throws JMSException */ public static String countCurrentMessages(String[] jndis) throws NamingException, JMSException { StringBuffer result = new StringBuffer(); InitialContext ctx = new InitialContext(); for (int count = 0; count < jndis.length; count++) { Destination queue = (Destination) ctx.lookup(jndis[count]); JMSDestinationRuntimeMBean destMBean = JMSRuntimeHelper.getJMSDestinationRuntimeMBean(ctx, queue); result.append(Long.toString(destMBean.getMessagesCurrentCount())); if (count < jndis.length - 1) { result.append(","); } } return result.toString(); }And you invoke it with a Java Callout, passing in input a Sequence ('jndi1', 'jndi2') which is converted automatically in a String[] I am returning a CSV list (String), because a String[] as a return parameter in converted into a Java object, which is not easy to access in OSB. Make sure you associate a Service Account (static) to the Java Callout, because when you create a new InitialContext without associating credentials, OSB attaches an anonymous user and you get an error: Callout to java method "public static java.lang.String[] com.acme.gu.jms.JMSJMX.countCurrentMessages(java.lang.String[]) throws javax.naming.NamingException,javax.jms.JMSException" resulted in exception: javax.naming.NoPermissionException: User <anonymous> does not have permission on weblogic.management.adminhome to perform lookup operation. weblogic.jms.common.JMSException: javax.naming.NoPermissionException: User <anonymous> does not have permission on weblogic.management.adminhome to perform lookup operation. at weblogic.jms.extensions.JMSRuntimeHelper.getJMSDestinationRuntimeMBean(JMSRuntimeHelper.java:458) at com.acme.gu.jms.JMSJMX.countCurrentMessages(JMSJMX.java:49) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at stages.transform.runtime.JavaCalloutRuntimeStep$1.run(JavaCalloutRuntimeStep.java:173)
The alternative is to enable "Anonymous Admin Lookup Enabled" in "View Domain-wide Security Settings" in WebLogic console.
Friday, January 27, 2012
Tracing and debugging in OSB
There are alternatives to putting LOG statements in the message flow.
One is activating payload tracing :
http://jvzoggel.wordpress.com/2012/01/23/osb_tracing_runtime/
also, be aware that there are 2 files alsbdebug.xml and configfwkdebug.xml in $DOMAIN_HOME:
Here more doc on this:
http://docs.oracle.com/cd/E17904_01/doc.1111/e15867/app_debugging.htm
One is activating payload tracing :
http://jvzoggel.wordpress.com/2012/01/23/osb_tracing_runtime/
also, be aware that there are 2 files alsbdebug.xml and configfwkdebug.xml in $DOMAIN_HOME:
Here more doc on this:
http://docs.oracle.com/cd/E17904_01/doc.1111/e15867/app_debugging.htm
Wednesday, January 25, 2012
Global warming is just a myth
fueled by conspiracy theorists.
I have taken this picture biking on the Alps. Normally in this season we would have half a meter snow in the valley - 600 meters above sea level. Now to find half a meter snow you must go at 2000 meters - these mountains are 3000 meters high. What is shown is the North face - the South face is even more free from snow.
All sort of tree are blossoming. In January. They too must be part of this delusional wave called "climate crisis theory".
Of course all this is just a statistical fluctuation, things will go back to normal and we can happily keep burning oil, cutting trees and behaving like there is no tomorrow.
I have taken this picture biking on the Alps. Normally in this season we would have half a meter snow in the valley - 600 meters above sea level. Now to find half a meter snow you must go at 2000 meters - these mountains are 3000 meters high. What is shown is the North face - the South face is even more free from snow.
All sort of tree are blossoming. In January. They too must be part of this delusional wave called "climate crisis theory".
Of course all this is just a statistical fluctuation, things will go back to normal and we can happily keep burning oil, cutting trees and behaving like there is no tomorrow.
Labels:
climatechange
Sunday, January 22, 2012
XQuery to return a property value
Too often in OSB developers hardcode property values everywhere in the Message Flow.
This makes life difficult, especially if these are environment-dependent values.
Waiting for Oracle to provide a decent way to externalize variables in a property file and read it from OSB (you can do that with a Custom XPath.... but the problem is that the property file would not be visible/editable from the OSB console, which is a pity...)...
you can use this approach:
This code shows also 2 interesting things:
- how to find a node with a given element name (using *[name()='something'] )
- how to raise a well readable error message with fn:error()
This makes life difficult, especially if these are environment-dependent values.
Waiting for Oracle to provide a decent way to externalize variables in a property file and read it from OSB (you can do that with a Custom XPath.... but the problem is that the property file would not be visible/editable from the OSB console, which is a pity...)...
you can use this approach:
xquery version "1.0" encoding "Cp1252"; declare namespace xf = "http://tempuri.org/OSBProject1/getProperty/"; declare function xf:getProperty($propertyName as xs:string) as xs:string { let $properties := <properties> <stageErrorDirectory>bla</stageErrorDirectory> <targetErrorDirectory>bla</targetErrorDirectory> </properties> let $match := $properties//*[name()=$propertyName] return if ($match) then $match/text() else fn:error(xs:QName('IllegalArgument'), $propertyName) }; declare variable $propertyName as xs:string external; xf:getProperty($propertyName)
This code shows also 2 interesting things:
- how to find a node with a given element name (using *[name()='something'] )
- how to raise a well readable error message with fn:error()
Labels:
OSB,
osb variables
Saturday, January 21, 2012
OSB rejected messages handling with WSIF
Here http://ws.apache.org/wsif/ the official Apache page on WSIF
I have tried assigning a dummy WebService (based on a sample WSDL generated by Eclipse)
In the "JCA Transport Configuration" of my Proxy Service I specify:
EndPoint Properties rejectedMessageHandlers = "wsif://http://localhost:7001/errorpoller/errorhandlerws?WSDL|newOperation|in"
Of course it doesn't work, I get this error:
JCA_FRAMEWORK_AND_ADAPTER BEA-000000 Rejection handler failed Rejection handler failed Error while trying to hand off bad message to Rejection handler wsif://http://localhost:7001/errorpoller/errorhandlerws?WSDL|newOperation|in due to: Unable to find an available port Please address the underlying issue or correct/redeploy the process
Here http://docs.oracle.com/cd/E12839_01/integration.1111/e10231/life_cycle.htm#BABGIGGI at "Web Service Handler" they report a sample payload schema, but it's all broken. It was impossible to find a complete WSDL for a proper Web Service Handler. How sad.
In fact it was my mistake, I should specify: Absolute wsdl path|service name|port name
and the port name is "NewWSDLFileSOAP" and the service name is "NewWSDLFile"
so I try with rejectedMessageHandlers = "wsif://http://localhost:7001/errorpoller/errorhandlerws?WSDL|NewWSDLFile|NewWSDLFileSOAP"
All of a sudden I find this example of rejectionmessage.wsdl : http://bentaljaard.wordpress.com/2010/10/22/creating-a-bpel-rejected-message-handler-for-ftp-file-polling/
referring to this http://oraintpc.blogspot.com/2007/10/in-action-adapter-rejection-handlers-in.html
sounds cool! I try to implement it stealing this WSDL
it turns out that in the oracle.tip.adapter.fw.agent.jca.JCAActivationAgent there is a property "portType" which needs to be set! Of course in the Oracle documentation there is no mention of this, they only say to set the property "rejectedMessageHandlers"
Here http://docs.oracle.com/cd/B14099_19/integrate.1012/b14058.pdf is says
WSIF Based Rejection Handler: In WSIF based Message Rejection handler, you can configure any type of WSIF WSDL, such as JCA, EJB, JMS, HTTP, and Java. You can configure any kind of service that can be reached through WSIF as the bad message handler.
The syntax for specifying a WSIF based Message Rejection handler is as follows:
<property name="rejectedMessageHandlers"> wsif://<wsif-wsdl-location>|<operation-name>|<input-message-part-name> </property>
You can specify a WSIF based Message Rejectionhandler as shown in the following example:
<property name="rejectedMessageHandlers"> wsif://file:/C:/orabpel/samples/test/ErrorTest/FileAdapterWrite.wsdl|write|mess age </property>
The WSIF based Message Rejection handler has the same constraint on message type as that of BPEL Process Rejection Handler. Refer to the BPEL Process Rejection Handler section.
still working on this... not a single COMPLETE working example available on the entire internet...
I have tried assigning a dummy WebService (based on a sample WSDL generated by Eclipse)
In the "JCA Transport Configuration" of my Proxy Service I specify:
EndPoint Properties rejectedMessageHandlers = "wsif://http://localhost:7001/errorpoller/errorhandlerws?WSDL|newOperation|in"
Of course it doesn't work, I get this error:
JCA_FRAMEWORK_AND_ADAPTER BEA-000000 Rejection handler failed Rejection handler failed Error while trying to hand off bad message to Rejection handler wsif://http://localhost:7001/errorpoller/errorhandlerws?WSDL|newOperation|in due to: Unable to find an available port Please address the underlying issue or correct/redeploy the process
Here http://docs.oracle.com/cd/E12839_01/integration.1111/e10231/life_cycle.htm#BABGIGGI at "Web Service Handler" they report a sample payload schema, but it's all broken. It was impossible to find a complete WSDL for a proper Web Service Handler. How sad.
In fact it was my mistake, I should specify: Absolute wsdl path|service name|port name
and the port name is "NewWSDLFileSOAP" and the service name is "NewWSDLFile"
so I try with rejectedMessageHandlers = "wsif://http://localhost:7001/errorpoller/errorhandlerws?WSDL|NewWSDLFile|NewWSDLFileSOAP"
All of a sudden I find this example of rejectionmessage.wsdl : http://bentaljaard.wordpress.com/2010/10/22/creating-a-bpel-rejected-message-handler-for-ftp-file-polling/
referring to this http://oraintpc.blogspot.com/2007/10/in-action-adapter-rejection-handlers-in.html
sounds cool! I try to implement it stealing this WSDL
it turns out that in the oracle.tip.adapter.fw.agent.jca.JCAActivationAgent there is a property "portType" which needs to be set! Of course in the Oracle documentation there is no mention of this, they only say to set the property "rejectedMessageHandlers"
Here http://docs.oracle.com/cd/B14099_19/integrate.1012/b14058.pdf is says
WSIF Based Rejection Handler: In WSIF based Message Rejection handler, you can configure any type of WSIF WSDL, such as JCA, EJB, JMS, HTTP, and Java. You can configure any kind of service that can be reached through WSIF as the bad message handler.
The syntax for specifying a WSIF based Message Rejection handler is as follows:
<property name="rejectedMessageHandlers"> wsif://<wsif-wsdl-location>|<operation-name>|<input-message-part-name> </property>
You can specify a WSIF based Message Rejectionhandler as shown in the following example:
<property name="rejectedMessageHandlers"> wsif://file:/C:/orabpel/samples/test/ErrorTest/FileAdapterWrite.wsdl|write|mess age </property>
The WSIF based Message Rejection handler has the same constraint on message type as that of BPEL Process Rejection Handler. Refer to the BPEL Process Rejection Handler section.
still working on this... not a single COMPLETE working example available on the entire internet...
Labels:
rejectedMessageHandler,
WSIF
Friday, January 20, 2012
XQuery, extract file name from directory
fn:tokenize(fn:replace($theDirectory, '\\', '/'), '/')[fn:last()]
input: C:\tmp\bla\po\in\if2
output: if2
input: C:\tmp\bla\po\in\if2
output: if2
Thursday, January 19, 2012
rename namespace
a small note to myself on how to change namespace of a xml element in OSB
input is
<ciao/>
output is
<lap:ciao xmlns:lap="http://www.laperrasucia.com"/>
Labels:
namespace
A callout cannot invoke a one-way operation
I have created a DBAdapter JCA Client invoking an INSERT operation
JDeveloper generates this WLSD:
the "insert" operation is a one-way operation (no wlsd:output clause)
The problem is that the Service Callout expects a request-reply pattern.
So in this case you must necessarily use a Publish, with Quality of Service "Exactly Once" to execute in the same transaction and with a blocking operation.
JDeveloper generates this WLSD:
<?binding.jca AcmeDBInsert_db_db.jca?> <wsdl:definitions name="AcmeDBInsert_db" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/db/AcmePOC_Sharath/Acme_POC_Acme_WMS/AcmeDBInsert_db" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/db/AcmePOC/Acme_POC_Acme_WMS/AcmeDBInsert_db" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:top="http://xmlns.oracle.com/pcbpel/adapter/db/top/AcmeDBInsert_db"> <plt:partnerLinkType name="AcmeDBInsert_db_plt"> <plt:role name="AcmeDBInsert_db_role"> <plt:portType name="tns:AcmeDBInsert_db_ptt"/> </plt:role> </plt:partnerLinkType> <wsdl:types> <schema xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://xmlns.oracle.com/pcbpel/adapter/db/top/AcmeDBInsert_db" schemaLocation="xsd/AcmeDBInsert_db_table.xsd"/> </schema> </wsdl:types> <wsdl:message name="GmAcmeTrackerCollection_msg"> <wsdl:part name="GmAcmeTrackerCollection" element="top:GmAcmeTrackerCollection"/> </wsdl:message> <wsdl:portType name="AcmeDBInsert_db_ptt"> <wsdl:operation name="insert"> <wsdl:input message="tns:GmAcmeTrackerCollection_msg"/> </wsdl:operation> </wsdl:portType> </wsdl:definitions>
the "insert" operation is a one-way operation (no wlsd:output clause)
The problem is that the Service Callout expects a request-reply pattern.
So in this case you must necessarily use a Publish, with Quality of Service "Exactly Once" to execute in the same transaction and with a blocking operation.
Labels:
JCA
Wednesday, January 18, 2012
JMA supports SOPA and PIPA
After all, Middle Ages were cool, with all those witches burnt on a stake, entertainment was bountiful.
We also support Stalinism, and the Freedom to shut in prison whomever we want without evidence. Freedom is a good thing.
Uh, also Nazi Book Burning is cool, it's such a pity that websites burning can't keep you warm in winter:
We also support Stalinism, and the Freedom to shut in prison whomever we want without evidence. Freedom is a good thing.
Uh, also Nazi Book Burning is cool, it's such a pity that websites burning can't keep you warm in winter:
Monday, January 16, 2012
What a developer thinks about Vaadin
(guest post)
I have interviewed a good friend who has been using Vaadin at his job for 6 months. Here is what he says:
Vaadin...
Too be short, it's like any framework trying to do generate everything for you.
Great at the things the demo application does. Not always so great at the things you really want to do.
The plus side is that it is all Java, and thus for the most part extendable.
The down side is that you have to do this a bit too often.
If at our company we were not forced to use a framework built on top of the Vaadin framework, I would say it upped the productivity.
Vaadin gives a lot of freedom. If you're going to build something on top of it, try to retain most of that freedom.
A lesson I'm trying to teach our architects ...
All in all, it's better then the struts world I've been accustomed too. But the holy grail it is not...
I have interviewed a good friend who has been using Vaadin at his job for 6 months. Here is what he says:
Vaadin...
Too be short, it's like any framework trying to do generate everything for you.
Great at the things the demo application does. Not always so great at the things you really want to do.
The plus side is that it is all Java, and thus for the most part extendable.
The down side is that you have to do this a bit too often.
If at our company we were not forced to use a framework built on top of the Vaadin framework, I would say it upped the productivity.
Vaadin gives a lot of freedom. If you're going to build something on top of it, try to retain most of that freedom.
A lesson I'm trying to teach our architects ...
All in all, it's better then the struts world I've been accustomed too. But the holy grail it is not...
Labels:
Vaadin
Sunday, January 15, 2012
How to create and use Custom Document Properties in Word 2007
Create the property:
Clic on the Microsoft Office Button (top left):
http://officeimg.vo.msecnd.net/en-us/files/325/058/ZA010351135.jpg
Prepare/Properties
( you can acheve the same with Alt-F Alt-E Alt-P)
a Properties ribbon appear under the main ribbon.
Click on the drop down list "Document Properties - Server" and choose advanced properties
Click on the Custom TAB
Enter a property name AND a property value, and click ADD.
I suggest to prefix YOUR custom properties with a prefix, like PV_, to distinguish them from built-in properties.
To insert a property in your document:
CTRL-F9
right click
edit field
field name=DocProperty and select your property
( this is explained very well here)
TRICK: you can achieve the same by:
CTRL-F9 then type DOCPROPERTY YOURPROPERTNAME
then right-click and "update field"
OR use ALT-F9 to display field codes and edit them, then ALT-F9 again to revert to normal mode.
or simply copy/paste an existing field, then right-click and edit field.
For help on Word Field Codes: http://office.microsoft.com/en-us/word-help/field-codes-in-word-HA010100426.aspx
My conclusion: Microsoft has done a very poor job when it comes to be able to externalize strings and include them dynamically in the document. I have seen better tools 20 years ago.
Clic on the Microsoft Office Button (top left):
http://officeimg.vo.msecnd.net/en-us/files/325/058/ZA010351135.jpg
Prepare/Properties
( you can acheve the same with Alt-F Alt-E Alt-P)
a Properties ribbon appear under the main ribbon.
Click on the drop down list "Document Properties - Server" and choose advanced properties
Click on the Custom TAB
Enter a property name AND a property value, and click ADD.
I suggest to prefix YOUR custom properties with a prefix, like PV_, to distinguish them from built-in properties.
To insert a property in your document:
CTRL-F9
right click
edit field
field name=DocProperty and select your property
( this is explained very well here)
TRICK: you can achieve the same by:
CTRL-F9 then type DOCPROPERTY YOURPROPERTNAME
then right-click and "update field"
OR use ALT-F9 to display field codes and edit them, then ALT-F9 again to revert to normal mode.
or simply copy/paste an existing field, then right-click and edit field.
For help on Word Field Codes: http://office.microsoft.com/en-us/word-help/field-codes-in-word-HA010100426.aspx
My conclusion: Microsoft has done a very poor job when it comes to be able to externalize strings and include them dynamically in the document. I have seen better tools 20 years ago.
Labels:
word
Saturday, January 14, 2012
Writing proper technical documents with Word 2007 +
I am a geek and I always hated writing good looking doc...
I LOVE to document stuff, but only on a merely technical level (Javadoc, wikis, TDD, comments in code...).
When it comes to writing Word documents, all sort of aesthetic considerations come into account (font size, uniformity of the styles across the suite of documents etc), and a real macho-geek considers aesthetic issues something a bit borderline like homosexuality.
So the statement "I can write very good Word Documents" sounds like "I wear a pink pajama at night and I spend hours massaging my body with perfumes in the shower".
Real geeks don't waste time with Word. Real men don't wear pajamas and they rarely shower unless they have to - sweat it their only perfume.
But real men know how to bite the bullet and do something even if they hate it.
First thing occurring to my weak mind: use styles everywhere:
http://www.dummies.com/how-to/content/how-to-manage-your-styles-in-word-2007.html
styles are the only way to ensure uniform presentation, and to quickly change look and feel of a document.
Styles: Ctrl+Shift+Alt+S, Manage Styles, export.... this only exports existing styles to an existing template....
there is a normal.dotm template. you want to create your own template.
You can save your document as "word macro-enabled template (*.dotm)"
But, wait a second, how does a template work? I have never used them...
http://wordprocessing.about.com/od/usingtemplatesandaddins/l/blwordtemp.htm
Something interesting is also CUSTOM PROPERTIES.... Microsoft Office Button Button image, point to Prepare, and then click Properties.
On the Custom tab, you can add the name of a new property, but the Add button for that property remains disabled until you also assign a value (a point many users miss).
Here it explains the pain of enabling the "Insert property" option in the menu...
IT'S AWFUL the castration produced by Microsoft in the new 2007 menus, every single person I talk to HATES the new menus....
Ok, I stop here... on the whole I find the new Word incredibly complicated for those who want to use a professional but straightforward use... all the functionality is there, but they make it very difficult to use it. The "old style" menus where a lot more intuitive.
And, I still believe that every project should hire a (maybe part-time) technical writer, you can't expect very talented technical people to excel in word (hahaha pardon the pun).
I LOVE to document stuff, but only on a merely technical level (Javadoc, wikis, TDD, comments in code...).
When it comes to writing Word documents, all sort of aesthetic considerations come into account (font size, uniformity of the styles across the suite of documents etc), and a real macho-geek considers aesthetic issues something a bit borderline like homosexuality.
So the statement "I can write very good Word Documents" sounds like "I wear a pink pajama at night and I spend hours massaging my body with perfumes in the shower".
Real geeks don't waste time with Word. Real men don't wear pajamas and they rarely shower unless they have to - sweat it their only perfume.
But real men know how to bite the bullet and do something even if they hate it.
First thing occurring to my weak mind: use styles everywhere:
http://www.dummies.com/how-to/content/how-to-manage-your-styles-in-word-2007.html
styles are the only way to ensure uniform presentation, and to quickly change look and feel of a document.
Styles: Ctrl+Shift+Alt+S, Manage Styles, export.... this only exports existing styles to an existing template....
there is a normal.dotm template. you want to create your own template.
You can save your document as "word macro-enabled template (*.dotm)"
But, wait a second, how does a template work? I have never used them...
http://wordprocessing.about.com/od/usingtemplatesandaddins/l/blwordtemp.htm
Something interesting is also CUSTOM PROPERTIES.... Microsoft Office Button Button image, point to Prepare, and then click Properties.
On the Custom tab, you can add the name of a new property, but the Add button for that property remains disabled until you also assign a value (a point many users miss).
Here it explains the pain of enabling the "Insert property" option in the menu...
IT'S AWFUL the castration produced by Microsoft in the new 2007 menus, every single person I talk to HATES the new menus....
Ok, I stop here... on the whole I find the new Word incredibly complicated for those who want to use a professional but straightforward use... all the functionality is there, but they make it very difficult to use it. The "old style" menus where a lot more intuitive.
And, I still believe that every project should hire a (maybe part-time) technical writer, you can't expect very talented technical people to excel in word (hahaha pardon the pun).
Labels:
word
Wednesday, January 11, 2012
Web Application to upload a file to any directory
http://www.roseindia.net/jsp/file_upload/Sinle_upload.xhtml.shtml
on multipart/form-data:
http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2
if you add in the index.jsp
<tr>
<td><b>Choose the destination directory:</b></td>
<td>
<select name="targetDirectory">
<option value="c:/tmp">c:/tmp</option>
<option value="c:/temp">c:/temp</option>
</select>
</td>
</tr>
and you do:
Object targetDirectoryAttribute = request.getAttribute("targetDirectory");
String targetDirectoryParameter = request.getParameter("targetDirectory");
System.out.println("targetDirectoryAttribute=" + targetDirectoryAttribute);
System.out.println("targetDirectoryParameter=" + targetDirectoryParameter);
they are both null
on how to read parameters in a multipart/form-data form:
http://www.jguru.com/faq/view.jsp?EID=1045507
http://commons.apache.org/fileupload/
interesting code snippets here
invoke readHeaders() in org.apache.commons.fileupload.MultipartStream
looks too complicated...
I would rather use
http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html
getParameter(java.lang.String name)
so I download http://www.servlets.com/cos/cos-26Dec2008.zip
but, wait a minute, I find this
http://stackoverflow.com/questions/3238103/extracting-parameters-of-a-httprequest-when-form-type-is-multipart
http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/servlet/ServletFileUpload.html
http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/disk/DiskFileItemFactory.html
Some other posts on the topic:
http://stackoverflow.com/questions/1545717/issue-with-multipart-form-data
http://stackoverflow.com/questions/1748259/get-form-parameters-from-multipart-request-without-getting-the-files
http://stackoverflow.com/questions/3238103/extracting-parameters-of-a-httprequest-when-form-type-is-multipart
Eventually I give up on all those horrible libraries, and I add a second for an a onclick javascript to add in the HTTP query the directory info...
See the working result here:
http://javatoolsforweblogic.googlecode.com/svn/trunk/fileUpload/index.jsp
http://javatoolsforweblogic.googlecode.com/svn/trunk/fileUpload/single_upload_page.jsp
Anyway this is disgusting, the way this HTTP Java Servlet technology turns simple things in a total nightmare.... no wonder people turn to other technologies...
on multipart/form-data:
http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2
if you add in the index.jsp
<tr>
<td><b>Choose the destination directory:</b></td>
<td>
<select name="targetDirectory">
<option value="c:/tmp">c:/tmp</option>
<option value="c:/temp">c:/temp</option>
</select>
</td>
</tr>
and you do:
Object targetDirectoryAttribute = request.getAttribute("targetDirectory");
String targetDirectoryParameter = request.getParameter("targetDirectory");
System.out.println("targetDirectoryAttribute=" + targetDirectoryAttribute);
System.out.println("targetDirectoryParameter=" + targetDirectoryParameter);
they are both null
on how to read parameters in a multipart/form-data form:
http://www.jguru.com/faq/view.jsp?EID=1045507
http://commons.apache.org/fileupload/
interesting code snippets here
invoke readHeaders() in org.apache.commons.fileupload.MultipartStream
looks too complicated...
I would rather use
http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html
getParameter(java.lang.String name)
so I download http://www.servlets.com/cos/cos-26Dec2008.zip
but, wait a minute, I find this
http://stackoverflow.com/questions/3238103/extracting-parameters-of-a-httprequest-when-form-type-is-multipart
http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/servlet/ServletFileUpload.html
http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/disk/DiskFileItemFactory.html
Some other posts on the topic:
http://stackoverflow.com/questions/1545717/issue-with-multipart-form-data
http://stackoverflow.com/questions/1748259/get-form-parameters-from-multipart-request-without-getting-the-files
http://stackoverflow.com/questions/3238103/extracting-parameters-of-a-httprequest-when-form-type-is-multipart
Eventually I give up on all those horrible libraries, and I add a second for an a onclick javascript to add in the HTTP query the directory info...
See the working result here:
http://javatoolsforweblogic.googlecode.com/svn/trunk/fileUpload/index.jsp
http://javatoolsforweblogic.googlecode.com/svn/trunk/fileUpload/single_upload_page.jsp
Anyway this is disgusting, the way this HTTP Java Servlet technology turns simple things in a total nightmare.... no wonder people turn to other technologies...
Labels:
upload
Monday, January 9, 2012
Planet is screwed? Maybe....
but it's not a reason to stop loving it and defending it ....
Labels:
greenpeace
SOA Integration Best of Packt - a compendium of books and techniques
http://www.amazon.com/Do-more-SOA-Integration-Packt/dp/184968572X/ref=sr_1_1?ie=UTF8&qid=1326096025&sr=8-1
Do more with SOA Integration: Best of Packt
It looks promising....
Do more with SOA Integration: Best of Packt
It looks promising....
Labels:
books
Thursday, January 5, 2012
Channel Purger vs Message Filter
It was not clear to me the difference between the 2:
http://eaipatterns.com/ChannelPurger.html this is meant to remove from a CHANNEL (IN PARALLEL TO THE MAIN FLOW) spurious bogus messages that should be prevented from reaching the main flow (e.g. test messages or old expired messages)
http://eaipatterns.com/Filter.html a filter is used IN SERIES TO THE MAIN FLOW to discard irrelevant (but perfectly legal) messages
So the difference is like between a parallel spike suppressor and a series filter (pardon me for being an electronic engineer).
http://eaipatterns.com/ChannelPurger.html this is meant to remove from a CHANNEL (IN PARALLEL TO THE MAIN FLOW) spurious bogus messages that should be prevented from reaching the main flow (e.g. test messages or old expired messages)
http://eaipatterns.com/Filter.html a filter is used IN SERIES TO THE MAIN FLOW to discard irrelevant (but perfectly legal) messages
So the difference is like between a parallel spike suppressor and a series filter (pardon me for being an electronic engineer).
Labels:
eaipatterns
Wednesday, January 4, 2012
DevOps
As a developer and architect, I am VERY proud of having spent a few years of my life doing production support. Having been "on the other side of the barricade" gives you great clues on how an application should be conceived to avoid operational nightmares.
So, welcome to DevOps.
Here a link to a great post on the topic:
http://blog.carlossanchez.eu/2012/01/02/about-devops/
http://en.wikipedia.org/wiki/DevOps generalities on DevOps
http://theagileadmin.com/2010/10/15/a-devops-manifesto/ a DevOps Manifesto
« Infrastructure is code, and should be developed and managed as such.”
“Simplicity–the art of maximizing the amount of work not done–is essential.”
“Giving developers more environment control »
« Automating as much as possible”
“Collaboration between dev and ops »
“iterative development ... each release has less change but occurs more often. This creates a smooth rate of progressive application change vs. the large impact effect of rare deployments–each of which contains a large number of changes.”
(carefully avoiding here the word “agile” because a too overloaded word)
Thinking in silos:
So, welcome to DevOps.
Here a link to a great post on the topic:
http://blog.carlossanchez.eu/2012/01/02/about-devops/
http://en.wikipedia.org/wiki/DevOps generalities on DevOps
http://theagileadmin.com/2010/10/15/a-devops-manifesto/ a DevOps Manifesto
« Infrastructure is code, and should be developed and managed as such.”
“Simplicity–the art of maximizing the amount of work not done–is essential.”
“Giving developers more environment control »
« Automating as much as possible”
“Collaboration between dev and ops »
“iterative development ... each release has less change but occurs more often. This creates a smooth rate of progressive application change vs. the large impact effect of rare deployments–each of which contains a large number of changes.”
(carefully avoiding here the word “agile” because a too overloaded word)
Thinking in silos:
Labels:
devops
Tuesday, January 3, 2012
javax.resource.spi.InvalidPropertyException: Duplicate Property Values Exception. The properties [xADataSourceName] and [dataSourceName (both in connector properties)] can not both be [jdbc/SOADataSource].
ok, I have done it again...
in the JCA file adapter outbound connection pool instance, you should configure only.
either dataSourceName, or xADataSourceName... NOT BOTH! Du blöder Einer! Dummkopf!
* "Du blöder Einer" is a yiddish-german expression. it means "you stupid"
in the JCA file adapter outbound connection pool instance, you should configure only.
either dataSourceName, or xADataSourceName... NOT BOTH! Du blöder Einer! Dummkopf!
* "Du blöder Einer" is a yiddish-german expression. it means "you stupid"
Labels:
JCA
Subscribe to:
Posts (Atom)