Wednesday, July 9, 2014

Using Flex Assets in Templates and CSElements

Let’s assume that we want to use a FlexAsset in a template and we don’t have access to the id of the asset but only to the value of an attribute of the asset.  

We will use the Demo_M (DemoImage) asset type with the definition “DemoImageDefinition”






The attributes used in this definition are file and thumbnail of type BLOB and title, altText and description of type string, string and text.

We have a number of assets of this type and that are using the same definition:


The goal of this tutorial is to access the DemoImage assets using as the identifier for the asset the value of an attribute, let’s say title.

First we need to create a searchstate object:

<%-- Create a searchstate --%>
<searchstate:create name="img_title" />

To narrow the result set we have to provide a constraint for searchstate. We do this by adding a constraint:

<searchstate:addsimplestandardconstraint name="img_title" attribute="title" value="Earth" typename="Demo_A"/>

Next step is to create and assetset using searchstate:

<assetset:setsearchedassets name="imgByTitle" assettypes="Demo_M" constraint="img_title" fixedlist="true"/>


Retrive the wanted attribute (altText for this example):

<assetset:getattributevalues name="imgByTitle" listvarname="altTextList" attribute="altText" typename="Demo_A"/>

Display the attribute value:

<p>Alt text for Earth image is: <ics:listget fieldname="value" listname="altTextList"/></p>


If the attribute has multiple values (like the description attribute):

<assetset:getattributevalues name="imgByTitle" listvarname="descList" attribute="description" typename="Demo_A"/>
<p>
     Description:<br/>
     <ics:listloop listname="descList">
          <ics:listget fieldname="value" listname="descList"/><br/>
     </ics:listloop>
</p>
        

To get the values from asset type primary table (like id, name, etc…) we can use asset:search tag:

<ics:setvar name="prefix:name_op" value="="/>
<ics:setvar name="prefix:name" value="earth"/>
<asset:search prefix="prefix" list="earthAttributes" type="Demo_M"/>
<ics:listloop listname="earthAttributes">
     <ics:listget listname="earthAttributes" fieldname="id"/>----
     <ics:listget listname="earthAttributes" fieldname="name"/>
</ics:listloop>
</cs:ftcs>


The result of the execution of the template:


Friday, June 27, 2014

Digging Tunnels

So, let’s say that we want to access the machine Y going through an intermediate server, machine X. Also we need to execute application with a graphic user interface and access a couple of servers on different ports (let’s say 7001 and 7003) on the target machine (server Y).  

In the first step we will create a connection to the management server (machineX) and will setup a tunnel with local port 10001 for the remote port 22. The command that is creating the connection and tunnel is:

ssh –f  userx@machineX –L 10001:machineY:22

We use –f option to put the SSH connection in the background and –L 10001:machineY:22 to create the tunnel. We use 10001 for the local port number and not 22 because only root can forward ports under 1024.

Once we have this connection we can create the other tunnels (for 7001 and 7003) and forward X11 display.

ssh –X –p 10001 usery@localhost –L7001:machineY:7001 –L7003:machineY:7003 

The command above creates multiple tunnels in one go and also forwards X11 display and you can access the target machine services using localhost:7001 and localhost:7003.

Wednesday, March 5, 2014

Java Mission Control and Flight Recorder Tutorial from Oracle

A very interesting tutorial created by Michael Williams on Java Mission Control and Flight Recorder is available here. It covers monitoring and analysis tools now available as part of the standard JDK starting with Java 7 u40.

Tuesday, February 25, 2014

Creating a WebCenter Sites Custom Attribute Editor


Sometimes we want to simplify the process of uploading of images associated with assets in WebCenter Sites and the best way to do that is to use specialized editors. We can add brand new editors or we can customize existing out-of-the box editors. Let’s assume that we have an asset that represents a newspaper article in our asset we have a media attribute (an associated image). We want to provide a simpler way for an author to select and add a image for our article.

For that we will create a custom asset editor based on provided IMAGEPICKER.

An attribute editor asset is made up of an XML field that describe the widget it represents. We have a choice for the XML: we can upload an XML file or paste the content of attribute editor XML description into a text field.

In our XML we are specifying values for attributes of PRESENTATIONOBJECT  and IMAGEPICKER element. For the PRESENTATIONOBJECT NAME attribute we are using the name of our editor ”DemoCustomImagePicker” and for
IMAGEPICKER we have:

ASSETTYPENAME with value "Demo_M " is the name of asset type representing the image.
ATTRIBUTETYPENAME with value "Demo_A" is the name of the attribute type used in asset
ATTRIBUTENAME with the value "file" is the name of the attribute type instance representing the binary content.



Second, we have to provide the attribute type for which this editor is provided. We want to allow user to choose an asset (an image asset) so "asset" is selected in the Attribute Type list. 



We are using out-of-the-box IMAGEPICKER, so we don’t have to modify presentationobject.dtd file.

Next we associate the editor with an attribute, in our case with “associatedImage” attribute. We select from the drop-down list “Attribute Editor” our “DemoCustomImagePicker” and save the updated object.



We can test now the editor by editing an asset of type DemoArticle. If we click on the “Browse” button a list of images is displayed and we can drag and drop an image in our Associated Image field. A thumbnail version of the image in media asset “file” attribute is also displayed.







Wednesday, February 5, 2014

Playing Around with WebLogic Maven Plug-In

Packaged with WebLogic 12c wls-maven-plugin let’s you install, start and stop servers, create domain, execute WLST scripts, compile and deploy applications. The plug-in works with Maven 2.x and 3.x.
WebLogic 12c can be downloaded from http://www.oracle.com/technetwork/index.html. Developers version has around  180MB (zip archive).  To install the plugin we need first to extract wls-maven-plugin.jar.pack and pom.xml

$unzip ~/Downloads/wls1212_dev.zip wls12120/wlserver/server/lib/wls-maven-plugin.jar.pack

$unzip ~/Downloads/wls1212_dev.zip wls12120/wlserver/server/lib/pom.xml

Now, let’s unpack the jar file:

$unpack200 -r wls12120/wlserver/server/lib/wls-maven-plugin.jar.pack wls12120/wlserver/server/lib/wls-maven-plugin.jar

Install the plug-in in the local repository

$cd wls12120/wlserver/server/lib/

$mvn install
  
$mvn install:install-file –Dfile=wls-maven-plugin.jar –DpomFile=pom.xml


Modify global or user settings.xml to add the plug-in group id to the default groups. You can find the location of settings.xml by running:

$mvn –X | grep settings


Usually, user settings are located in ~/.m2/settings.xml. For the global configuration file look in the Maven installation directory. For example: ~/apache-maven-3.1.1/conf/ directory/settings.xml.

Add the following lines:

<pluginGroups>
    <pluginGroup>com.oracle.weblogic</pluginGroup>
</pluginGroups>

Launch installation of WebLogic Server:

$mvn wls:install -DartifactLocation=/Users/<your_user_name>/Downloads/wls1212_dev.zip


Set JVM Settings for the WebLogic domain that will be created. This is necessary especially for 64bit JVMs. These settings are modifying the size of initial heap size, max heap size and, very important, perm gen space. You can do that by setting USER_MEM_ARGS environment variable before starting the server:

$export USER_MEM_ARGS="-Xms256m -Xmx=512m -XX:CompileThreshold=800 -XX:PermSize=128m -XX:MaxPermSize=256m"


Create domain:
$mvn wls:create-domain -DdomainHome=./Domains/domain1 -DmiddlewareHome=./Software/wls12120 -Duser=weblogic -Dpassword=welcome1


Start server:
$mvn wls:start-server  -DdomainHome=./Domains/domain1 -DmiddlewareHome=./Software/wls12120

You can stop the server by running:
$mvn wls:stop-server -DdomainHome=./Domains/domain1 -DmiddlewareHome=./Software/wls12120 -Duser=weblogic -Dpassword=welcome1


Let’s create now a JaveEE application and deploy it to the newly created domain. For the application we will use Maven arhchetypes. First the root POM (Project Object Model):

$mvn archetype:generate -Dversion=1.0-SNAPSHOT -DgroupId=com.flaviussana.demo -DartifactId=DemoApp -DarchetypeArtifactId=pom-root -DarchetypeGroupId=org.codehaus.mojo.archetypes

In the DemoApp directory created run to generate the EAR project:

$mvn archetype:generate -Dversion=1.0-SNAPSHOT -DgroupId=com.flaviussana.demo -DartifactId=DemoApp-EAR -DarchetypeArtifactId=ear-javaee6 -DarchetypeGroupId=org.codehaus.mojo.archetypes


Create an EJB mode and a WebApp module:

$mvn archetype:generate -Dversion=1.0-SNAPSHOT -DgroupId=com.flaviussana.demo -DartifactId=DemoApp-EJB -DarchetypeArtifactId=ejb-javaee6 -DarchetypeGroupId=org.codehaus.mojo.archetypes

$mvn archetype:generate -Dversion=1.0-SNAPSHOT -DgroupId=com.flaviussana.demo -DartifactId=DemoApp-WAR -DarchetypeArtifactId=webapp-javaee6 -DarchetypeGroupId=org.codehaus.mojo.archetypes

Set the dependencies in EAR pom.xml:
 <dependencies>
   <dependency>
     <groupId>${project.groupId}</groupId>
     <artifactId>${project.parent.artifactId}-EJB</artifactId>
     <version>${project.version}</version>
     <type>ejb</type>
   </dependency>
   <dependency>
     <groupId>${project.groupId}</groupId>
     <artifactId>${project.parent.artifactId}-WAR</artifactId>
     <version>${project.version}</version>
     <type>war</type>
   </dependency>
</dependencies>


Create a simple EJB Bean:HelloWorldEJB

package com.flaviussana.demo;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 * Session Bean implementation class HelloWorldEJB
 */
@Stateless
@LocalBean
public class HelloWorldEJB {

    /**
     * Default constructor.
     */
    public HelloWorldEJB() {
        // TODO Auto-generated constructor stub
    }
   
    public String sayHello(String name) {
       return "Hello " + name + "!";
    }

}

Build the application by running “mvn install” in parent project directory then deploy the application by running in DemoApp-EAR:

$mvn wls:deploy -Dname=DemoApp-EAR -DmiddlewareHome=/Users/<your_user_name>/tmp/Oracle/Software/wls12120 -DdomainHome=/Users/<your_user_name>/tmp/Oracle/Domains/domain1


Test the application by going to:



Another interesting feature of the WebLogic Maven plugin is the “wlst” goal that can be used to execute WLST (WebLogic Scripting Tool) scripts. For example you can run to create resources like DataSources or queues:


$mvn wls:wlst –Duser=weblogic –Dpassword=welcome1 –Dfilename=create-resource.py