[Resolvido] Não consigo implantar aplicativo corporativo!

Olá pessoal,

criei um projeto aplicativo corporativo no NetBeans, mas quando vou implantar dá erro, por causa do módulo web. Quando eu vou implantar separadamente os módulos, primeiro o EJB não tenho problemas, tanto que é criada as tabelas no banco, mas quando vou implantar o módulo web sempre tenho problemas. A linha que ele indica do build-impl.xml:284 leva até isso aqui <nbdeploy clientModuleUri="${client.module.uri}" clientUrlPart="${client.urlPart}" debugmode=“false” forceRedeploy="${forceRedeploy}"/>

Alguém aí sabe como posso resolver?

Esse é o erro

deploy?DEFAULT=D:\nb\NetBeans\POD\LocadoraApp\dist\gfdeploy\LocadoraApp&name=LocadoraApp&force=true falhou em GlassFish Server 3.x 
 Erro durante a implementação: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.NullPointerException. Consulte o server.log para obter mais detalhes
D:\nb\NetBeans\POD\LocadoraApp\nbproject\build-impl.xml:284: 
O módulo não foi implementado.
	at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:187)
	at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:106)
	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
	at sun.reflect.GeneratedMethodAccessor145.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
	at org.apache.tools.ant.Task.perform(Task.java:348)
	at org.apache.tools.ant.Target.execute(Target.java:390)
	at org.apache.tools.ant.Target.performTasks(Target.java:411)
	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
	at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
	at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
	at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:284)
	at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:539)
	at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:154)

Anderson, consulta o server.log do Glassfish…

lá pode ter exatamente o que falhou… enfim…

olá adriano, já tentei ver esse arquivo, apartir do momento em que fui implantar, mas ainda não consegui identificar o problema

Ae galera, preciso da ajuda de vcs,

descobri qual é o problema, porém não sei como resolver. Passei todo o código para o Eclipse. O erro é por causa do JNDI que não tá na aplicação web

GRAVE: Exception while loading the app : EJB Container initialization error
java.lang.RuntimeException: Error while binding JNDI name bean/locadora for EJB : ServicosLocadoraBean

Eu implementei uma aplicação EJB, e um cliente, pra rodar via console. No main do cliente tem esse trecho de código aqui pra acessar o EJB

InitialContext ctx = new InitialContext();

DepartamentoRemote bean = (DepartamentoRemote) ctx.lookup("bean/departamento");

Agora a minha dúvida é, como devo declarar esse JNDI numa aplicação Web, já que ela não tem um main? Devo colocar no xml? No web-xml ou no faces-config? Como faço isso?

Jovem,

Este erro ocorre devido a ausência do JNDI.

Você pode configurar o JNDI desta forma:

	private void init() throws NamingException {

		Hashtable<Object, String> prop = new Hashtable<Object, String>();
		prop.put(Context.INITIAL_CONTEXT_FACTORY,
				"org.jnp.interfaces.NamingContextFactory");		
		prop.put(InitialContext.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");		
		prop.put("jnp.socket.Factory","org.jnp.interfaces.TimedSocketFactory");
		prop.put("java.naming.provider.url", "jnp://localhost:1099");							
		ic = new InitialContext(prop);
	}

Esta aplicação web consulta o crédito do cliente através de um web service (EJB), através do ConsultaSituacaoBean. No construtor deste bean o metodo init() é chamado conforme o código abaixo:

public class ConsultaSituacaoBean{
	private InitialContext ic;
		
	public ConsultaSituacaoBean(){
		try {
			init();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
	}

        public void consultarSituacao(){
             IC2 c2 = (IC2) getIc().lookup("analiseCredito-ear/C2/remote"); // nesta linha o lookup é feito com o seviço
             //demais regras
        }
}

Existem diversas formas de está fazendo isso …Este foi apenas um exemplo.

Abs,

Muito obrigado Kanin. Vou acrescentar o que falta.

andersonrc, se conseguir resolver posta aí a solução. Estou tendo um problema bem parecido.
Estava usando o struts2 v2.2.1.1 e atualizei para struts2 v2.2.3

Durante o deploy no Glassfish v3 , ocorre o seguinte erro:

GRAVE: Exception while loading the app
GRAVE: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.ClassNotFoundException: org.apache.struts2.views.JspSupportServlet

Alguém sabe como resolver?

Obrigado.

[quote=magnojg]andersonrc, se conseguir resolver posta aí a solução. Estou tendo um problema bem parecido.
Estava usando o struts2 v2.2.1.1 e atualizei para struts2 v2.2.3

Durante o deploy no Glassfish v3 , ocorre o seguinte erro:

GRAVE: Exception while loading the app
GRAVE: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.ClassNotFoundException: org.apache.struts2.views.JspSupportServlet

Alguém sabe como resolver?

Obrigado.[/quote]

Eu consegui resolver. Tava faltando o arquivo persistence.xml na aplicação web com as configurações. E nesse xml deve ter a tag informando a unidade de persistência, definida no session bean do módulo EJB.

Aparentemente algo simples. É que pensei que como o módulo EJB tem esse persistence.xml, e o jar do EJB tá no path da aplicação web, achava que era desnecessário ter vesse xml no módulo web, mas precisa sim.

Segue o persistence.xml que estava faltando na aplicação web

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="LocadoraUP">

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<properties>
    <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
    <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/locadora" />
    <property name="javax.persistence.jdbc.user" value="postgres" />
    <property name="javax.persistence.jdbc.password" value="postgres" />
    <property name="hibernate.hbm2ddl.auto" value="create-drop" />
    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />

<!-- 

Para atualizar as tabelas no banco de dados:
<property name="hibernate.hbm2ddl.auto" value="update" />

Para uso com o banco de dados MySQL:
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />

-->

</properties>
		
</persistence-unit>
</persistence>

No meu caso este arquivo não estava faltando, e eu voltei a versão do struts2 para a 2.2.1.1 para resolver; a 2.3 não funcionou nem a pau… Bem, vou esperar mais um pouco para atualizar já que esse release é recente.

Obrigado pelo help.

Outra consideração a fazer, que pode servir aos novatos, é que quando for feito o deploy que seja em conjunto, ou seja, não faça o deploy do EJB, para depois fazer o deploy da aplicação web. Como o jar do módulo EJB vai está no path da aplicação web, basta fazer o deploy do módulo web.