Criando um Datasource MySQL no GlassFish

Objetivo

Esta dica é para a configuração de um datasource MySQL no GlassFish.

Os datasources são especialmente úteis quando se pretende criar uma aplicação que deixa a cargo do servidor de aplicações o gerenciamento dos recursos de conexão, podendo contar, por exemplo, com pools de conexão.

Apresentarei como criar e configurar um pool de conexões, e como referenciar o mesmo em um arquivo persistence.xml, para uma aplicação que utiliza a JPA.

Criando o Pool de Conexões

A primeira coisa a fazer é criar um pool de conexões para um banco de dados MySQL. Aqui vamos assumir um banco de dados chamado “agenda1” localizado na mesma máquina que o GlassFish (localhost).

Acesse o console de administração do GlassFish e encontre o menu “Resources”:

Nele há o nó JDBC, e abaixo dele os itens JDBC Resources e Connection Pools.  Vamos acessar primeiramente o item Connection Pools.

Ao clicar neste item será apresentada uma relação dos pools de conexão já criados, e uma opção para cadastrar um novo pool. Escola a opção para cadastrar o novo pool. Uma nova tela será aberta:

Na tela que é apresentada, informe o nome desejado para o pool, o tipo de pool (deve ser ConnectionPoolDataSource) que está sendo criado e o banco de dados destino.

Ao clicar para continuar, uma nova tela será apresentada para a configuração dos detalhes do pool de conexões. Dentre todas as configurações, as mais importantes no momento são as seguintes:

Apesar de não estar preenchido, ainda, é obrigatório informar o nome do banco de dados e a senha para a conexão.

É muito importante que os campos Url e URL estejam igualmente configurados, com o nome do bando de dados ao final da URL.

Após preenchidas as configurações, confirme a criação do pool de conexões. A tela inicial do nó Connection Pools deve apresentar a configuração que você acabou de criar:

Clique sobre ela, para selecioná-la. Na tela que se abre é possível testar a conexão, clicando sobre o botão “Ping”:

Depois de configurar o pool de conexões é preciso criar um recurso JDBC com ele. Acesse o nó “JDBC Resources”. Selecione a opção para criar um novo recurso, e na tela que se abre, escolha um nome para o novo recurso e indique que este recurso é referente ao pool que acabamos de criar:

Depois de confirmar, o recurso aparecerá listado dentre os demais:

Agora, na aplicação que utiliza JPA e será publicada neste servidor, basta referenciar o recurso JDBC no persistence.xml:

Está dada a dica!

9 comentários sobre “Criando um Datasource MySQL no GlassFish

  1. Ola. estou com problemas não consigo rodar minha aplicação. estava configurando como no exemplo acima e na hora de dar o ping acontece o seguinte erro.

    GRAVE: RAR8059: Exception while trying to find properties of class [ com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource ], set log-level toFINE for more information, com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
    GRAVE: RAR8059: Exception while trying to find properties of class [ com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource ], set log-level toFINE for more information, com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource

    AVISO: RAR8068: Using default datasource : __ds_jdbc_ra for pool : JRealtorPool

    INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
    AVISO: RAR8068: Using default datasource : __ds_jdbc_ra for pool : JRealtorPool

    GRAVE: RAR5099 : Wrong class name or classpath for Datasource Object
    java.lang.ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at com.sun.gjc.common.DataSourceObjectBuilder.getDataSourceObject(DataSourceObjectBuilder.java:283)
    at com.sun.gjc.common.DataSourceObjectBuilder.constructDataSourceObject(DataSourceObjectBuilder.java:112)
    at com.sun.gjc.spi.ManagedConnectionFactory.getDataSource(ManagedConnectionFactory.java:1290)
    at com.sun.gjc.spi.DSManagedConnectionFactory.getDataSource(DSManagedConnectionFactory.java:148)
    at com.sun.gjc.spi.DSManagedConnectionFactory.createManagedConnection(DSManagedConnectionFactory.java:101)
    at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.getUnpooledConnection(ConnectorConnectionPoolAdminServiceImpl.java:699)
    at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.testConnectionPool(ConnectorConnectionPoolAdminServiceImpl.java:427)
    at com.sun.enterprise.connectors.ConnectorRuntime.pingConnectionPool(ConnectorRuntime.java:1110)
    at org.glassfish.connectors.admin.cli.PingConnectionPool.execute(PingConnectionPool.java:130)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
    at org.glassfish.admin.rest.ResourceUtil.runCommand(ResourceUtil.java:202)
    at org.glassfish.admin.rest.resources.TemplateExecCommand.executeCommand(TemplateExecCommand.java:127)
    at org.glassfish.admin.rest.resources.TemplateCommandGetResource.processGet(TemplateCommandGetResource.java:78)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:186)
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:70)
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279)
    at com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:121)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    at com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:121)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:86)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:74)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1347)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1279)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1219)
    at com.sun.jersey.server.impl.container.grizzly.GrizzlyContainer._service(GrizzlyContainer.java:180)
    at com.sun.jersey.server.impl.container.grizzly.GrizzlyContainer.service(GrizzlyContainer.java:145)
    at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:177)
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
    at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:662)

    AVISO: RAR8054: Exception while creating an unpooled [test] connection for pool [ JRealtorPool ], Class name is wrong or classpath is not set for : com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
    GRAVE: RestResponse.getResponse() dá FAILURE. endpoint = ‘http://localhost:4848/management/domain/resources/ping-connection-pool.json’; attrs = ‘{id=JRealtorPool}’

  2. Apesar de estar consultando este post mais de um ano depois que foi postado, me ajudou demais. Já está em meus “Favoritos” e vou imprimí-lo para não correr o risco de não encontrá-lo no futuro.

    Gostaria então de contribuir acrescentando que, caso o ping falhe apresentando o erro “Ping Connection Pool for — is Failed. Ping failed Exception – Class name is wrong or classpath is not set for : com.mysql.jdbc.jdbc2.optional.MysqlDataSource Please check the server.log for more details.”, basta copiar o arquivo do conector do MySQL (no meu caso mysql-connector-java-5.1.16-bin.jar) para os seguintes diretórios:

    C:\glassfish3\lib
    C:\glassfish3\domains\domain1\lib
    C:\glassfish3\domains\domain1\lib\ext

    Restarte o servidor Glassfish e pronto, o ping funcionará com sucesso.

    Espero ter ajudado.

    Abraço.

  3. Luis obrigado pelo excelente post. Direto e reto no assunto.

    Porem me surgiu uma duvida no meu caso uso o postgres e funcionou perfeitamente. Porem estou execuntando o sistema de dentro da IDE e deixei o diver do postgres na pasta lib e não copiei pro server, qdo eu for colocar o sistema em produção, será necessário copiar o driver para a lib do glassfish ?

    Pegunto pq fucei as pastas do glassfish e não encontrei em lugar nenhum o driver do postgres😕

    Valeu

    [ ]`s

  4. Pingback: JAVA WEB e Acesso a Banco de Dados MySQL
  5. Alguem pode me dar uma ajuda? Estou tentando configurar o datasource, porem me da o erro abaixo:

    HTTP Status 500 – Internal Server Error

    type Exception report

    messageInternal Server Error

    descriptionThe server encountered an internal error that prevented it from fulfilling this request.

    exception
    javax.servlet.ServletException: javax.persistence.PersistenceException: Exception [EclipseLink-4021] (Eclipse Persistence Services – 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
    Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null]. Verify that you have set the expected driver class and URL. Check your login, persistence.xml or sessions.xml resource. The jdbc.driver property should be set to a class that is compatible with your database platform

    root cause
    javax.faces.el.EvaluationException: javax.persistence.PersistenceException: Exception [EclipseLink-4021] (Eclipse Persistence Services – 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
    Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null]. Verify that you have set the expected driver class and URL. Check your login, persistence.xml or sessions.xml resource. The jdbc.driver property should be set to a class that is compatible with your database platform

    root cause
    javax.persistence.PersistenceException: Exception [EclipseLink-4021] (Eclipse Persistence Services – 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
    Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null]. Verify that you have set the expected driver class and URL. Check your login, persistence.xml or sessions.xml resource. The jdbc.driver property should be set to a class that is compatible with your database platform

    root cause
    Exception [EclipseLink-4021] (Eclipse Persistence Services – 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
    Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null]. Verify that you have set the expected driver class and URL. Check your login, persistence.xml or sessions.xml resource. The jdbc.driver property should be set to a class that is compatible with your database platform

    note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1 logs.

    Grato,
    Anderson

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s