Aplicação Java Spring trabalhando em um sistema, morrendo em um quase idêntico

1

Introdução

Estou executando um aplicativo Java Spring de terceiros no RHEL, que se recusa a executar em máquinas clonadas de um determinado modelo RHEL 6.5. Ele simplesmente morre na inicialização com uma exceção falsa (veja abaixo).

As versões do software em questão:

RHEL 6.5 
Tomcat 7.0.41 (rolled our own, almost vanilla)
Spring 3.1.4.RELEASE (shipped with application)
java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
SELinux Status: Permissive

Eu mudei os nomes das classes para proteger os inocentes, eu duvido que o software atual seja significativo.

Copiando o tomcat e o diretório da instância da caixa quebrada para a minha área de trabalho do Linux como está e apenas o executando funciona .

Enquanto a configuração que estou descrevendo é considerada um ambiente de teste, experimentei esse problema em nossa caixa de produtos, que tive que instalar de forma limpa do DVD para fazer com que o problema desaparecesse. A configuração mencionada é aquela em que reencontrei o problema durante o desenvolvimento do módulo de bonecos e consegui conservar e reproduzir este problema.

Configuração

Os DBs usados pelo aplicativo são mantidos locais (h2) e são configurados no server.xml do tomcat.

2 modelos RHEL 6.5, ambos configurados para o vagrant.

  • Modelo quebrado: instalação mínima diretamente do DVD. Etapas de configuração manual realizadas para configurar o modelo para autosigning de bonecos e etapas vagas de lista de verificação de modelos.
  • Modelo de trabalho: configuração mínima do Kickstart a partir do DVD, personalização do Vagrant / VirtualBox via Shellscripts (feito com packer )

1 caixa de cada modelo é configurada via vagrant , ambas aplicam exatamente o mesmo catálogo de fantoches do nosso mestre de marionetes.

Problema

O aplicativo morre na inicialização no modelo quebrado com esta exceção:

[17.09.2014 19:34:00,290] ERROR                  ContextLoader ( 318) | Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'soaFormFolderService' defined in file [/var/www/apps/content/tomcat/afs-forms/webapps/formserver/WEB-INF/classes/com/aforms2web/afs/formserver/service/
SoaFormFolderService.class]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:943)
[...]
Caused by: java.lang.ExceptionInInitializerError
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:990)
        ... 26 more
Caused by: java.lang.NullPointerException
        at com.corp.Application.getMessageSource(Application.java:234)
        at com.corp.FooService.<clinit>(FooService.java:23)
        ... 33 more

O código em questão é assim:

com.corp.FooService

@Service
public class FooService
{
  protected static MessageSource messageSource = Application.getInstance().getMessageSource();

com.corp.Application

public class Application
{
  private static Application instance = null;

  public static Application getInstance()
  {
    if (instance == null) {
      instance = new Application();
    }
    return instance;
  }
  [...]
  public MessageSource getMessageSource()
  {
    return ((MessageSource)this.applicationContext.getBean("messageSource", MessageSource.class));
  }

Funciona sem problemas na segunda caixa.

O que poderia causar isso?

Estado de investigação

estilo de comparação yum list installed output:

--- pkgs.broken
+++ pkgs       
-b43-openfwwf.noarch-5.2-4.el6
-dkms.noarch-2.2.0.3-25.el6
-efibootmgr.x86_64-0.5.4-11.el6
+gcc-c++.x86_64-4.4.7-4.el6
-kernel-devel.x86_64-2.6.32-431.23.3.el6
+kernel-devel.x86_64-2.6.32-431.el6
-kernel.x86_64-2.6.32-431.23.3.el6
+libstdc++-devel.x86_64-4.4.7-4.el6
-puppet.noarch-3.7.0-1.el6
+puppet.noarch-3.7.1-1.el6

Eu comparei os sistemas com o rsync (do funcional):

rsync \
   --checksum -ani \
   --exclude log \
   --exclude /vagrant \
   --exclude /root \
   --exclude /proc \
   --exclude /sys \
   --exclude /selinux \
   --exclude /dev \
   --exclude /lib/modules \
   --exclude /usr/src \
   --exclude /boot \
   --delete / \
   root@broken:/ \
| grep -ve "^." \
| grep -vEie "puppet|vbox|virtualbox|var/lib/yum|/var/run|sss|var/lib/rpm|logs" 

Veja os resultados aqui: link

Não consigo descobrir qual das alterações que surgiram pode ter um impacto em um aplicativo Java Spring.

edit : vislumbre o código incorreto adicionado.

    
por fuero 18.09.2014 / 01:13

0 respostas