Windchill: Using custom actions in profiles

 IT, Java  Kommentare deaktiviert für Windchill: Using custom actions in profiles
Jan 272015
 

Windchills profile mechanism allows the administrator to show or hide UI components such as attributes and actions. Profiles can be defined on site or organisation level. The Product or Library manager is able to override the profiles from the team page on the product / library by using the Configure Actions for Roles mechanism.

The custom actions (defined in Windchill\codebase\config\actions\customActions.xml) are not directly visible when creating or changing a profile. To make them visible (and selectable) inside the profiles, you have to add them to the config file for profiles (Windchill\codebase\roleaccessprefs.xml)

Example customActions.xml:

<listofactions>
	<objecttype name="object" class="java.lang.Object" resourceBundle="com.pbo.resource.NavigationRB">
		<action name="testPhilipp">
			<command url="netmarkets/jsp/test.jsp" windowType="popup"/>
		</action>
	</objecttype>
</listofactions>

To make the action „testPhilipp“ available in the profiles, you have to add an <uic> element in the roleaccessprefs.xml file:

<product labelId="productLabel">
	 <!-- Adding the action "testPhilipp" to the product level -->
	  <uic name="testPhilipp" order="1010" enabled="true" defaultAll="false" defaultManager="true" 
	          defaultGuest="false" managerEnabled="true" guestEnabled="false"/>

The value of the attribte name in the action-tag must be equal to the name attribute in the uic tag. It is also possible to add a uicomponent attribute when defining your custom action and use its value to reference the action in the roleaccessprefs.xml:

<listofactions>
	<objecttype name="object" class="java.lang.Object" resourceBundle="com.pbo.resource.NavigationRB">
		<action name="testPhilipp" uicomponent="myUicName">
			<command url="netmarkets/jsp/test.jsp" windowType="popup"/>
		</action>
	</objecttype>
</listofactions>

roleaccessprefs.xml:

<product labelId="productLabel">
	 <!-- Adding the action "testPhilipp" to the product level -->
	  <uic name="myUicName" order="1010" enabled="true" defaultAll="false" defaultManager="true" 
	          defaultGuest="false" managerEnabled="true" guestEnabled="false"/>

 

Now you can restart Windchill and you will see your action „testPhilipp“ when changing or creating a profile. To show a more detailed (and maybe localized) name you can use ResourceBundles. Add an entry to the roleAccessResource.rbInfo file.

InfoEngine for Beginners: Setup Tomcat and write your first jsp-task

 IT  Kommentare deaktiviert für InfoEngine for Beginners: Setup Tomcat and write your first jsp-task
Dez 072014
 

There are two different types of IE tasks. The first type is based on JSP technology (file-ending *.jsp). This enables you to run that task in a browser. The second type is a „pure“ IE task (file-ending *.xml).

In this small introduction to InfoEngine I will use the first one (JSP). Before we start with the development of an IE task, we should setup Tomcat to run in DEV-Mode. Run the following command in a Windchill shell (see Windchill Instal Config Guide):

cd Windchill/tomcat
ant -f config.xml configureJspEngine -Dmode=dev

To switch back to production setup, just replace mode=dev with mode=prod. Then (re-) start your Windchill Server.

Open the IE Taskeditor (from Windchill-Shell):

// on Windows:
taskeditor\bin\modeler.bat

// or on unix:
taskeditor\bin\modeler

Create a new JSP. Store them inside codebase or inside a subfolder of codebase:

Create new JSP Task

Create new JSP Task

Add the following lines to your JSP:

<%@ page language="java" session="false" %>

<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core" prefix="ie" %>

<html>
    <body>
    <h1>
       List of WTParts with Name : klotz_001.prt
    </h1>

    <!-- Get all WTParts with name=klotz_001.prt -->
    <ie:webject name="Query-Objects" type="OBJ">
        <ie:param name="INSTANCE" data="net.mymhp.pboss.Windchill"/>
        <ie:param name="PAGE_COUNT" data="10"/>
        <ie:param name="TYPE" data="wt.part.WTPart"/>
        <ie:param name="WHERE" data="name=klotz_001.prt"/>
        <!-- The "Return-Group" is named to outputGroup -->
        <ie:param name="GROUP_OUT" data="outputGroup"/>
    </ie:webject>

    <!-- Display the queried group from above webject (WTParts) in a HTML Table -->
    <ie:webject name="Display-Table" type="DSP">
        <ie:param name="GROUP_IN" data="outputGroup"/>
    </ie:webject>

    </body>
</html>

Your Result should look like this:

IE Task Source

IE Task Source

At the bottom there is a button named „Execute“. With this button you can test your task, but you will probably get the following error:

Error JSP Task

Error JSP Task

The root-cause is, that this request to Tomcat was not authenticated. Add the blue marked part to your URL and re-execute the script:

protocolAuth

protocolAuth

The task has been executed successfully.

Nagios für Beginner

 IT  Kommentare deaktiviert für Nagios für Beginner
Okt 092014
 

Dieser Artikel soll einen schnellen Überblick über Nagios, sowie einigen verwandten Themen wie NRPE, NSClient++, geben.

Nagios-Server

Nagios ist ein für Linux erhältliches Paket welches über verschiedene Plugins verschiedene Messgrößen auf anderen System abfragen kann. Diese Messgrößen können z.B. Antwortzeiten, Verfügbarkeit, Speicher-Auslastung, CPU-Auslastung, Menge an Prozessen und vieles mehr sein. Nagios ist der „Server“, welcher die Abfragen durchführt und auf einer Website anzeigt. Die Grundlagen der Config basieren hierbei auf 4 Begriffen:

Host (define host)

Im Host-Abschnitt wird ein „Rechner“ bzw. Server festgelegt, der überwacht werden soll. Dazu gehören Informationen wie: IP, Hostname, ein Template und die Zuordnung zu Gruppen (alle Server einer Gruppe werden dann gemeinsam auf der Weboberfläche von Nagios angezeigt):

define host{
        use             generic-host      ; use the generic-host template
        host_name       philipp-boss.de
        alias           philipp-boss.de   ; you can use the alias name in your service-config
        address         87.98.247.24
        hostgroups      http-servers     ; add this server to the group 'http-servers'
}

Command (define command)

Eine Command-Direktive definiert eine Abfrage. Allerdings nicht bezogen auf einen Host, sondern nur die Abfrage selbst. Beispielsweise, welches Script aufgerufen wird und welche Parameter mitgegeben werden.

define command{
	name            check_activemq		; frei definierbarer Name, optional
	command_name    check_activemq		; frei definierbarer name, eindeutig, wird bei der service-definition benutzt
	command_line    /usr/lib/nagios/plugins/activemq_watch $ARG! $ARG2  ;Name/Pfad zum executable (plugins-directry)
}

Service (define service)

In der Service-Direktive wird ein Command einem Host zugeordnet. Damit weiß Nagios, welche Abfragen / Messungen / Prüfungen es auf welchen Hosts machen muss. Zusätzlich wird hier das Intervall angegeben sowie weitere Abfrage-Optionen:

define service{
	use                     generic-service		; nutze das generic-service-template
	host_name               philipp-boss.de		; referenz zum oben definierten Host
	service_description     Check if HTTP is running	; Beschreibung, welche auf der Weboberfläche erscheint
	check_command           check_http			; name der command-Direktive die ausgeführt werden soll
	max_check_attempts		5			
	check_interval			5			; prüfe alle 5 min
	retry_interval			1			; wenn Prüfung fehlschlägt, prüfe nach 1 min nochmals
	check_period			24x7		; durchgehend prüfen
}

Plugin

Ein Plugin ist letztlich meist ein executable, welches im libexec oder plugins-directory abgelegt wird. Dieses wird dann in der Command-Direktive angegeben und somit dem Nagios bekannt gemacht. Anschließend kann es dann in einer Service-Direktive verwendet werden.

 

NRPE

NRPE steht für Nagios Remote Excecution Pluugin. Dieses Plugin ermöglicht es Nagios, Befehle und Scripte auf den zu überwachenden Hosts auszuführen. Es gibt zwei „Arten“ von Abfragen. Die einfache Art benötigt kein NRPE Plugin, zu dieser Art zählt zum Beispiel der Ping (ein Ping kann direkt vom Nagios-Server auf einen zu überwachenden Server gesendet werden). Die zweite Art benötigt das Plugin. Dazu gehören zum Beispiel Abfragen, die die CPU- , HDD- oder RAM-Auslastung prüfen. Dazu wird der NRPE-Dienst auf dem zu überwachenden Rechner gestartet. Dieser wartet dann auf Anfragen von Nagios, führt diese aus und liefert an Nagios die entsprechende Antwort zurück. Unter Linux/Unix gibt es dafür das NRPE-Plugin (läuft dann als daemon im Hintergrund), für Windows gibt es verschiedene Clients, unter anderem den NSClient++.

Eine gute Erklärung dazu liefert auch der Aufruf ./check_nrpe ohne Parameter.

Wichtig: Der Nagios-Server selbst braucht den NRPE-Client (der als Daemon/Service läuft) NICHT. Der nagios-Server benötigt lediglich das NRPE-Plugin, welches benutz wird, um die NRPE-Anfragen an den zu überwachenden Host zu senden (dieser braucht dann wiederum den NRPE-Daemon bzw. den NSClient++).

Hilfreiche NRPE-Befehle

Um zu prüfen, ob der Host generell auf NRPE-Anfragen reagiert, kann folgender Befehl genutzt werden:

./check_nrpe -H <host>

Um einen Befehl oder ein Script auf dem Host auszuführen:

./check_nrpe -H <host> -c <command> -a <arguments>

Nagios und Virtuelle Umgebungen

Bei meinen ersten Tests lief mein Nagios-Server auf einer virtuellen Maschine. Diese war mit meinem Netzwerk verbunden, soweit hat alles funktioniert. Allerdings habe ich bei allen NRPE-Anfragen einen SSL-Handshake Error oder ein Connection Refused erhalten. Nach langer Suche war klar: bei NAT-Verbindungen kann SSL nicht funktionieren (zumindest bei mir nicht). Nachdem ich eine Verbindung via VPN zu meinem Netzwerk hergestellt hatte, funktionierten die Abfragen. Was mich sehr verwundert hatte war die Eigenschaft, dass der check_nrpe Befehl trotz des Paramters -n nicht auf den SSL Handshake verzichtet hatte. Ob das ein Bug auf meinem System oder innerhalb des Pakets ist, weiß ich nicht.

impress.js – Slideshow based on html and css

 IT  Kommentare deaktiviert für impress.js – Slideshow based on html and css
Aug 132014
 

A few months ago, I found a very cool project for creating presentations that you can „run“ in modern browsers. Some days ago, I stumbled again over this project and I decided to write a short article about it.

You can find the project impress.js here: http://bartaz.github.io/impress.js/#/bored

Impress.js is similar to the idea of prezi, where you can build and give your presentations in a browser. impress.js is based on html, css and javascript. There is no „typical“ documentation, but you can find all the necessary information inside the very good source code documentations and comments. You can place your slides on a huge canvas, moving the „camera“ on the single slides, zoom in and zoom out, sliding in various directions and also doing some transitions. See the link above for a short demonstration of the power of impress.js

For sure, this project will never replace the standard solutions for building presentations (like Powerpoint) because you need at least some basic html and css skills. But for text-based presentations I think it’s a very cool tool which will impress your audience.

Javadoc examples: Comments and usage in Eclipse

 IT, Java  Kommentare deaktiviert für Javadoc examples: Comments and usage in Eclipse
Jul 052014
 

Javadoc for java Packages

It is also possible to add a comment / short description of a package. This can be done using a file called package-info.jave inside the package. When using eclipse, you can check the option „Create package-info.java“:

Create package-info.java

Create package-info.java

Change the default comment to something like this. Important: Use only one sentence and don’t forget the point at the end.

Change comment to something like this

Change comment to something like this

This will result in:

Package description

Package description

 

Using Javadoc for classes

To describe classes, you should start with a single sentence at the beginning. This sentence is used on the overview page of a package where all classes are listed (with a short description which is this sentence). Dont forget the point at the end.

The next paragraph contains a more detailed description that will be shown on the detail page of the class. Here you can use some html tags. In this case I used a list. After that you can add some javadoc parameter.

package com.pbo.Game;

/**
 * This Class represents the main class of the F1 Betting Game.
 * <p>
 * This Class handles all the database connection stuff, it creates the GUI
 * and it contains all the rules. See method: displayRules.
 * <br>
 * It also Starts the database connection, create instances of users and rankings and so on.
 * <ul>
 * 		<li>You can also</li>
 * 		<li>use a list</li>
 * 		<li>here in the description of the class</li>
 * </ul>
 * 
 * @author philipp
 * @version 0.1
 */
public class GameStarter {
    // your class here
}

Result of that comment:

Package Overview shows all classes with a short description

Package Overview shows all classes with a short description

 

Overview of one class

Overview of one class

 

Javadoc for methods

To describe methods you should begin with a short description in a single sentence. This sentence will be displayed in the method-overview of the class. After that sentence you should describe your method more detailed. This will be the description of the method. There you can use html-tags like linebreak <br> , lists <ul> , <li>, and more. You can create paragraphs by using the <p> tag. See the example below:

/**
 * This method displays all the rules for the game.
 * <p>
 * Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
 * eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
 * voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
 * clita kasd. <br>
 * Nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
 * sed diam voluptua.
 * <p>
 * Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
 * eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
 * voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
 * clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit.
 * <p>
 * Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
 * eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
 * voluptua dolor sit amet.
 * <ul>
 * <li>Rule 1 ...</li>
 * <li>Rule 2 ...</li>
 * <li>Rule 3 ...</li>
 * </ul>
 * 
 * @param userName
 *            The username of the Player
 * 
 * @param difficulty
 *            The difficulty of the game, from 1 to 10, where 1 is simple
 *            and 10 means strong
 * @return the status code after the game has finished. 1=won, 2=lost
 */
public int displayRules(String userName, int difficulty) {
	// your code goes here
	return 2;
}

Results in:

Javadoc Method Overview

Javadoc Method Overview

and:

Javadoc Method Details

Javadoc Method Details