2016-12-17 12 views
1

Hibernate JPAでEJBのPOCを作成したかったのですが、それに続いてthis articleでしたが、以下のように接続例外が発生しています。私はon this threadという投稿の解決に努めましたが、まだ接続できませんでした。EJB3.0 with Hibernate JPA

専用のHibernate POCを作成しましたが、接続できますが、EJB - Hibernateの組み合わせからは接続できません。

22:27:42,258 INFO [org.hibernate.tool.hbm2ddl.SchemaExport] exporting generated schema to database 
    22:27:42,258 WARN [org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: com.mysql.jdbc.Driver; - nested throwable: (java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from [email protected]{vfs:///C:/Users/[myname]/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_AS_6.x1481865411227/deploy/EmployeeManagementEJB.jar})) 
     at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:261) [:6.1.0.Final] 
     at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:215) [:6.1.0.Final] 
     at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:648) [:6.1.0.Final] 
     at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:272) [:6.1.0.Final] 
     at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:690) [:6.1.0.Final] 
     at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:403) [:6.1.0.Final] 
     at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:414) [:6.1.0.Final] 
     at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:496) [:6.1.0.Final] 
     at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941) [:6.1.0.Final] 
     at 

//deleted few error lines due to space constrain 

org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getDriver(LocalManagedConnectionFactory.java:538) [:6.1.0.Final] 
     at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:228) [:6.1.0.Final] 
     ... 86 more 
    Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from [email protected]{vfs:///C:/Users/[myname]/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_AS_6.x1481865411227/deploy/EmployeeManagementEJB.jar} 
     at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:480) [jboss-classloader.jar:2.2.1.GA] 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) [:1.8.0_77] 
     at java.lang.Class.forName0(Native Method) [:1.8.0_77] 
     at java.lang.Class.forName(Class.java:348) [:1.8.0_77] 
     at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getDriver(LocalManagedConnectionFactory.java:523) [:6.1.0.Final] 
     ... 87 more 

    22:27:42,262 INFO [org.hibernate.validator.engine.resolver.DefaultTraversableResolver] Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. 
    22:27:42,270 INFO [org.hibernate.validator.engine.resolver.DefaultTraversableResolver] Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. 
    22:27:42,272 INFO [org.hibernate.util.NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces} 
    22:27:42,285 INFO [org.jboss.ejb3.session.SessionSpecContainer] Starting jboss.j2ee:jar=EmployeeManagementEJB.jar,name=ManageEmployeeBean,service=EJB3 
    22:27:42,294 INFO [org.jboss.ejb3.EJBContainer] STARTED EJB: com.jwt.ejb.business.impl.ManageEmployeeBean ejbName: ManageEmployeeBean 
    22:27:42,297 INFO [org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase] Binding the following Entries in Global JNDI: 

     ManageEmployeeBean/remote - EJB3.x Default Remote Business Interface 
     ManageEmployeeBean/remote-com.jwt.ejb.business.impl.ManageEmployeeBeanRemote - EJB3.x Remote Business Interface 

後、私のデータソース

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE datasources 
    PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN" 
    "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd"> 
<datasources> 
    <local-tx-datasource> 
     <jndi-name>EmpMngEJBDatasource</jndi-name> 
     <use-java-context>true</use-java-context> 
     <connection-url>jdbc:mysql://localhost:3306/new_schema</connection-url> 
     <driver-class>com.mysql.jdbc.Driver</driver-class> 
     <user-name>root</user-name> 
     <password>admin</password> 
    </local-tx-datasource>  
</datasources> 

後は、以下の

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 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" 
     version="2.0"> 
    <persistence-unit name="EmpMgmtPU" transaction-type="JTA"> 
    <jta-data-source>java:/EmpMngEJBDatasource</jta-data-source> 
      <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

を設定し、私のperstinceである後

package com.jwt.ejb.entity; 

import java.io.Serializable; 
import javax.persistence.*; 

@Entity(name="employee") 
public class Employee implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue 
    @Column(name = "id") 
    private Integer id; 

    @Column(name = "first_name", length = 50) 
    private String firstName; 

    @Column(name = "last_name", length = 50) 
    private String lastName; 

    @Column(name = "email", length = 50) 
    private String email; 

    //setter getter - trimed due to space constrain 
} 

私のエンティティであるマネージドBeanです

package com.jwt.ejb.business.impl; 

import java.util.List; 

import javax.ejb.Stateless; 
import javax.persistence.*; 

import com.jwt.ejb.entity.Employee; 
@Stateless 
public class ManageEmployeeBean implements ManageEmployeeBeanRemote { 

    @PersistenceContext(unitName = "EmpMgmtPU") 
    private EntityManager entityManager;  

    @Override 
    public boolean addEmployee(Employee employee) { 
     entityManager.persist(employee); 
     return true; 
    } 

    @Override 
    public List<Employee> getEmployees() { 
     return entityManager.createQuery("SELECT e FROM employee e").getResultList(); 
    } 

} 

package com.jwt.ejb.client; 

import java.util.List; 
import java.util.Properties; 

import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

import com.jwt.ejb.business.impl.ManageEmployeeBeanRemote; 
import com.jwt.ejb.entity.Employee; 


public class Client { 
    public static void main(String[] args) { 
     ManageEmployeeBeanRemote remote = doLookup(); 

     List<Employee> employees = remote.getEmployees(); 
     for(Employee emp : employees){ 
      System.out.println("---"); 
      System.out.println("getFirstName : "+emp.getFirstName()); 
      System.out.println("getLastName : "+emp.getLastName()); 
      System.out.println("getEmail : "+emp.getEmail()); 
      System.out.println("getId : "+emp.getId()); 
     } 
    } 

    private static ManageEmployeeBeanRemote doLookup() { 
     Context context = null; 
     ManageEmployeeBeanRemote bean = null; 
     try { 
      context = getInitialContext(); 
      bean = (ManageEmployeeBeanRemote) context.lookup(LOOKUP_STRING); 
     } catch (NamingException e) { 
      e.printStackTrace(); 
     } 
     return bean; 
    } 

    private static final String LOOKUP_STRING = "ManageEmployeeBean/remote"; 

    private static final String PROVIDER_URL = "jnp://localhost:1099"; 

    private static final String JNP_INTERFACES = "org.jboss.naming:org.jnp.interfaces"; 

    private static final String INITIAL_CONTEXT_FACTORY = "org.jnp.interfaces.NamingContextFactory"; 
    private static Context initialContext; 

    public static Context getInitialContext() throws NamingException { 
     if (initialContext == null) { 
      // Properties extends HashTable 
      Properties prop = new Properties(); 
      prop.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); 
      prop.put(Context.URL_PKG_PREFIXES, JNP_INTERFACES); 
      prop.put(Context.PROVIDER_URL, PROVIDER_URL); 
      initialContext = new InitialContext(prop); 
     } 
     return initialContext; 
    } 

} 
+0

は、なぜあなたはとても古いJBossのチュートリアルを使用していますか?現在のJbossはEap 7です。 –

+0

私は知っている、ちょうど開始したい、チュートリアルで推奨されているものは6だったので – Ameya

答えて

1

ドライバー・クラスがクラスパスに利用できることでなければなりません、私のクライアントコードです。最も簡単な方法は、.jarライブラリを配備ディレクトリに置くことです。

EAP 6の場合には、次のとおりです。 JBOSS_HOME /スタンドアロン/展開/

+0

ああ、私はあなたがjbossライブラリ(C:\ jboss-6.1.0。 Final \ lib)...デプロイメントフォルダにも追加してみましょう。私はすべてのlibと展開で、コネクタの瓶を置いてパースペクティブの – Ameya

+0

感謝は、私は私のJBossのホームフォルダ内のスタンドアロンサーバーのフォルダを持っていませんでした。私の驚いたことに、それは働き始めた。それから、一度に1つのコネクタジャーを取り外して、1つのコネクタジャーが残るまで接続の問題をチェックするためにサーバーを再起動しました。ファイルはlibフォルダにありますが、C:\ jboss-6.1.0.Final \ server \ default \ libにあります。 – Ameya