Javafree
 Forum   Topics   Author   Post 
JavaFX Localizar Polyline jesuino [quote="rochribre"]Boa Tarde, alguém saberia me informar como faço em JavaFx para encontrar uma determinada polyline dentro de um Group, sendo que cada polyline tem um ID com o seu nome, queria localiza-la sem ter que navegar em todas polyline que estão no Group ? [/quote] Usa o método lookup do Node! Fiz um exemplo para você!! Olhe no meu blog: Basicamente você usa o método lookup para passar um seletor CSS e se ele tiver nas children do node, ele é retornado, ou então ele retorna null. Para buscar por ID por exemplo: http://aprendendo-javafx.blogspot.com.br/2015/11/buscando-nos-filhos-de-um-node-usando.html
JavaFX JavaFX - TableView. Problema para preencher o tableView<Classe filha> com os atributos da classe mãe(Abstrata) jesuino [quote="Davi-873"]Olá pessoal. Estou com um problema para usar a TableView e não acho solução em lugar nenhum. Espero que aqui alguém saiba do assunto. Tenho uma table view que preciso prencher com dados da classe filha e da classe mãe(abstrata). Consigo preencher a tableView da classe filha, mas não consigo implmentar os atributos da classe mãe. Alguém pode me ajudar? [/quote] Eu escrevi sobre isso aqui: http://fxapps.blogspot.com.br/2012/09/showing-object-properties-in-tableview.html Dê uma olha no exemplo de código. Se tenho um objeto do tipo pessoa, que tem cidade e você quer mostrar nome da cidade, você pode usar o seguinte: [code] TableColumn stateColumn = new TableColumn("State"); stateColumn.setCellValueFactory(new Callback, ObservableValue>() { @Override public ObservableValue call(CellDataFeatures c) { return new SimpleStringProperty(c.getValue().getCity().getState().getName()); } }); [/code] Você pode tentar algo como acima e tentar acessar os membros da classe mãe, mas eles têm que ser protected ou private com método de acesso.
JavaFX TextField jesuino [quote="Pettrus Sherlock"]Ola denovo eu estou tentando colocar um textfield seguindo exatamente o exemplo e gostaria de saber onde estou errando, pois o eclipse acusa um erro no .add [code] public static HBox textoDigitado() { HBox hbox = new HBox(); hbox.setPadding(new Insets(5, 5, 5, 5)); hbox.setSpacing(10); TextField textoUsuario = new TextField("Digite seu texto"); hbox.getChildren().add(textoUsuario); return hbox; } [/code] [/quote] Veja um exemplo de uso de TextField aqui: http://aprendendo-javafx.blogspot.com.br/2012/07/controles-basicos-de-interface-i.html
JavaFX javaNullPointerException (unknown source) - Após build Javafx jesuino Posta a exceção inteira para ver da onde vem o NUllPointerExceptoin!
JavaFX Criar botão para fechar e maximizar stage jesuino [quote="soninhosweb"]Bom dia, Gostaria de criar meus próprios botões para fechar e maximizar as stages do meu projeto ou verificar quando o estado das stages estão maximizada sim não, para assim redimensionar alguns objetos dependendo do seu estado. [/quote] Oi, isso seria facinho, facinho. Olha um exemplo que postei no blog: http://aprendendo-javafx.blogspot.com.br/2015/11/rapidinha-dimensionar-stage.html Mas o básico é manter uma referência ao Stage e usar o métodos setMaximized(true) e close para maximizar e fechar respectivamente. Obrigado!!
JavaFX Navegação entre telas jesuino [quote="alessandro09"]Boa noite, Estou começando agora a estudar javaFX, e estou com uma dúvida que não estou conseguindo solucionar.. gostaria de desenvolver um esquema de telas que ficasse parecido com o internalFrame do swing, porém até onde consegui pesquisar, o javaFX não tem isso pronto, gostaria da ajuda de vocês para entender, como trabalharia isso com os "nós", por exemplo, posso adicionar um palco dentro de um agrupador? Desde já agradeço a atenção de todos. [/quote] Não tem :( Você poderia fazer o seguinte: * Fazer o Root da sua aplicação e nele colocar um pane que seria o seu internal frame antes de todos os componentes da app * O pane apareceria sobre todas as outras coisas []'s
Off-Topic Como java se situa no mercado atualmente? jesuino [quote="harrisondavys"]Caros colegas preciso de um help da comunidade em alguns assuntos relacionados ao Java 1) Qual o framework mais utilizado atualmente? 2) Quais realmente serão melhor para aprender para atuar no mercado profissional e até mesmo para melhor desenvolvimento? 3) No mercado de trabalho como Java está situado? Salário e oportunidade de emprego. 4) Java ainda é muito utilizado? Abraços. [/quote] Oi, >> 1) Qual o framework mais utilizado atualmente? Acredito que o mundo Java está mais em Spring e JEE >> 2) Quais realmente serão melhor para aprender para atuar no mercado profissional e até mesmo para melhor desenvolvimento? Eu iria por esses: Spring e JEE; >> 3) No mercado de trabalho como Java está situado? Salário e oportunidade de emprego. Acho que sim: http://olhardigital.uol.com.br/pro/noticia/desenvolvedores-em-php-e-java-ganham-ate-r-9-mil/35901 >> 4) Java ainda é muito utilizado? Acho que é uma opção muito válida, não para de evoluir...
Java Básico Tela de loading não aparece jesuino Cara, você está travando a thread do Swing, não faça isso :P [code] try { Thread.sleep(1300); } catch (InterruptedException ex) { Logger.getLogger(bolaoJFrame.class.getName()).log(Level.SEVERE, null, ex); } [/code] Veja esse tuto: http://docs.oracle.com/javase/tutorial/uiswing/concurrency/
Off-Topic Aprovado na FATEC!!! jesuino [quote="D3z40"]Ola galera!!!! Só queria dividir com vocês a noticia que enfim passei no vestibular da FATEC de Mogi das Cruzes, no curso de Analise e Desenvolvimento de Sistema, é um curso muito bom e bem disputado, com certeza vale a pena. Será bem corrido agora, trabalhando e estudando, mas tentarei não ficar tão ausente do fórum. Abraço galera!!! [/quote] Parabéns cara!!!! Eu fiz FATEC, a de São José dos Campos ^_^, não me arrependo em Nada!!!
JavaFX Quer aprender JavaFX? jesuino [quote="thiagovpalmeir"]Como está colocado o JavaFX no mercado? Vale o investimento de estudos para essa linguagem? [/quote] Vale a pena sim! Já é parte do Java 8 :o
JavaFX Pegar texto do TableView jesuino Vc pode pegar o selectionModel e então o item selecionado com selectedItem: http://docs.oracle.com/javafx/2/api/javafx/scene/control/TableView.html#selectionModelProperty http://docs.oracle.com/javafx/2/api/javafx/scene/control/SelectionModel.html#selectedItemProperty
JavaFX Problema declarando variavel no javaFX 2.2 jesuino Olá! Isso era do JavaFX 1.x, no 2 você já pode usar Java! Dá um bizu no meu blog: http://aprendendo-javafx.blogspot.com.br/
Java Básico HTML 5 e Java jesuino Como assim? O que você ouviu? HTML 5 não tem muito a ver com Java. HTML 5 é linguagem de marcação e fica no lado cliente. O que pode ter a ver: - Web Sockets: Servidores de aplicação Java estão implementando isso; - JSF(novas versões geram HTML 5): Até onde sei, eles estão trabalhando nisso...
JavaFX Duvidas sobre o JavaFX jesuino Oi Diego, Não é uma nova linguagem, era na versão 1.x, mas esquece isso! Hoje JavaFX é uma API Java, como o Swing. Eu sugiro esse blog (que eu escrevo) para começar a aprender JavaFX: http://aprendendo-javafx.blogspot.com.br o/
JavaFX [Resolvido] Erro em ChoiceBox jesuino Juntamente com o RadioButton, você também pode usar ToggleButton, que é mais bonitinho :P http://aprendendo-javafx.blogspot.com.br/2012/08/controles-basicos-de-interface-ii.html
Anúncios Red Hat adquire Polymita jesuino A Red Hat, empresa que oferece soluções baseadas em código aberto, anunciou hoje que adquiriu a empresa Polymita. A Polymita oferece soluções de BPM que serão agreagadas ao portifólio de tecnologias "Middleware" da Red Hat. A empresa que oferece o famoso sistema operacional Red Hat Enterprise Linux através de um esquema de subscrições, também mantém uma das maiores comunidades Java: JBoss.org. Link: http://www.benzinga.com/news/12/08/2866328/red-hat-acquires-bpm-technology-from-polymita
JavaFX Distribuir Aplicação JavaFX sem Web Start [RESOLVIDO] jesuino Oi Buger, já tentou isso? http://docs.oracle.com/javafx/2/deployment/packager.htm
JavaFX Extensão não fica .fx e sim .java jesuino Oi, estamos trabalhando em tutorias para JavaFX 2. Aparece ae de volta e vai postando sobre o que está achando. \o/
JavaFX Material JavaFX jesuino Oi Carol, Vamos criar artigos sobre JavaFX (procure a thread "O que é JavaFX"): >> 1 - Há alguma apostila de Java FX 2.0? Não que eu saiba em português, estamos trabalhando pesado nisso, vamos postar aqui mesmo no JF. 2 - Como eu crio telas com botões, icones, imagens??? Com Swing basta apenas arrastar, mas infelizmente tem que ser tudo via código. No Swing vc deveria estar usando o Mantisse do netbeans(eca), dá uma olhada no Scene Builder, ele você arrasta e solta também :) 3 - Posso ir colocando pedaços dos códigos que vou fazer e vocês vão orientando-me? Sim, mas crie um novo post, ou vai criando posts de acordo com suas dúvidas... []'s
JavaFX Laço while comandado por botões que estão na cena! jesuino Oi, você precisa usar threads!!! Esse while trava sua thread. Você manda ela dormir, ela trava a aplicação inteira. Me explica melhor o que você quer fazer, mas no JavaFX é quase impossível ter que usar threads pq temos classes de mega alto nível para te ajudar nisso. Dá uma olhada na classe timeline: http://docs.oracle.com/javafx/2/api/javafx/animation/Timeline.html []'s
JavaFX O Futuro do JavaFx (Preocupado) jesuino Olá DR, Desculpe a mega demora, só vi hoje sua resposta. Estamos trabalhando nisso! http://javafree.uol.com.br/viewtopic.jbb?t=874710 Mas temos artigos em inglês no site da Oracle
Frameworks, APIs e IDE's Como faço para mudar a dependencia do Jboss? jesuino Oi, qual versão do JBoss? Os datasources(arquivos *-ds.xml) ficam na pasta PERFIL/deploy do JBoss AS 4, 5 e 6, mas isso mudou no 7. Para saber se seu programa está usando um datasource vai depender como seu programa está acessando um banco de dados.
JavaFX Aprendendo. jesuino Loney, JavaFX vai substituir o Swing no Java 8. Se quer criar aplicações básica, use-o. Se quer um futuro profissional sólido com JavaFX, é pouco provável, pois o mercado hoje não é tão gigante quanto de aplicações WEB. No entanto, JavaFX 2.x é Java, e isso significa que você pode criar aplicações e aprender Java, ou seja, não é um conhecimento perdido, logo: [quote] Se é um conceito BEM recente, como disse o amigo Mathews, seria bom para um iniciante em Java tentar aprende-lo ou não? [/quote] Compensa, pois é Java!
JavaFX Extensão não fica .fx e sim .java jesuino Olá! .fx não existe mais, esse JavaFX é o 1.x, não é mais usado, morreu. Agora é JavaFX 2.0, que é tudo Java. Qual Tutorial você usou? Temos que atualizar os tutoriais do site!
[Tutoriais] - Ambiente WEB Introdução prática a REST Web Services com Java usando RESTEasy jesuino Muito Obrigado Sekkuar!
[Tutoriais] - Ambiente WEB Introdução prática a REST Web Services com Java usando RESTEasy jesuino <b><i>Artigo Beta! Por favor, poste no fórum qualquer erro encontrado</i></b> Nesse presente artigo vamos falar rapidamente de REST no mundo Java usando a especificação JAX-RS e a implementação <a href="http://www.jboss.org/resteasy">RESTEasy</a>. Esse texto é ?mão na massa", não vamos a fundo aos príncipios REST e no funcionamento do JAX-RS. Se quiser saber mais você deve ler a <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">tese</a> de Roy Fielding ou ler os livros recomendados no final do capítulo. Muito blá blá né? Vamos ao que interessa! <h2>Ambiente</h2> Você vai precisar de um ambiente de desenvolvimento comum a desenvolvedores Java: <quote> - <a href="http://javafree.uol.com.br/artigo/849869/Instalacao-e-configuracao-do-JSDK-no-Linux-e-no-Windows.html">Ambiente Java 1.5+</a> - <a href="http://www.eclipse.org/downloads/">Eclipse Helius ou Indigo</a> - Algum servlet container, de preferência <a href="http://tomcat.apache.org/download-60.cgi">Tomcat 6</a> - Aproveite e já <a href="http://sourceforge.net/projects/resteasy/files/Resteasy%20JAX-RS/2.3.2.Final/resteasy-jaxrs-2.3.2.Final-all.zip/download">baixe</a> o RESTEasy 2.3.2. </quote> <h2>Olá Mundo!</h2> Provavelmente você já sabe que tudo que vamos aprender no mundo da programação começamos com um ?Hello World" ou, no bom português, ?Olá Mundo!". O que vamos fazer agora é um mega simples Web Service (WS) que simplesmente diz ?Olá Mundo!". Pode parecer idiota, mas dele vamos aprender o básico de um REST WS usando Java. Para construir WS baseados nos príncipios REST usamos alguma implementação da especificação JAX-RS. Essas especificação é uma das mais simples de ser lida e entendida e ela simplesmente vai te ajudar a direcionar requests HTTPs(lembre-se que com HTTP é possível seguir todos os príncipios REST) para suas classes POJO devidamente anotadas. A especificação também prevê diversos outros detalhes como parse do corpo da request HTTP diretamente para POJO entre muitos outros. O que vamos fazer agora é simplesmente criar um Olá Mundo para servir de base para futuros projetos que usam JAX-RS e também entender o básico do básico de toda a especificação. Conforme falamos algumas linhas acima, JAX-RS ajuda você a direcionar requests HTTP para suas classes. Para você fazer uma request você deve saber a URL de destino e o recurso que quer acessar dessa URL, a URI do recurso. JAX-RS permite, através de anotações Java, que você escolha a URI de cada um de seus recursos e o método HTTP desejado. Resumo: Você cria um POJO(classes Java simples), anota, deploy e os métodos dessa classe irão responder à requests HTTP após o deploy em um servlet container. <h2>Determinando o projeto</h2> Antes de codificar vamos definir qual URI irá responder ?Olá Mundo!". Que tal ?ola-mundo"? Ok, vamos usar ola-mundo. E qual o método HTTP? GET. GET usamos para pegar coisas do servidor(PUT ou POST para criar, DELETE para apagar, veremos mais a frente...). Então, nosso primeiro WS REST responde como abaixo: <quote> Método HTTP: GET URI: /ola-mundo Tipo de retorno: Texto Plano </quote> Uma coisa nova que você deve ter notado é o tipo de retorno. REST WS respondem em qualquer formato de dado que você quiser: XML, JSON, Texto Plano, YAML, JPG, etc. Basta você ter o MessageBodyWriter para aquele tipo. Mas para nós isso não importa ainda, pois com texto plano não precisamos nos preocupar com isso. <h2>Configurando</h2> Vamos a parte mais legal que é programar. Tem muitas partes chatas que não vamos falar aqui, mas vamos dar link na medida do necessário. Assim evitamos entediar os sabidinhos, mas não deixamos os novatos na mão :-). Uma aplicação JAX-RS é uma aplicação WEB simples que usa empacotamento <a href="http://javafree.uol.com.br/topic-873282-O-que-fazer-para-executar-o-war.html">WAR</a>, logo podemos criar um projeto no Eclipse do tipo ?Dynamic Web Project": <quote> - Abra o Eclipse, vá em File->New-> Dynamic Web Project - Dê o nome ?OlaREST"(ou outro que você quiser) e configure a versão 2.5 no campo ?Dynamic Web Module Version"; - Mais detalhes na <a href="http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.wst.webtools.doc.user%2Ftopics%2Ftwcreprj.html">doc do Eclipse</a>. </quote> Esse seu projeto, por padrão, não reconhece nada de JAX-RS. Se tentar usar vai ter só erro e dor de cabeça e vai fechar o Eclipse e vai ir ver sua timeline do facebook ou o trending do 9gag :-(. Para evitar isso, siga os passos abaixo para adicionar o RESTEasy no ?buildpath" do seu projeto. Assim o Eclipse reconhecerá tudo que você usar de JAX-RS: <quote> - Após <a href="http://sourceforge.net/projects/resteasy/files/Resteasy%20JAX-RS/2.3.2.Final/resteasy-jaxrs-2.3.2.Final-all.zip/download">baixar</a> o RESTEasy, ?unzip" o arquivo baixado em algum lugar; - Da pasta resultante de ter ?deszipado" o resteasy, vá pasta lib e copie todos os arquivos JAR ali e cole eles lá na pasta do seu projeto em OlaREST/WebContent/WEB-INF/LIB. Você colar usando a própria interface do eclipse(pela IDE ir na pasta e apertar ?CTRL+V") ou colar na pasta pelo seu sistema operacional... - No Eclipse, selecione os JARs da pasta lib do seu projeto (os que você acabou de colar), clique com o botão direito e selecione o menu ?Build Path" -> ?Add to Build Path". Agora o Eclipse irá reconhecer todas as classes relacionados ao RESTEasy. </quote> <em> Observe que colar todos os JAR no seu projeto WEB não é recomendado, você não vai usar todos nesse exemplo! As maiores desvantagens são maior tamanho em disco do projeto, possíveis conflitos de classloading quando for feito o deploy em servidores de aplicação, como o JBoss 5 e 6 e espalhamento desnecessário de diversos JARs por diversos projetos. Lembre-se disso quando for colocar aplicações em produção! </em> Estamos a um passo de deixar o ambiente no jeito para o desenvolvimento. Agora falta adicionar nosso servlet container ao Eclipse. O processo é melhor descrito nesse <a href="http://www.youtube.com/watch?v=LdThrERsSsI">vídeo</a>, mas abaixo vão os passos que segui na escrita desse texto: <ul> - Baixei e descompactei o tomcat em uma pasta de minha preferência(ou você pode usar o .exe se preferir); - No Eclipse acessei o menu File -> New -> Other -> selecionei Server e então cliquei em Next; - No diálogo que apareceu eu selecionei Tomcat 6.x e cliquei em Next; - Mostrei ao Eclipse onde estava o meu Tomcat através do campo ?Tomcat Installation Directory" e cliquei em Next; - Selecionei o meu projeto ?OlaREST" no lado esquerdo ?Available" e passei para o lado direito ?Configured"; </quote> Se tudo deu certo até agora, o seu ambiente está mais ou menos assim: <img style="width:700px;height:500px" src="http://javafree.uol.com.br/files_user/files/2/30/F1/JAX-RS.jpg" /> Você pode, se quiser, iniciar o tomcat para testar ele. Para isso clique sobre ele na abinha que ele está e então no botão de play no lado superior direito das abas. Após ver ele inicializando acesse <i>http://localhost:8080</i>. Você deve pelo menos um <a href="http://img251.imageshack.us/img251/5042/tomcat404.png">404</a> ou a página de <a href="http://www.mobilefish.com/images/developer/tomcat_welcome.gif">boas vindas</a> do servlet container mais famoso atualmente. Pronto, agora é hora de programar! <h2>Programando</h2> A primeira coisa que vamos fazer é criar um pacote onde iremos colocar nossas classes de recursos. Vamos criar o pacote recursos! Para isso dentro do seu projeto clique com o botão direito em ?Java Resource/src" e selecione no meu New -> Package. Coloque o nome ?recursos" e então clique em ?finish". Dentro desse pacote crie uma classe Java simples chamada ?RecursoOla".(botão direito sobre o pacote, new, class, nome ?RecursoOla" e então Finish ...). Abaixo está o código completo de nossa classe e vamos falar um pouco sobre ele nas próximas linhas: [code] package recursos; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("ola-mundo") public class RecursoOla { @GET public String digaOla() { return "Olá Mundo!"; } } [/code] A primeira coisa que devemos fazer é anotar nossa classe com @Path, assim ela será reconhecida como um ?recurso JAX-RS". Essa anotação também permite informar a qual URI esse recurso responde e no nosso caso ela irá responde a ?ola-mundo". Perceba o método digaOla com a anotação @GET. Esse método será invocado quando uma request GET para a URI ?diga-ola" chegar ao nosso servlet container. Similar a @GET temos também @POST, @DELETE, @PUT entre outras anotações para cada método HTTP... <em> Perceba que estamos falando de URI, mas a URL final dependerá do contexto da sua aplicação no servidor: {servidor}/{contexto da aplicação}/{URI do seu recurso} </em> Como último passo vamos configurar o RESTEasy para reconhecer automaticamento o recurso e instalar ele para receber as requisições HTTP. Isso é feito no famigerado arquivo web.xml(encontrado em ?WebContent/WEB-INF"), melhor explicado nessa <a href="http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html">página</a>. Abaixo temos o nosso novo web.xml e você pode copiar o código abaixo para substituir o conteúdo do seu atual. [code] <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>OlaMundo</display-name> <!-- RESTEasy: mapeie "TODOS" meus recursos JAX-RS --> <context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param> <!-- O Servlet do RESTeasy pega as requests para direcionar para as suas classes JAX-RS --> <servlet> <servlet-name>Resteasy</servlet-name> <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> </servlet> <!-- O servlet do RESTEasy responde na raiz da aplicação --> <servlet-mapping> <servlet-name>Resteasy</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> [/code] Se tudo estiver OK sua aplicação deverá aparecer do seguinte jeito: <img style="width:700px;height:500px" src="http://javafree.uol.com.br/files_user/files/6/70/68/JAX-RS_2.jpg"> Agora é hora então de testar! <quote> - Clique em cima do seu servidor tomcat que você criou anteriormente na aba Server; - Clique em iniciar ou segure CTRL+ALT e aperte R </quote> Note os logs do tomcat no console e entre eles você deverá perceber a seguinte linha: <quote> INFO: Server startup in 503 ms </quote> Quando isso aparecer, abra o navegador e acesse a URL <em>http://localhost:8080/OlaREST/ola-mundo</em>. O resultado deverá ser o texto ?Olá Mundo!" no seu navegador \o/ Bem, na verdade isso foi chato e entediante. Tanto trabalho para um ?Olá Mundo!" no navegador?! Agora vamos fazer algo mais interessante e as coisas vão ficar mais rápidas! <h2>Pegando parâmetros da requisição HTTP</h2> JAX-RS possibilita através de anotações pegar parâmetros da sua URI e do cabeçalho da requisição HTTP. Os parâmetros pode ser parâmetros que usamos na seguinte forma: <em>{url}?parametro=valor</em> Ou também parâmetros pegos na própria URI, exemplo: <em>pessoa/{id}</em> Onde {id} seria um valor a ser passado para nosso método. As anotações para esse fim são respectivamente @QueryParam e @PathParam>. Mexemos um pouco no código do nosso RecursoOla para aceitar ambos parâmetros: [code] package recursos; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; @Path("ola-mundo") public class RecursoOla { @GET public String digaOla(@QueryParam("parametro") String parametro) { return "Olá Mundo! <br /> O parâmetro de \"Query\"enviado foi: " + parametro; } @GET @Path("/{parametro}") public String digaOlaPath(@PathParam("parametro") String parametro) { return "Olá Mundo! <br /> O parâmetro de \"URI\" enviado foi: " + parametro; } } [/code] OPA! @Path em cima de método, e agora? Se você usar @Path em cima de método, isso quer dizer que iremos ?aninhar" as URIs. Ou seja, se você tentar acessar com GET a URI <em>/ola-mundo</em>, o método <b>digaOla</b> será chamado. Se tentar acessar a URI <em>/ola-mundo/qualquer%20texto%20aqui</em>, o método <b>digaOlaPath</b> será chamado. No caso do primeiro método você ainda pode informar um parâmetro na forma <em>/ola-mundo?parametro=algum%20valor</em> Modifique seu código e faça o processo de ?subir" o tomcat de novo, mas agora acesse novas URLs no seu navegador. Abaixo a URL a ser acessada e o resultado esperado: <em>http://localhost:8080/OlaREST/ola-mundo/ESTE%20%C3%89%20UM%20TESTE</em> <quote> Olá Mundo! O parâmetro de "URI" enviado foi: ESTE É UM TESTE </quote> <em>http://localhost:8080/OlaREST/ola-mundo/?parametro=ESTE%20%C3%89%20OUTRO%20TESTE!</em> <quote> Olá Mundo! O parâmetro de "Query"enviado foi: ESTE É OUTRO TESTE! </quote> Agora você aprendeu o básico do básico do JAX-RS. Mas sabemos que aplicações da ?vida real" não são só troca de texto e ?Olá Mundos", né? No mundo real usamos formatos como XML, JSON, CSV. ?Usamos Beans que vem do banco de dados, mas espostos por um EJB que usa JPA para acessar um Oracle e tudo isso em um ambiente de alta avaliabilidade usando cluster de servidores de aplicações com replicação de estado?. Bem, vamos por favor continuar no Olá Mundo, mas agora iremos nos divertir um pouco mais :-) <h2>Retornando suas classes nos recursos JAX-RS</h2> Nessa parte iremos criar um REST WS mais avançado. No final do artigo temos dois downloads um que contém um projeto do Eclipse com o que foi feito até agora e outro com todo o projeto. Digamos que você tem um bean para representar o seu ?Olá Mundo!" e seu sistema quer mostrar essa mensagem em diversos idiomas. E mais: Você quer permitir o usuário escolha o formato que vai ser exibido a mensagem! Agora a coisa pegou! Na verdade seria pior se JAX-RS e RESTEasy não tivessem sido inventados, mas com eles a coisa fica fácil e fácil! Primeiramente vamos modelar as URIs de acessos ao nosso serviço: <img style="width:700px;height:500px" src="http://javafree.uol.com.br/files_user/files/D/62/3B/tabela.png" /> Basicamente vamos servir os recursos em três formatos: XML, JSON e HTML. O formato HTML aceita uns parâmetros de formatação. Obviamente vai além do escopo desse artigo discutir se isso é legal fazer em um WS REST ou não, simplesmente iremos demonstrar a habilidade de lidar com diversos formatos e fica a cargo do leitor entender corretamente os príncipios REST. Em seguida, o que vamos fazer é criar um pacote para nossa classe, eu criei ?modelo" e dentro desse pacote criei minha classe OlaMundo, como você pode ver abaixo: [code] package modelo; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class OlaMundo { private String idioma; private String mensagem; public OlaMundo() { } public OlaMundo(String idioma, String mensagem) { super(); this.idioma = idioma; this.mensagem = mensagem; } public String getIdioma() { return idioma; } public void setIdioma(String idioma) { this.idioma = idioma; } public String getMensagem() { return mensagem; } public void setMensagem(String mensagem) { this.mensagem = mensagem; } } [/code] Perceba que estamos usando nossa classe semelhante as classes chamadas de <a href="http://pt.wikipedia.org/wiki/JavaBeans">?JavaBeans"</a>, pois contemos os atributos privados e métodos de acesso à eles. A importância de criar classes usando o padrão Java Beans é que essas classes poderão ser usadas com diversos frameworks, como JPA, JAXB A anotação @XmlRootElement sobre a classe é importante para que o RESTEasy escolha um MessageBodyWriter para essa classe, em outras palavras, com o ela o RESTeasy vai saber criar o corpo HTTP da resposta. Como respeitamos o padrão JavaBeans, essa classe poderá sem problemas ser ?parseada" pelo JAXB (usando pelo RESTEasy ?por baixo dos panos"). Para lidar com essa OlaMundo vamos criar uma classe dentro do pacote servicos chamada ServicoOlaMundo. Ela é responsável por lidar com as nossas mensagens gravadas. <em> Você deve estar se perguntando por que criar uma classe se podíamos lidar com OlaMundo diretamente na classe JAX-RS. Estamos criar um Web Service REST aqui, em uma aplicação comumente não temos só os serviços WEB, mas também, por exemplo, páginas JSP, JSF, um cliente JavaFX que fazem parte da aplicação. Se você joga toda a lógica no REST ws, ela não será reaproveitada em outras partes!. </em> O código de nossa classe se encontra abaixo: [code] package servicos; import java.util.ArrayList; import java.util.List; import modelo.OlaMundo; /** * @author William Antônio * */ public class ServicoOlaMundo { public List<OlaMundo> buscaTodos() { return OlaMundoBD.buscaTodos(); } public OlaMundo buscaPorIdioma(String idioma) { return OlaMundoBD.buscaPorIdioma(idioma); } /** * Essa class estática simula um banco de dados de OlaMundo's * * @author William Antônio * */ public static class OlaMundoBD { private static List<OlaMundo> mensagens; static { mensagens = new ArrayList<OlaMundo>(); mensagens.add(new OlaMundo("PT", "Olá Mundo!")); mensagens.add(new OlaMundo("EN", "Hello World!")); mensagens.add(new OlaMundo("ES", "¡Hola Mundo!")); mensagens.add(new OlaMundo("DE", "Hallo Welt!")); } /** * Todas as mensagens * * @return */ public static List<OlaMundo> buscaTodos() { return mensagens; } /** * Tenta buscar por idioma, retorna nulo se não encontrada a mensagem no * idioma que pedimos * * @param idioma * @return */ public static OlaMundo buscaPorIdioma(String idioma) { for (OlaMundo olaMundo : mensagens) { if (olaMundo.getIdioma().equals(idioma)) return olaMundo; } return null; } } } [/code] Os mais experientes podem se queixar de como feia ficou essa classe! Nosso foco aqui não é o serviço REST, então criamos uma simples classe para simplesmente simular o acesso a esse recurso. Não iremos falar dela, mas sim usá-la :-) Agora é a hora mais interessante! Vamos mexer no RecursoOlaMundo para acessar esse serviço e fazer o que propomos um pouco mais acima na nossa tabelinha. Abaixo a minha classe já terminada e no próximo parágrafo uma explicação dos pontos novos e mais interessantes marcados por comentários no código. [code] package recursos; import java.util.List; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response.Status; import org.jboss.resteasy.annotations.providers.jaxb.Wrapped; import modelo.OlaMundo; import servicos.ServicoOlaMundo; @Path("ola-mundo") public class RecursoOla { private ServicoOlaMundo servicoOlaMundo; public RecursoOla() { //1 servicoOlaMundo = new ServicoOlaMundo(); } @GET //2 @Wrapped(element = "mensagensOlaMundo") //3 @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public List<OlaMundo> buscaTodos() { return servicoOlaMundo.buscaTodos(); } //4 @Path("/{idioma: [A-Z][A-Z]}") @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public OlaMundo buscaPorIdioma(@PathParam("idioma") String idioma) { OlaMundo res = servicoOlaMundo.buscaPorIdioma(idioma); //5 if (res == null) throw new WebApplicationException(Status.NOT_FOUND); return res; } @Path("/{idioma: [A-Z][A-Z]}") @GET //6 @Produces({ MediaType.TEXT_HTML }) public String buscaPorIdiomaHTML(@PathParam("idioma") String idioma, @QueryParam("cor") @DefaultValue("red") String cor, @QueryParam("tamanho") @DefaultValue("12") int tamanho) { OlaMundo res = servicoOlaMundo.buscaPorIdioma(idioma); if (res == null) throw new WebApplicationException(Status.NOT_FOUND); StringBuffer sb = new StringBuffer(); sb.append("<span style='"); sb.append("color:" + cor + ";"); sb.append("font-size:" + tamanho + "px;"); sb.append("'>"); sb.append(res.getMensagem()); sb.append("</strong>"); return sb.toString(); } } [/code] A primeira coisa a ser notada em (1) é a instanciação do ServicoOlaMundo dentro do construtor do nosso Recurso. Antes que você se pergunte, saiba que a cada request uma instância dessa classe será criada e jogada fora logo após ela servir a requisição. Quem conhece os príncipios REST sabe do famoso ?Stateless": A comunicação entre o cliente e o servidor deve ser sem estado. Basicamente uma instância de ServicoOlaMundo será criada com cada requisição HTTP que chega e também descartada ao final. Isso não importa, por que nosso banco de dados fictício é ?static" e não tem instância, assim os dados serão os mesmo sempre e mantidos em memória ;) O comentário marcando número 2 mostra a anotação proprietária do RESTeasy chamada @Wrapped. Ela server para informar o nome que você quer que sua collection apareça na listagem. O comentário número 3 destaca talvez a característica mais espetacular de toda a especificação. O mesmo método serve dois formatos completamente distintos e fica a cargo da implementação(no caso o RESTEasy) arruma uma forma de gerar o objeto retornado no formato certo. Mas como RESTeasy fará isso? O cabeçalho HTTP ?Accepts", presente em todas as requisições HTTP, irá informar isso, ou seja, se você quer XML, você terá XML, se quiser JSON, terá JSON. Se pedir um formato não suportado um código de erro apropriado será lançado na resposta do servidor. No 4 temos um simples, mas útil recurso fornecido pelo JAX-RS. Você pode utilizar <a href="http://pt.wikipedia.org/wiki/Express%C3%A3o_regular">REGEX</a> para determinar a URI. Se a requisição for para um URI que não se encaixa nesse REGEX, o servidor lançará um 404(não encontrado) para você. O comentário 5 destaca algo que fizemos para manter a simplicidade. Se uma mensagem para o idioma não for encontrada, lançamos 404. Podíamos também lançar uma ?exceção de negócio" e mapear ela para o 404, mas isso fica para outro dia ;D O 6 aumenta a ?espetacularidade" do descrito no comentário 3. Observe que os métodos buscaPorIdioma e buscaPorIdiomaHTML respondem pela mesma URI. Como RESTeasy irá escolher o método apropriado então? Pela cabeçalho Accepts da requisição feita pelo cliente!! Ou seja, se o cliente ?pedir" HTML, ele vai cair nesse método, se ele pedir JSON ou XML, ele cairá no outro. Por fim, o 7 mostra uma outra anotação muito interessante do JAX-RS. O @DefaultValue permite que você escolha um valor padrão se um parâmetro não for fornecido pelo cliente. Isso se encaixa bem no nosso caso quando o cliente for pedir HTML. O corpo do método buscaPorIdiomaHTML deveria ser diferente, pois no caso do método buscaPorIdioma RESTeasy irá fazer o parse do objeto para JSON ou XML (tudo isso por causa da anotação @XmlRootElement na classe OlaMundo), no caso de HTML RESTeasy não sabe o que fazer e temos duas abordagens: A nossa(que é realizar o parse no corpo do método JAX-RS), mas ela é feia e imatura(mas serve para fins didáticos) ou então poderíamos criar o nosso próprio MessageBodyWriter para ensinar para o RESTeasy como parsear o objeto para HTML. Então ele escolheria nossa classe de parse e usaria quando a request fosse para HTML. Ufa! Vamos testar? Se tudo correu certo, a estrutura do seu projeto deve estar semelhante a essa: <img style="width:700px;height:500px" src="http://javafree.uol.com.br/files_user/files/A/07/DD/JAX-RS_4.jpg" /> Restart o servidor Tomcat (ou republique sua aplicação) e vá para o navegador para realizar um novo teste. Se acessar a URL <em>http://localhost:8080/OlaREST/ola-mundo/ES?cor=RED&tamanho=300</em> um letreiro gigante em vermelho escrito ?¡Hola Mundo!" deverá aparecer. <img style="width:700px;height:500px" src="http://javafree.uol.com.br/files_user/files/A/49/B6/JAX-RS_3.jpg" /> Se acessar <em>http://localhost:8080/OlaREST/ola-mundo/</em>, um XML deverá aparecer listando todas as mensagens: <img style="width:700px;height:500px" src="http://javafree.uol.com.br/files_user/files/8/68/C7/JAX-RS_6.jpg" /> Mas e os formatos XML e JSON quando quisermos selecionar uma mensagem usando o idioma? Bem, você deve ter uma ferramenta que faça requisições HTTP e permita você mexer no cabeçalho para mudar o tipo de formato que você quer (JSON, XML, HTML ou application/json, application/xml e text/html). Abaixo usei uma extensão(REST Client) para o Google e consegui pegar os dados no formato desejado. <img style="width:700px;height:500px" src="http://javafree.uol.com.br/files_user/files/C/07/88/JAX-RS_5.jpg" /> <h2>Conclusão</h2> Apresentamos os conceitos básicos de JAX-RS para criação de WEB Services REST(também chamados RESTful) usando Java. É claro que há muito mais para aprender. Se o você quiser saber mais sobre JAX-RS recomendamos o Livro <a href="http://www.amazon.com/RESTful-Java-Jax-RS-Animal-Guide/dp/0596158041">RESTful with JAX-RS</a> ou a leitura da própria especificação. Se quiser saber mais sobre RESTEasy você pode ler esse <a href="http://www.devmedia.com.br/resteasy-alem-da-especificacao-revista-java-magazine-99/23309">artigo</a> que saiu na Java Magazine 99. <strong>Utilize o fórum para perguntar coisas, estou observando essa thread.</strong> OBS: Em anexo dois projetos do Eclipse sem os JARs do RESTEasy em /lib. Um projeto contém só o Olá Mundo!.
JEE / EJB EJB com Jboss = erro jesuino Olá, - Qual versão do JBOss? - Colocou as bibliotecas clientes no classpath? []'s
Java Básico Preciso de ajuda, coisa simples. jesuino Leonildo, você tem uma grande missão pela frente! A ajuda aqui vai vir de Java mesmo, então sugiro que comece aprendendo o básico de Java: http://www.javafree.org/topic-850964-Iniciando-em-Java.html Não sei quanto tempo você tem para fazer esse trabalho, mas a luta será grande. Infelizmente não tem como em um post só te falar tudo que é preciso para fazer esse sistema, por exemplo: - Básico do Java; - Instalar e configurar uma IDE e um ambiente de desenvolvimento WEB; - Básico de um servidor WEB Sugiro que siga tutoriais na internet e poste no fórum dúvidas mais objetivas ou será como o sekkuar falou, vai parecer que você quer um software pronto!
JavaFX Ajuda com cenas no JAVAFX 2.0 jesuino Olá Diego, como quer dispor os formulários? Você pode usar um GridPane para dispor eles! []'s
Java Básico Preciso de ajuda, coisa simples. jesuino Lonildo, seja mais objetivo no que você precisa de ajuda: - O seu software será WEB? - Você pretende salvar as informações no banco de dados? - Você já fez alguma coisa? Da forma que colocou não dá nem pra começar a ajudar!
JEE / EJB JBOSS x TOMCAT jesuino Só ressuscitando o tópico para um pequeno detalhe: O Tomcat faz parte do JBoss na versão 5.x, ele está dentro do JBoss. É o JBoss Web: http://www.jboss.org/jbossweb []'s
JavaFX O Futuro do JavaFx (Preocupado) jesuino Foque no JavaFX 2! Sobre o Visage, ele terá seu pequeno mercado de DSL pelo que vejo. Visage+JavaFX (VisageFX) está andando devagar, eu fui o último que comitei coisas lá. Mas pretendemos fazer um coding Dojo nesse ano e tocar o projeto pra caramba, dar uma boa impulsionada. Assim fazer uma release até o fim do ano. []'s
JavaFX O Futuro do JavaFx (Preocupado) jesuino :O Está abordando JavaFX 2? Se sim, dê uma olhada nas notícias, principalmente do http://fxexperience.com/ JavaFX 2 está andando sim e a cada vez mais andando mais depressa :)
[Tutoriais] - Frameworks, APIs, Instalação e Configuração Interceptores com EJB 3 jesuino Olá Maurício, Vantagem de usar EJB é muitas das necessidades para aplicações enterprise você poderá resolver facilmente com EJB e as características do container, como injeção de dependências. EJB facilita muito mensageria com uso de MDBs, transações com beans orientados à transação, tarefas agendadas com os Timer Beans, persistência com os Entity Beans, etc... EU era um desses caras não-JEE, que usava sempre tecnologias alternativas como Spring, PlayFramework, entre outros. Mas comecei a usar EJB em um projeto recente e agora não pretendo mais largar :) Sobre usar em desktops, você pode sim, basta fazer lookup JNDI e sair usando os EJBs :)
[Tutoriais] - Frameworks, APIs, Instalação e Configuração Interceptores com EJB 3 jesuino Fala Diogo, vlw :) Vou ver se consigo escrever sobre outros assuntos relacionados a JEE.
[Tutoriais] - Frameworks, APIs, Instalação e Configuração Interceptores com EJB 3 jesuino <b>Introdução</b> Nesse artigo mostraremos rapidamente como criar um interceptor com EJBs 3. Os interceptores permitem que adicionamos código que serão executados antes dos métodos selecionados. Assim podemos adicionar mais funcionalidades as nossas aplicações em tocar no código já funcional. Usos típicos são para realizar logs, verificações de segurança, ou adicionar regras de negócio comum a diversos métodos. Os interceptores podem ser registrados para um método específico ou para uma classe inteira, fazendo que sua execução dele seja para todos os métodos dessa classe. Também é possível reutilizar ele quantas vezes for necessário em outros métodos ou classes.. Um exemplo prático Usar os interceptores no EJB 3 não é uma tarefa difícil, na realidade precisamos só de algumas anotações para fazer isso. Para nosso exemplo iremos usar um simples EJB do tipo Stateless: [code] package hello; import javax.ejb.Local; @Local public interface HelloLocal { public String digaOla(String nome); } [/code] E a implementação: [code] package hello; import javax.ejb.Stateless; import javax.interceptor.Interceptors; /** * Session Bean implementation class Hello */ @Stateless(name="hello") public class Hello implements HelloLocal { @Override public String digaOla(String nome) { if (nome == null || nome.isEmpty()) { nome = "estranho"; } return "Olá " + nome + "!"; } } [/code] Lembrado que a interface não é obrigatória. Para utilizar esse EJB vamos criar um simples projeto WEB que contém um servlet e uma página JSP. Assim nosso Servlet ficou como mostrado abaixo. [code]package controle; import hello.HelloLocal; import java.io.IOException; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RecebeNome extends HttpServlet { private static final long serialVersionUID = 1L; @EJB(name = "hello") HelloLocal dizHello; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nome = request.getParameter("nome"); String mensagem; mensagem = dizHello.digaOla(nome); request.getSession().setAttribute("mensagem", mensagem); response.sendRedirect("/ejb-teste-web"); } } [/code] O funcionamento deste Servlet é simples. O EJB será injetado pelo contâiner por causa da anotação @EJB, iremos invocar o método digaOla e colocaremos o resultado em uma variável de sessão chamada ?mensagem?. Por fim direcionamos para uma página JSP. Essa página por sua vez contém um formulário que submete para o mesmo Servlet descrito anteriormente e a mensagem do Servlet, se existir. [code] <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Olá</title> </head> <body> <% String mensagem = (String) request.getSession().getAttribute( "mensagem"); if (mensagem != null) { %> <h3 style="color: red"> Mensagem do servidor: <%=mensagem%></h3> <% } %> <form action="RecebeNome" method="get"> <input type="text" name="nome"> <input type="submit" value="Enviar"> </form> </body> </html>[/code] Agora já é hora de criamos nosso interceptor. São necessários dois passos básicos: - Anotar o método que vai agir como interceptor com @javax.interceptor.AroundInvoke; - Anotar o método que desejamos interceptar com @Interceptors e passar como parâmetro a classe que contém o método(ou os métodos, podemos usar mais de um) anotado com @AroundInvoke. O método anotado com @AroundInvoke receberá um parâmetro do tipo javax.interceptor.InvocationContext. Nessa classe teremos meta-informações do método que foi interceptado. Ver javadoc dessa classe para mais informações. Abaixo temos o código de nossa classe inteceptora: [code]package hello; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; public class SimpleInterceptor { @AroundInvoke public Object intercept(InvocationContext context) throws Exception { System.out.println("Interceptando o método: " + context.getMethod().getName()); return context.proceed(); } } [/code] Perceba que a função desse interceptor é simplesmente imprimir o nome do método que foi interceptado. Uma parte importante dos interceptores é sempre chamar o método proceed da classe InvocationContext e retornar o resultado, pois se isso não for feito a execução do método e da pilha de interceptores não acontecerá. Se você quiser para a execução do método por algum critério em específico, você pode lançar uma exceção que será tratada pela classe que está chamando o método alvo desse interceptor. O segundo passo agora é adicionar a anotação @Interceptors(SimpleInterceptor.class) ao nosso método digaOla. Para testar isso, você pode empactar o arquivo WEB(.war) e o projeto EJB(.jar) em um EAR e realizar deploy em um servidor de aplicação JEE, como o JBoss AS 5 ou 6. Infelizmente não realizamos teste no novíssimo JBoss AS 7. <b>Conclusão</b> Apresentamos basicamente como funcionam os interceptores com EJB 3. Ainda há algumas particularidades que não foram discutidas aqui, mas acreditamos que esse pequeno artigo servirá como base inicial para os leitores que desejarem saber mais esse assunto. Anexo você pode encontrar os projetos do Eclipse contendo os códigos apresentados e também um arquivo .ear pronto para ser instalado em servidor de aplicação JBoss.
Frameworks, APIs e IDE's Como instalo Axis no JBOSS 7 jesuino Você tem que usar Axis? JBoss AS 7 tem o JBoss CXF que é bem moderno e implementa vários padrões WS. Olhe essa apresentação: http://www.slideshare.net/alepalin/jboss-as7-web-services
Frameworks, APIs e IDE's Ajuda - Hibernate jesuino Oi, está faltando Jar/lib no seu classpath?! org.hibernate.cfg.Configuration Onde está fazendo deploy? também certifique-se que as libs estão no diretório WEB-INF/lib da sua aplicação ou que os JAR estejam na lib do servidor de aplicação...
GUI - (Applets, Swing, SWT, etc) problemas com o jtable jesuino Olá, qual seu problema especificamente? Já se conectou ao banco de dados? Consegue usar o JTable?
Java Básico Problemas com jButtonRadio e Banco de dados jesuino Olá, já tentou dar uma olhada nesse tutorial? http://download.oracle.com/javase/tutorial/uiswing/components/button.html Se já conhece combbox Seja mais específica :S
Goto page 1 , 234  Next - >>