Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts

2015/02/10

Openshift shows error message

I had some problems with Openshift. Everytime I opened Openshift login page, error message was shown:
We appear to be having technical difficulties

Solution:

Remove all cookies for redhat.com domain.
▼ Click here to say thanks ▼

2013/10/02

Generic entity converter in JSF 2 and EE 6

In this post I would like to show you how you can create universal entity converter for most of your entities. Steps to do:

  1. Create EntityConverter class which implements javax.faces.convert.Converter interface
  2. Override getAsObject() and getAsString() methods
How this converter works:
  • If you need to convert entity to String, converter will create it from class canonical name and from value of id field. This field is annotated by @Id in your entity class. 
  • In case of other direction (convert to Object), it will split created string to class name and id value and try to load object from persistence storage.
Here is example of this converter:



import java.lang.reflect.Field;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.Id;

@Named
public class EntityConverter implements Converter {

 @Inject
 private EntityManager em;

 public Object getAsObject(FacesContext fc, UIComponent component, String string) {
  try {
   String[] split = string.split(":");
   return em.find(Class.forName(split[0]), Long.valueOf(split[1]));
  } catch (NumberFormatException | ClassNotFoundException e) {
   return null;
  }
 }

 public String getAsString(FacesContext fc, UIComponent component, Object object) {
  try {
   Class<? extends Object> clazz = object.getClass();
   for (Field f : clazz.getDeclaredFields()) {
    if (f.isAnnotationPresent(Id.class)) {
     f.setAccessible(true);
     Long id = (Long) f.get(object);
     return clazz.getCanonicalName() + ":" + id.toString();
    }
   }
  } catch (IllegalArgumentException | IllegalAccessException e) {
  }
  return null;
 }
}
And how to uset it? Not so big issue. In this example we want to show all user roles and user can choose from them:
<h:selectmanycheckbox converter="#{entityConverter}" value="#{bean.roles}">
  <f:selectitems itemlabel="#{role.rolename]}" itemvalue="#{role}" 
    value="#{bean.allRoles}" var="role">
  </f:selectitems>
</h:selectmanycheckbox>
If you have different Id types in different classes you can use converter like this. It will call valueOf method on your Id field type class. For example you have field userId which is Integer type, it will call Integer.valueOf(valueFromPage). This way you can load entity from entityManager because you have type of your entity and id of this entity with correct type.

@Named
public class EntityConverter implements Converter {

 @Inject
 private EntityManager em;

 @Inject
 Logger log;

 public Object getAsObject(FacesContext fc, UIComponent component,
   String string) {
  try {
   String[] split = string.split(":");
   Class clazz = Class.forName(split[0]);
   for (Field f : clazz.getDeclaredFields()) {
    if (f.isAnnotationPresent(Id.class)) {
     Method valueOfMethod = f.getType().getMethod("valueOf",
       String.class);
     return em.find(clazz, valueOfMethod.invoke(null, split[1]));
    }
   }
  } catch (ClassNotFoundException | NoSuchMethodException
    | SecurityException | IllegalAccessException
    | IllegalArgumentException | InvocationTargetException e) {
   log.warn("Cannot convert", e);
  }
  return null;
 }

 public String getAsString(FacesContext fc, UIComponent component,
   Object object) {
  try {
   Class clazz = object.getClass();
   for (Field f : clazz.getDeclaredFields()) {
    if (f.isAnnotationPresent(Id.class)) {
     f.setAccessible(true);
     return clazz.getCanonicalName() + ":" + f.get(object);
    }
   }
  } catch (IllegalArgumentException | IllegalAccessException e) {
   log.warn("Cannot convert", e);
  }
  return null;
 }
▼ Click here to say thanks ▼

2013/08/14

Cannot Start Android Studio - No JVM installation found

Do you have problem to start Android Studio on Windows 7 (8) 64 and error message is something like:

   No JVM installation found. Please install a 64-bit JDK.

If yes, reason can be in Java.

In my case:
  • Windows 7 64
  • Java 1.7.0_17-b02 (32 bit)
If I try to start Android studio, following alert occure: 


Reason?

Start icon of Android Studio has link to studio64.exe file. But my Java is not 64 bit.

Solution?

Replace studio64.exe in link by studio.exe. Thats all. ;)
▼ Click here to say thanks ▼