Migrate from GlassFish to WildFly

In this blog I just want to post some of my thoughts about migrating from GlassFish to WildFly. The main issue here for me is to deploy an existing EAR currently running on GlassFish 3. This EAR contains EJBs, Web, and REST modules and includes TimerServices, Security Issues and custom servlets. So it’s not the easy hello-world example.

I am working on Linux Debian 7 and using Open JDK 1.7.0_55. The examples show the configuration for the Imixs Office Workflow Suite. Continue reading “Migrate from GlassFish to WildFly”

WordPress – try to lock out hackers

WordPress is really a nice software. I use it for websites and blogs. The problem is that WordPress is so common used in the net that hackers aggressive try to enter your site and inject eval php code. This is really terrible and I suffered some times ago because such a hackers attach against main own web sites.

After all I think two things can help to lock out hackers from wordpress.

1) Wordfence Plugin

The Wordfence Plugin is – in my eyes  – really good software. You should install this plugin to understand if your wordpress is under attack.

2) Protect your directories

The important thing running WordPress is to protect your directories. Never allow the apache server to write into the WordPress instalation directory. I know this is for most people an essential feature because this allows to easily update WordPress, install Plugins and Themes. But this also allows hackers to inject bad php code into your installation. And the most secure way to protect your wordpress installation is to disallow the apache server to write into the installation code.

For Linux servers this means:

In your apache web directory create a folder for your WordPress installation and reduce the directory access to a minimum which means only your own linux user account should be the owner and allowed to change content.

ls -l /var/www/
drwxr-xr-x 5 youraccount youraccount 4096 Apr 16 21:12 wordpress

As you can see the apache user (e.g. www-data) can only read but not change directories. Any changes on the wp-config.php or the installation of plugins or themes can still be made by direct ssh access (in this example) from the user ‘youraccount’.

The only exception could be the wp-content/uploads folder which need to be writable from apache when you try to upload an image.

There are a lot of additional tipps and tricks how to protect your WordPress. But I think protecting the WordPress installation from modification by the apache server is the best way.

Eclipse crashes in Debian Jessie

After some updates in my Debian/Jessie installation I run into a strange problem with Eclipse. When I start Eclipse first everything looks fine, but in the moment I use some type-ahead features or browsing classes or methods in a java-file Eclipse crashes without any error message. Maybe the problem is related to an update in libwebkitgtk-3.0.

After some searching I was finally able to fix the problem by adding the following line to my eclipse.ini:

-Dorg.eclipse.swt.browser.DefaultType=mozilla

See also this bug report:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=334466

‘evbug’ auf die Blacklist setzen

Ich hatte das Problem das mein kern.log file mit Meldungen dieser Art geflutet wurde:

Sep 27 18:07:48 r-ultrabook kernel: [ 380.012332] evbug: Event. Dev: input6, Type: 0, Code: 0, Value: 0
Sep 27 18:07:48 r-ultrabook kernel: [ 380.028334] evbug: Event. Dev: input6, Type: 2, Code: 1, Value: -1
Sep 27 18:07:48 r-ultrabook kernel: [ 380.028343] evbug: Event. Dev: input6, Type: 0, Code: 0, Value: 0
Sep 27 18:07:48 r-ultrabook kernel: [ 380.044419] evbug: Event. Dev: input6, Type: 2, Code: 1, Value: -1
Sep 27 18:07:48 r-ultrabook kernel: [ 380.044430] evbug: Event. Dev: input6, Type: 0, Code: 0, Value: 0

Diese Meldungen werden wohl vom Modul  ‘evbug’ erzeugt und dienen als Debug Information. Das Modul sollte im Normalfall eigentlicht im Kernel geladen werden.

Um nun das Modul abzuschalten kann man es auf die blacklist setzen.

Dazu habe ich die (bei mir noch nicht vorhandene) Datei /etc/modprobe.d/blacklist.conf erstellt und folgenden Inhalt eingetragen:

# This file lists those modules which we don't want to be loaded by
# alias expansion, usually so some other driver will be loaded for the
# device instead.
# evbug is a debug tool that should be loaded explicitly
blacklist evbug

Dies führt dazu das das Modul beim nächsten booten nicht mehr geladen wird und die Meldungen verschwinden.

Debian – Testing

In Debian werden Paket relativ selten aktualisiert und mit neueren Versionen ausgetauscht. Hier unterscheidet sich Debian deutlich von Ubuntu. Wen man dennoch ein wichtiges Update von einem Kernel benötigt kann man über die Backports diesen meist problemlos nach-installieren. Dies habe ich hier beschrieben.

Darüber hinaus gibt es aber auch die Möglichkeit über die DebianTesting releases neuere Paket zu nutzen. Ich beschreibe im Folgenden das grundsätzliche vorgehen.

Continue reading “Debian – Testing”

Debian – systemd

Debian Weezy verwendet in der aktuellen version immer noch den Init-Deamon System-V-init. Dieser kann durch den neueren deamon systemd ersetzt werden. Dieser erlaubt einen schnelleren  Bootvorgang, da beim booten mehrere dienste parallel gestartet werden können:

# apt-get update
# apt-get install systemd

 

Debian Installation

Hier folgen einige kurze Hilfestellungen zur Installation von Debian 7 (Wheezy)

Für die Installation von Debian wird die ‘Netzwerkinstallation‘ empfohlen. Es handelt sich dabei um ein ca. 200MB großes ISO Image welches von einem USB-Stick aus installiert werden kann. Sämtliche für die eigentliche Installation benötigten Komponenten werden werden später automatisch heruntergeladen. Continue reading “Debian Installation”

How to use a jquery dialog in jsf 2.0

Combining JSF 2.0 and jQuery / jQuery-UI is in my opinion the best choice to build modern web applications. Your JSF web application becomes much smaller as using one of the JSF component libraries. Also with jQuery you got a lot of flexibility designing your pages.

But things become interesting when you try to integrate a jQuery Dialog box with JSF 2.0. I am talking here about a Dialog Box which contains a JSF form with input elements to be submitted – independent from the current page flow. For example: you have a normal jsf form with input components and a link to open another form (in my case a user-profile dialog) also with data which can be submitted. It takes me some time to figure out the best way to manage this. But with JSF 2.0 and ajax support things are not so difficult.

So here is my Solution:

THE DIALOG FORM

I put my Dialog into a JSF faclet to separate all the dialog stuff in one xhtml element which can be included in the main pages. The interesting thing is here the JSF validation which is also supported. The dialog will not close if a validation error occurs. There for I check the #{facesContext.validationFailed} and save the state in a JavaScript variable. The ajax method ‘processCompleteEvent’ checks if a validation exception was thrown. In that case the dialog stays open, otherwise it will be closed after submit. The command button triggers a JSF 2.0 ajax request to avoid any changes on the main page behind the dialog.

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

	<script type="text/javascript">
		/*<![CDATA[*/
		$(document).ready(function() {
			// setup dialog
			$("#dialog-myprofile").dialog({
				resizable : false,
				width : 530,
				modal : true,
				autoOpen : false
			});
		});

		// auto close dialog and check validation... 
		var validationError=false;
		function processCompleteEvent(e) {
	          if (e.status == 'success') {
	        	if (!validationError) {
	        	 	$("#dialog-myprofile").dialog("close");
	       	 	}
	          }
	        }
		// open dialog
	 	function openMyProfile() {
			$("#dialog-myprofile").show();
			$("#dialog-myprofile").dialog("open");			
	    	}
		/*]]>*/
	</script>

	<div id="myprofile_view">
		<!-- Dialog Box -->
		<div id="dialog-myprofile" title="#{message['profile.title']}">
			<h:form id="dialog-myprofile-form">
				<ui:include src="/pages/error_message.xhtml" />
				<script>validationError=#{facesContext.validationFailed};</script>
				<h:inputText
					value="#{userController.workitem.item['txtusername']}"
					style="width: 260px;" />

				<!-- Save Action -->
				<h:commandButton actionListener="#{userController.doProcess}"
					 value="#{message.save}">					
					<f:ajax execute="@form" render="@form"
						onevent="processCompleteEvent">
					</f:ajax>
				</h:commandButton>
				<input type="button"
					onclick="$('#dialog-myprofile').dialog('close');"
					value="#{message.close}" />
			</h:form>
		</div>
	</div>
</ui:composition>

 

HOW TO OPEN THE DIALOG FROM THE MAIN PAGE

To open the Dialog from my main template I use a h:commandLink with an onclick event to open the jQuery dialog. See the following code snippet:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:c="http://java.sun.com/jsp/jstl/core"
	xmlns:f="http://java.sun.com/jsf/core"
<h:head>
.....
	<script type="text/javascript" src="../jquery-ui-1.10.0.custom.min.js"></script>
	<script type="text/javascript" src="../jquery-1.9.0.js"></script>
.....
</h:head>
<h:body>
   <f:view id="main_view">
.....
	<h:form id="main_form">
...
		<h:commandLink onclick="openMyProfile();">
			<h:outputText id="profile_userlink"
				value="#{message.open_profile}" />
			<f:ajax render=":dialog-myprofile-form" />
		</h:commandLink> 
	</h:form>
...
	<ui:include src="/pages/profile/myprofile_dialog.xhtml" />
   </f:view>
</h:body>
</html>

The trick here is again the ajax integration of the commandLink.

<f:ajax render=":dialog-myprofile-form" />

The f:ajax tag will rerender the dialog form. This is an important part of this solution, because you need to reset the old data of the dialog when the dialog is reopened. For example when the user opens the dialog, types in some data and close the dialog without submitting the data. In this scenario it is necessary to reload the dialog form data. This is done by the ajax render command.

So that’s it. I hope this will help someone.