log4j:ERROR A org.apache.log4j (FileAppender) object is not assignable to a org.apache.log4j (Appender) variable

Problem:
When deploying an ear file including log4j.jar into Glassfish3.x, following Exception is thrown:

Solution:
Add log4j.jar to Glassfish lib, e.g. /domains/mydomain/lib/ext or /glassfish/lib and remove it from ear.

Continue reading “log4j:ERROR A org.apache.log4j (FileAppender) object is not assignable to a org.apache.log4j (Appender) variable”

Hibernate Search and Glassfish

Problem:
Using Hibernate Search in combination with Glassfish throws following Exception:

Solution:
Add an additional

to your persitence.xml in order to use Hibernate JPA for Persistence Management.

Continue reading “Hibernate Search and Glassfish”

Change default URL for PostfixAdmin

Problem:
PostfixAdmin per default is reachable via yourhost.address/postfixadmin. This is certainly not optimal in terms of security.

Solution:
Edit /etc/postfixadmin/apache.conf
from

to something like
After that, reload apache configuration.

Message-Driven Beans, Message not send / received

Problem:
When sending a message via JMS (transactions enabled) this message is not received by other MessageListener.

Solution:
Add an additional session.commit(); before closing the session.

Continue reading “Message-Driven Beans, Message not send / received”

NoClassDefFoundError while deploying EAR

  • Problem:
    When deploying an EAR (enterprise archive file) to an application server like JBOSS,
    java.lang.NoClassDefFoundError
    is thrown.
  • Solution:
    Fix your EAR package structure.

    ear-package-structure
    wrong
    ear-package-structure.2
    right
    javaee.module.dependencies
    In Eclipse, go to EAR-Project properties, select "Java EE Module Dependencies" and toggle "In Lib Dir" for your shared Java Project
  • Further information:

    • All projects/files have been created with Eclipse
    • application.ear: Exported “Enterprise Application Project”
    • app-ejb.jar: Exported “Enterprise Java Beans Project”
    • app-web.war: Exported “Dynamic Web Project”
    • app-shared.jar: Exported “Java Project”, that contains classes that are used by more than one of the sub-projects. Can also be a third party jar-File with library classes.
    • Exception occurs, since app-web.war or app-ejb.jar may be deployed just before app-shared.jar has been deployed. A workaround for that would be to first deploy app-shared.jar separately and remove it from your enterprise application compilation.

CSS styles ignored

  • Problem:
    JSF page layout defined in a CSS-file is ignored when using PrettyFaces.
  • Solution:
    Fix link to CSS file in non-working JSF’s either by using the relative path, or by providing an absolute path.
  • Further information:
    PrettyFaces page navigation breaks up link to CSS file when page navigation goes to deeper directory levels
    (www.my-domain.net/home/page/entry/1).
    That is because URL’s generated by PrettyFaces do not represent real folder structure on server:
    A multi-level URL like “www.my-domain.net/home/page/entry/1” does not actually refer to the folder structure “/home/page/entry/1”.
  • Code snippets:
    “Normal” link to CSS in a JSF:

    <link href=”css/main.css” rel=”stylesheet” type=”text/css” />

    “Fixed” link to find CSS one level above current (e.g. if page URL is like www.my-domain.net/page/1):

    <link href=”../css/main.css” rel=”stylesheet” type=”text/css” />

EJB ClassCastException

  • Problem:
    [Ljava.lang.Object; cannot be cast to x.y.z.beanEJB: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to x.y.z.beanEJB
  • Solution:
    Add a “SELECT” statement to your (named) query.
    e.g. change :

    FROM beanEJB e
    INNER JOIN e.tags AS t
    WHERE t LIKE :ttt

    to

    SELECT e FROM beanEJB e
    INNER JOIN e.tags AS t
    WHERE t.string LIKE :ttt

  • Further information:
    A (named) query may return more than one distinct Object. An additional SELECT clause will specify the return type.
  • Code snippets:
    • </named-query>
      <named-query name=”namedQuery”>
      <query>
      <![CDATA[SELECT e FROM beanEJB e
      INNER JOIN e.tags AS t
      WHERE t LIKE :ttt]]>
      </query>
      </named-query>

    • Query q = em.createNamedQuery(“namedQuery”);
      q.setParameter(“ttt”, s);
      Log.info(q.getResultList());