Desabilitar autenticação no JBoss Seam

Povo, preciso de uma luz. Já quebrei demais a cabeça com isso e o projeto aqui no trabalho tá parado por conta desse problema.

Estamos no início de um projeto utilizando o framework JotaChefe Costura. Geramos todo o esqueleto do projeto com o seam-gen (essa cópia mal feita do scaffold do Rails…), e mapeamos algumas entidades do banco (que é legado) para atender algumas Histórias de Usuário que estamos implementando.

Através do SeamTest, consegui desenvolver as funcionalidades de CRUD, e os testes mostram que de fato as funcionalidades de cadastro, recuperação etc. estão funcionando.

Porém, quando vou fazer um “teste de aceitação” e rodar a aplicação no navegador, ao tentar cadastrar uma nova entidade o Costura joga na minha cara uma NotLoggedInException. A questão é que essa funcionalidade não será implementada agora, pois há algumas regras internas do cliente (um banco público) que precisam ser atendidas. Por uma questão de entregar algumas funcionalidades para o cliente, é preciso que essa autenticação seja momentaneamente desativada.

O gande lance é: já tentei de todas as maneiras desabilitar a autenticação do Costura, mas nem com reza forte consegui!

No components.xml, já tentei comentar ou remover as linhas que tratam da autenticação, e nada…

<!--
   <drools:rule-base name="securityRules">
      <drools:rule-files>
         <value>/security.drl</value>
      </drools:rule-files>
   </drools:rule-base>

   <security:rule-based-permission-resolver security-rules="#{securityRules}"/>

   <security:identity authenticate-method="#{authenticator.authenticate}" remember-me="true"/>

   <event type="org.jboss.seam.security.notLoggedIn">
      <action execute="#{redirect.captureCurrentView}"/>
   </event>
   <event type="org.jboss.seam.security.loginSuccessful">
      <action execute="#{redirect.returnToCapturedView}"/>
   </event>
-->

Na classe responsável pela lógica de autenticação, já tentei fazê-la retornar apenas true:

@Name("authenticator")
public class Authenticator {

	@In
	Identity identity;
	
	@In
	Credentials credentials;

	public boolean authenticate() {

		return true;
		
	}
}

E mesmo assim, a JVM ri da minha cara.

Oh, e agora, quem poderá me ajudar?!

[b]Grande, eu já cadastrei entidades no JBoss-Seam e manipulei as mesmas sem autenticação. Acho que você está fazendo algum procedimento que requer autenticação.

Dê mais detalhes de como você está cadastrando as entidades!

Abraço.[/b]

Bom, não sei exatamente que mais informações posso passar, pois o projeto foi gerado diretamente pelo seam-gen, sem “firulas” adicionais.

Mas de qualquer jeito, vou dar um exemplo.

Tenho entidades parecidas com essa aqui:

@Entity
@Name("xuxu")
@Table(name = "ptstb003_xuxu", schema = "public")
public class Xuxu implements Serializable {

	private static final long serialVersionUID = -5198249015303050389L;

	private Integer idXuxu;

        private String beleza;

        // o resto dos atributos...

        // construtores, hashCode e equals...

        @Id
	@SequenceGenerator(
			name = "xuxuSeq", 
			sequenceName = "public.ptstb012_xuxu_seq", 
			allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "xuxuSeq")
	@Column(name = "nu_xuxu", unique = true, nullable = false)
	public Integer getIdXuxu() {
		return this.idXuxu;
	}

	public void setIdXuxu(final Integer idXuxu) {
		this.idXuxu = idXuxu;
	}

        // o resto das propriedades

}

Que são referenciadas por xhtmls como esse aqui:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:s="http://jboss.com/products/seam/taglib"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:rich="http://richfaces.org/rich"
    template="layout/template.xhtml">

<ui:define name="body">

    <rich:panel>
        <f:facet name="header">Xuxu Details</f:facet>

        <s:decorate id="idXuxu" template="layout/display.xhtml">
            <ui:define name="label">Id xuxu</ui:define>
            <h:outputText value="#{xuxuHome.instance.idXuxu}"/>
        </s:decorate>

        <s:decorate id="beleza" template="layout/display.xhtml">
            <ui:define name="label">Beleza</ui:define>
            <h:outputText value="#{xuxuHome.instance.beleza}"/>
        </s:decorate>

        <div style="clear:both"/>

    </rich:panel>

    <div class="actionButtons">

        <s:button view="/XuxuEdit.xhtml"
                    id="edit"
                 value="Editar"/>

        <s:button view="/#{empty xuxuFrom ? 'XuxuList' : xuxuFrom}.xhtml"
                    id="done"
                 value="Sair"/>

    </div>

</ui:define>

</ui:composition>

Cujos controles são como esse aqui:

@Name("xuxuHome")
public class XuxuHome extends EntityHome<Xuxu> {

	private static final long serialVersionUID = 8536821405547876618L;
	
	@In(create = true)
	XuxuHome xuxuHome;
	
	
	public void setXuxuIdXuxu(Integer id) {
		setId(id);
	}

	public Integer getXuxuIdXuxu() {
		return (Integer) getId();
	}

	@Override
	protected Xuxu createInstance() {
		return new Xuxu();
	}

	public void load() {
		if (isIdDefined()) {
			wire();
		}
	}

	public void wire() {
		getInstance();
	}

	public boolean isWired() {
		return true;
	}

	public Xuxu getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}
		
}

De qualquer modo, é como eu falei, usando testes as funcionalidades de CRUD estão funcionando, há o cadastro, a recuperação dos dados etc.

É só na tela que o Costura resolve inventar esse lance de autenticação.

[b]Ok.

Brother, o seu componente ( xuxuHome ) está no diretório src/hot ou src/main do projeto?

Se estiver no src/hot crie o mesmo sem anotação @Name. Crie seu componente no faces-config.xml. Isso no src/main.

Abraço.[/b]

alberthy, valeu pela atenção, cara.

Mas não entendi muito bem… não existem esses diretórios, src/hot nem src/main. Esses controles e as entidades estão no projeto EJB, sob a pasta ejbModule.

De qualquer forma, tentei retirar a anotação @Name das entidades, e ainda assim não funcionou… :cry:

Será que você teria mais alguma idéia?