Archive for December, 2007

Bom, desenvolvendo com JBoss Studio e JBoss Seam, ainda me faz muita falta as mágicas que o Greenbox nos dava na palma da mão, por isso, estou estruturando algumas extensões para proporcionar maior produtividade agora criando agora plugins para Eclipse.

O exemplo a seguir me ajuda a ler qualquer .class Java para poder usar Reflection, obrigado Edson Tirelli, pela dica simplificada de capturar isto, segue aqui a dica:

JAVA:
  1. URL url = null;
  2. try {
  3. File dir = new File("/opt/java/redhat/jboss-studio/workspace/travelweb/build/classes/");
  4.  
  5. url = dir.toURL();
  6.  
  7. } catch (MalformedURLException e) {
  8. e.printStackTrace();
  9. }
  10. URL[] urls = {url};
  11. ClassLoader spec = new URLClassLoader(urls);
  12.  
  13. Class c = null;
  14. try {
  15. c = spec.loadClass("travelweb.entity.TravelRequest");
  16. e.printStackTrace();
  17. }
  18.  
  19. System.out.printf("On class %s I found the following fields",c.getName());

Estes dias tivemos que realizar uma prova de conceito se o DWR rodava no JBoss Portal. A minha primeira impressão era que seria possível, mas em primeira instância a referência aos JavaScripts deveria ser feita nos templates, porém devido a flexibilidade no JBP toda referência fica nas próprias Páginas enviadas para o cliente pelo o Portlet.

Veja o exemplo da chamada no Html:

HTML:
  1. <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
  2.  
  3. <% String contextPath = renderResponse.encodeURL(renderRequest.getContextPath()); %>
  4.  
  5. script type="text/javascript">
  6.  
  7. script type="text/javascript"><%=contextPath%>/dwr/util.js

Sendo assim, a referência é buscada pelo objeto renderResponse, retornando assim o local de execução do contexto http do jboss portal.

O código do Portlet é mais ou menos assim:

JAVA:
  1. package org.jboss.portal.samples.dwr;
  2.  
  3. import java.io.IOException;
  4. import javax.portlet.GenericPortlet;
  5. import javax.portlet.PortletException;
  6. import javax.portlet.PortletRequestDispatcher;
  7. import javax.portlet.RenderRequest;
  8. import javax.portlet.RenderResponse;
  9. public class DWRPortlet extends GenericPortlet {
  10. @Override
  11. public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {     |
  12. response.setContentType("text/html");
  13. PortletRequestDispatcher   prd = getPortletContext().getRequestDispatcher  ("/WEB-INF/dwr/view.jsp");
  14.  
  15. prd.include(request, response)}
  16. }

Veja o resultado na seguinte imagem:

DWR no JBoss Portal

Esta foi a palestra ministrada por Fabiane Nardon e eu no JavaOne2007 em São Francisco, espero que sirva de ajuda e/ou sugestões:

Forge Abraço

Edgar

Em alguns cenários, você quer que suas aplicações Web busquem primeiramente as classes que estejam no reposítório de WEB-INF/lib e WEB-INF/classes . Isso pode acontecer por inúmeros motivos, entre eles uma biblioteca que depende de uma versão diferente da que é disponbilizada por padrão pelo container do JBoss. Sendo assim, altere as porções dentro do arquivo jboss-service.xml que fica no JBOSS_HOME/server/deploy/jboss-web.deployer/META-INF. Veja o exemplo:

XML:
  1. <attribute name="Java2ClassLoadingCompliance">false</attribute>
  2.  
  3. <attribute name="UseJBossWebLoader">false</attribute>