最近在看Struts2和EJB3,出于好奇,就想试试用部署在tomcat上的struts2去访问部署在jboss上的EJB3程序。对于EJB3之前只用过里面的jpa,感觉很好用,或者说注释很方便,比xml好用。谁知就这个程序耗了我三四个晚上的时间。现在终于搞定了,记录一下,也帮助后来者少走弯路。(感谢论坛id:小疯子的热情帮助^-^)
首先是Struts2的前端页面,so easy!!输入用户名密码,提交。。。。
代码如下:
Xml代码
<form action="login.action" method="post">
name:<input type="text" name="name"/><br>
password:<input type="password" name="psd"/><br>
<input type="submit" value="submit">
</form>
<form action="login.action" method="post">
name:<input type="text" name="name"/><br>
password:<input type="password" name="psd"/><br>
<input type="submit" value="submit">
</form>
配置web.xml文件
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*.action</url-pattern>
</filter-mapping>
接着是struts2.xml文件
Xml代码
<struts>
<!-- Add packages here -->
<package name="struts2" extends="struts-default">
<action name="login" class="org.ivan.struts2.LoginAction">
<result name="success">success.jsp</result>
<result name="failture">failture.jsp</result>
</action>
</package>
</struts>
<struts>
<!-- Add packages here -->
<package name="struts2" extends="struts-default">
<action name="login" class="org.ivan.struts2.LoginAction">
<result name="success">success.jsp</result>
<result name="failture">failture.jsp</result>
</action>
</package>
</struts>
Action类
Java代码
package org.ivan.struts2;
import java.util.Properties;
import javax.naming.*;
import org.ivan.ejb.CheckBean;
import org.ivan.struts2.bean.Point;
import org.jnp.interfaces.NamingContextFactory;
public class LoginAction{
private String name;
private String psd;
private int age;
private Point point;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsd() {
return psd;
}
public void setPsd(String psd) {
this.psd = psd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public String execute() throws Exception {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
package org.ivan.struts2;
import java.util.Properties;
import javax.naming.*;
import org.ivan.ejb.CheckBean;
import org.ivan.struts2.bean.Point;
import org.jnp.interfaces.NamingContextFactory;
public class LoginAction{
private String name;
private String psd;
private int age;
private Point point;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsd() {
return psd;
}
public void setPsd(String psd) {
this.psd = psd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public String execute() throws Exception {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
这些东西随便找本struts2的书籍,一看就知道了,不多说。
程序往tomcat里一部署就搞定了。。
到这里都没遇到问题。
下面编写EJB程序,一个sessionbean,有个方法check,接收name和password参数,验证是否为Ivan和dd。
代码如下:
Java代码
package org.ivan.ejb;
public interface CheckBean {
boolean check(String name,String password);
}
package org.ivan.ejb;
public interface CheckBean {
boolean check(String name,String password);
}
实现类
Java代码
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@Override
public boolean check(String name, String password) {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@Override
public boolean check(String name, String password) {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
ok.依然很顺。部署到jboss4.22上,看见这个bean了。
一直到这里都没卡住。。。。。窃喜。。。。
下面问题来了,开始两个程序的相互调用。
修改Action类里的execute方法。改成如下代码。
Java代码
public String execute() throws Exception {
/*------------1---------------*/
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
InitialContext context = new InitialContext(props);
/*--------------2----------------*/
CheckBean checker = (CheckBean) context.lookup("CheckBeanImpl/remote");
if (checker.check(name, psd)) {
return "success";
}
return "failture";
}
public String execute() throws Exception {
/*------------1---------------*/
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
InitialContext context = new InitialContext(props);
/*--------------2----------------*/
CheckBean checker = (CheckBean) context.lookup("CheckBeanImpl/remote");
if (checker.check(name, psd)) {
return "success";
}
return "failture";
}
就这几行代码,我就折腾了一个晚上。。。。。晕。
首先,在1处,如果不创建Properties类,而写配置文件的话找不到配置文件。。。。它老找tomcat下的相应属性。(可能位置没放对,目前不清楚,待会再试试!)
再来,改成了目前这样的代码,运行,提示找不到org.jnp.interfaces.NamingContextFactory。。。。又搞一小时,需要把jboss目录下的client目录下的jar包添加到struts2程序的lib里。
接着,说找不到CheckBean接口。。。我已经把struts项目引了ejb项目了,依然没用,最后,拷贝了一份CheckBean到struts里面。
好不容易啊,终于有结果了。。。
再进一步,jpa访问数据库来验证数据。
数据库就两字段,name,password....
接着是EntityBean
Java代码
package org.ivan.ejb.jpa;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name="user")
public class UserBean {
@Id
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package org.ivan.ejb.jpa;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name="user")
public class UserBean {
@Id
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
继续,修改CheckBeanImpl里的代码,调用EntityBean访问数据库。
Java代码
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@PersistenceContext(unitName="loginDS") //注入EntityManager,现在很流行注入啊,呵呵
EntityManager em ;
@Override
public boolean check(String name, String password) {
// if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
// return true;
// }
// return false;
String sql = "SELECT u FROM user u WHERE u.name = :n AND u.password = :p";
Query query = em.createQuery(sql);
query.setParameter("n", name);
query.setParameter("p", password);
List<UserBean> us = query.getResultList();
if(us.size() > 0){
return true;
}
return false;
}
}
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@PersistenceContext(unitName="loginDS") //注入EntityManager,现在很流行注入啊,呵呵
EntityManager em ;
@Override
public boolean check(String name, String password) {
// if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
// return true;
// }
// return false;
String sql = "SELECT u FROM user u WHERE u.name = :n AND u.password = :p";
Query query = em.createQuery(sql);
query.setParameter("n", name);
query.setParameter("p", password);
List<UserBean> us = query.getResultList();
if(us.size() > 0){
return true;
}
return false;
}
}
配置persistence.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="loginDS">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<jta-data-source>java:/MySqlDS</jta-data-source>
<class>org.ivan.ejb.jpa.UserBean</class>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="loginDS">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<jta-data-source>java:/MySqlDS</jta-data-source>
<class>org.ivan.ejb.jpa.UserBean</class>
</persistence-unit>
</persistence>
好了,问题来了。。。。
它死活找不到数据源,网上搜了半天。。。。SessionBean访问数据源好像只能通过jta来配。。。。jta....从来没接触过。。就这个问题,郁闷了两天。最后终于解决了。。。
首先,到jboss-4.2.2.GA\docs\examples\jca目录下,看看,一堆配置文件。。。我用的mysql,就拷贝mysql-ds.xml到jboss-4.2.2.GA\server\default\deploy目录下。修改内容如下。
Xml代码
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/login</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/login</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
应该很好懂吧。。。这就配置了mysql的数据源了。然后在persistence.xml里调用。
这一句
Xml代码
<jta-data-source>java:/MySqlDS</jta-data-source>
<jta-data-source>java:/MySqlDS</jta-data-source>
呼,再运行,又报错。。。。。找不到mysql驱动。。。。。晕,这些东西我早放程序里面去了。。。。
火了,直接把jar包给拷贝到了jboss的lib里去了。。。。。。
搞定。。。晕。。。
哎,花了一周时间就写了这么个程序。还从没花这么长时间来入门的。单独的struts2,ejb3程序也就一次搞定的。两者结合就搞出这么多毛病来。
要学的东西实在是太多了啊。。。
jta,jndi,rmi,jboss......
之前只用过tomcat,jetty等web容器,也用过glassfish,也就当web容器用。。。看来应用服务器要复杂得多啊。努力。。。。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangpinggod/archive/2008/08/20/2801691.aspx
首先是Struts2的前端页面,so easy!!输入用户名密码,提交。。。。
代码如下:
Xml代码
<form action="login.action" method="post">
name:<input type="text" name="name"/><br>
password:<input type="password" name="psd"/><br>
<input type="submit" value="submit">
</form>
<form action="login.action" method="post">
name:<input type="text" name="name"/><br>
password:<input type="password" name="psd"/><br>
<input type="submit" value="submit">
</form>
配置web.xml文件
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*.action</url-pattern>
</filter-mapping>
接着是struts2.xml文件
Xml代码
<struts>
<!-- Add packages here -->
<package name="struts2" extends="struts-default">
<action name="login" class="org.ivan.struts2.LoginAction">
<result name="success">success.jsp</result>
<result name="failture">failture.jsp</result>
</action>
</package>
</struts>
<struts>
<!-- Add packages here -->
<package name="struts2" extends="struts-default">
<action name="login" class="org.ivan.struts2.LoginAction">
<result name="success">success.jsp</result>
<result name="failture">failture.jsp</result>
</action>
</package>
</struts>
Action类
Java代码
package org.ivan.struts2;
import java.util.Properties;
import javax.naming.*;
import org.ivan.ejb.CheckBean;
import org.ivan.struts2.bean.Point;
import org.jnp.interfaces.NamingContextFactory;
public class LoginAction{
private String name;
private String psd;
private int age;
private Point point;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsd() {
return psd;
}
public void setPsd(String psd) {
this.psd = psd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public String execute() throws Exception {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
package org.ivan.struts2;
import java.util.Properties;
import javax.naming.*;
import org.ivan.ejb.CheckBean;
import org.ivan.struts2.bean.Point;
import org.jnp.interfaces.NamingContextFactory;
public class LoginAction{
private String name;
private String psd;
private int age;
private Point point;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsd() {
return psd;
}
public void setPsd(String psd) {
this.psd = psd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public String execute() throws Exception {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
这些东西随便找本struts2的书籍,一看就知道了,不多说。
程序往tomcat里一部署就搞定了。。
到这里都没遇到问题。
下面编写EJB程序,一个sessionbean,有个方法check,接收name和password参数,验证是否为Ivan和dd。
代码如下:
Java代码
package org.ivan.ejb;
public interface CheckBean {
boolean check(String name,String password);
}
package org.ivan.ejb;
public interface CheckBean {
boolean check(String name,String password);
}
实现类
Java代码
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@Override
public boolean check(String name, String password) {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@Override
public boolean check(String name, String password) {
if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
return true;
}
return false;
}
}
ok.依然很顺。部署到jboss4.22上,看见这个bean了。
一直到这里都没卡住。。。。。窃喜。。。。
下面问题来了,开始两个程序的相互调用。
修改Action类里的execute方法。改成如下代码。
Java代码
public String execute() throws Exception {
/*------------1---------------*/
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
InitialContext context = new InitialContext(props);
/*--------------2----------------*/
CheckBean checker = (CheckBean) context.lookup("CheckBeanImpl/remote");
if (checker.check(name, psd)) {
return "success";
}
return "failture";
}
public String execute() throws Exception {
/*------------1---------------*/
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
InitialContext context = new InitialContext(props);
/*--------------2----------------*/
CheckBean checker = (CheckBean) context.lookup("CheckBeanImpl/remote");
if (checker.check(name, psd)) {
return "success";
}
return "failture";
}
就这几行代码,我就折腾了一个晚上。。。。。晕。
首先,在1处,如果不创建Properties类,而写配置文件的话找不到配置文件。。。。它老找tomcat下的相应属性。(可能位置没放对,目前不清楚,待会再试试!)
再来,改成了目前这样的代码,运行,提示找不到org.jnp.interfaces.NamingContextFactory。。。。又搞一小时,需要把jboss目录下的client目录下的jar包添加到struts2程序的lib里。
接着,说找不到CheckBean接口。。。我已经把struts项目引了ejb项目了,依然没用,最后,拷贝了一份CheckBean到struts里面。
好不容易啊,终于有结果了。。。
再进一步,jpa访问数据库来验证数据。
数据库就两字段,name,password....
接着是EntityBean
Java代码
package org.ivan.ejb.jpa;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name="user")
public class UserBean {
@Id
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package org.ivan.ejb.jpa;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name="user")
public class UserBean {
@Id
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
继续,修改CheckBeanImpl里的代码,调用EntityBean访问数据库。
Java代码
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@PersistenceContext(unitName="loginDS") //注入EntityManager,现在很流行注入啊,呵呵
EntityManager em ;
@Override
public boolean check(String name, String password) {
// if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
// return true;
// }
// return false;
String sql = "SELECT u FROM user u WHERE u.name = :n AND u.password = :p";
Query query = em.createQuery(sql);
query.setParameter("n", name);
query.setParameter("p", password);
List<UserBean> us = query.getResultList();
if(us.size() > 0){
return true;
}
return false;
}
}
package org.ivan.ejb.impl;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;
@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {
@PersistenceContext(unitName="loginDS") //注入EntityManager,现在很流行注入啊,呵呵
EntityManager em ;
@Override
public boolean check(String name, String password) {
// if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
// return true;
// }
// return false;
String sql = "SELECT u FROM user u WHERE u.name = :n AND u.password = :p";
Query query = em.createQuery(sql);
query.setParameter("n", name);
query.setParameter("p", password);
List<UserBean> us = query.getResultList();
if(us.size() > 0){
return true;
}
return false;
}
}
配置persistence.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="loginDS">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<jta-data-source>java:/MySqlDS</jta-data-source>
<class>org.ivan.ejb.jpa.UserBean</class>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="loginDS">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<jta-data-source>java:/MySqlDS</jta-data-source>
<class>org.ivan.ejb.jpa.UserBean</class>
</persistence-unit>
</persistence>
好了,问题来了。。。。
它死活找不到数据源,网上搜了半天。。。。SessionBean访问数据源好像只能通过jta来配。。。。jta....从来没接触过。。就这个问题,郁闷了两天。最后终于解决了。。。
首先,到jboss-4.2.2.GA\docs\examples\jca目录下,看看,一堆配置文件。。。我用的mysql,就拷贝mysql-ds.xml到jboss-4.2.2.GA\server\default\deploy目录下。修改内容如下。
Xml代码
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/login</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/login</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
应该很好懂吧。。。这就配置了mysql的数据源了。然后在persistence.xml里调用。
这一句
Xml代码
<jta-data-source>java:/MySqlDS</jta-data-source>
<jta-data-source>java:/MySqlDS</jta-data-source>
呼,再运行,又报错。。。。。找不到mysql驱动。。。。。晕,这些东西我早放程序里面去了。。。。
火了,直接把jar包给拷贝到了jboss的lib里去了。。。。。。
搞定。。。晕。。。
哎,花了一周时间就写了这么个程序。还从没花这么长时间来入门的。单独的struts2,ejb3程序也就一次搞定的。两者结合就搞出这么多毛病来。
要学的东西实在是太多了啊。。。
jta,jndi,rmi,jboss......
之前只用过tomcat,jetty等web容器,也用过glassfish,也就当web容器用。。。看来应用服务器要复杂得多啊。努力。。。。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangpinggod/archive/2008/08/20/2801691.aspx