Topic: (原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) |
Print this page |
1.(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) | Copy to clipboard |
Posted by: struggle Posted on: 2003-06-17 14:45 偶用的JBOSS和TOMCAT的结合版,为jboss-3.0.7_jakarta-tomcat-4.1.24。偶用的是 JBOSS+MYSQL,没有用到IDE。建议初学者先不要用IDE(如jb)和服务器(比如JBOSS 或WEBLOGIC)结合。建议先将会话BEAN、实体BEAN程序的流程弄明白后再用IDE。 比如部署描述符里面的各个项都是什么意思,何时通过HOME接口来实例化BEAN类 中的EJB对象。容器都作了些什么等等。 附件中的代码是我成功运行后的代码.此例是《精通EJB第二版》第七章CMP的例子。 当然没看过此书也没关系,此贴最后的附件中附带有详细的能运行的源代码。此例 虽然偶在WEBLOGIC7.0下运行成功,在JBOSS下运行过程中得到了Joshua Lee大侠的 顶力帮助,却也花了偶半天时间才运行通。可见初学者之艰辛! 好了,费话少说。开始! 步骤: 1. 下载程序 http://prdownloads.sourceforge.net/jboss/?sort_by=date&sort=desc 下载jboss-3.0.7_jakarta-tomcat-4.1.24.zip http://kiwinz.kiwiplan.co.nz/mysql/Downloads/MySQL-Max-3.23/ 下载mysql-max-3.23.55-win.zip 2. 安装MYSQL及JBOSS. 3. 建立数据库表products。 mysql> use test; mysql> create table products (productId varchar(64), name varchar(64), basePrice numeric(18), description varchar(64)); 4. 为JBOSS连接数据库作准备 a. 将MYSQL的驱动拷贝到F:\jboss-3.0.7_jakarta-tomcat-4.1.24\server\default\lib目录下。这 里F:\jboss-3.0.7_jakarta-tomcat-4.1.24是JBOSS的安装目录。 b. 将文件F:\jboss-3.0.7_jakarta-tomcat-4.1.24\docs\examples\jca\mysql-service.xml (如果是其它数据库则编辑相应的XML文件)中相关项设置正确。我这里的是这样: <config-property name="ConnectionURL" type="java.lang.String"> jdbc:mysql://localhost:3306/test </config-property> <config-property name="DriverClass" type="java.lang.String"> org.gjt.mm.mysql.Driver </config-property> <config-property name="UserName" type="java.lang.String">root</config-property> <config-property name="Password" type="java.lang.String">yang900</config-property> test为用到的数据库,root和yang900分别为MYSQL的用户名和密码。 c. 将上述文件mysql-service.xml保存并拷贝到目录:F:\jboss-3.0.7_jakarta-tomcat-4.1.24\server\default\deploy。 5. 编写源代码及相关部署描述符。 WEBLOGIC7.0中相关的两个文件weblogic-ejb-jar.xml、weblogic-cmp-rdbms-jar.xml在这 里分别对应为:jboss.xml、jbosscmp-jdbc.xml。其写法也差不多少。如下: 源代码 远程接口(Product.java) package examples; import javax.ejb.*; import java.rmi.RemoteException; import java.util.*; /** * 这些是ProductBean的公共的商务方法. * * 在远程客户端程序与Bean交互时,这个接口就是它们 * 所要操作的。EJB容器将实现这个接口,实现的对象实例 * 叫做EJB对象,它委托给ProductBean类的实例调用。 */ public interface Product extends EJBObject { // Getter/setter 方法 public String getName() throws RemoteException; public void setName(String name) throws RemoteException; public String getDescription() throws RemoteException; public void setDescription(String description) throws RemoteException; public double getBasePrice() throws RemoteException; public void setBasePrice(double basePrice) throws RemoteException; public String getProductId() throws RemoteException; } HOME接口(ProductHome.java) package examples; import javax.ejb.*; import java.rmi.RemoteException; import java.util.Collection; /** * 这是Product的Home接口. * EJB服务器的代码粘合工具实现这个接口。 * 实现的对象叫做Home对象,并作为一个制造 * EJB对象的生成库提供服务。 * * Home接口中有一个create() 方法,对应于ProductBean * 的ejbCreat()方法。 */ public interface ProductHome extends EJBHome { /* * 生成一个产品 * * @param productID 产品的号码(唯一的) * @param name 产品的名称 * @param description 产品的描述 * @param basePrice 产品的基础价格 * * @return 新创建的EJB对象 */ public Product create(String productID, String name, String description, double basePrice) throws CreateException, RemoteException; // 定位器方法(Finder methods)。容器实现这些方法。 // 你可以利用EJB容器的工具和EJB-QL来自定义这些方法的功能。 public Collection findByName(String name) throws FinderException, RemoteException; public Collection findByDescription(String description) throws FinderException, RemoteException; public Collection findByBasePrice(double basePrice) throws FinderException, RemoteException; public Collection findExpensiveProducts(double minPrice) throws FinderException, RemoteException; public Collection findCheapProducts(double maxPrice) throws FinderException, RemoteException; public Collection findAllProducts() throws FinderException, RemoteException; public Product findByPrimaryKey(ProductPK pk) throws FinderException, RemoteException; } 主键类(ProductPK.java) package examples; import java.io.Serializable; /** * 'Product' Container-Managed Entity Bean的主键类 */ public class ProductPK implements java.io.Serializable { /* * 注意:主键域必须是CMP实体Bean的域的一个子集。在Bean * 中标识为容器管理的域是productID, name, desc, 和basePrice. * 因此,主键域需要来自于这个集合。 */ public String productId; public ProductPK() { } public ProductPK(String productId) { this.productId = productId; } public boolean equals(Object obj) { if (obj != null) { if (this.getClass().equals(obj.getClass())) { ProductPK that = (ProductPK) obj; return (((this.productId == null) && (that.productId == null)) || (this.productId != null && this.productId.equals(that.productId))); } } return false; } public int hashCode() { return productId.hashCode(); } public String toString() { return productId.toString(); } } CMP的BEAN实现类(ProductBean.java) package examples; import javax.ejb.*; /** * Entity Bean示范Container-Managed persistence. * * 这是一个产品,它是持久的。它有一个ID #, 一个 name, * 一个description, 和一个 base price. */ abstract public class ProductBean implements EntityBean { protected EntityContext ctx; public ProductBean() { } //---------------------------------------------------------------- // 开始抽象的 get/set 方法 //---------------------------------------------------------------- public abstract String getName(); public abstract void setName(String name); public abstract String getDescription(); public abstract void setDescription(String description); public abstract double getBasePrice(); public abstract void setBasePrice(double basePrice); public abstract String getProductId(); public abstract void setProductId(String productId); //---------------------------------------------------------------- // 结束抽象的 get/set 方法 //---------------------------------------------------------------- //---------------------------------------------------------------- // 开始EJB必需的方法,方法由容器调用, // 不是由客户端调用。 //---------------------------------------------------------------- /** * 由容器调用。 * 执行时可获得需要的资源。 */ public void ejbActivate() { System.out.println("ejbActivate() called."); } /** * EJB容器恰好在它从数据库中删除实体Bean之前调用这个方法。 * 当客户端调用home.remove()方法时,这个方法与之对应。 */ public void ejbRemove() { System.out.println("ejbRemove() called."); } /** * 由容器调用。 * 释放占有的资源。 */ public void ejbPassivate() { System.out.println("ejbPassivate () called."); } /** * 由容器调用。 更新实体Bean实例反映存储在数据库中的当前值。 * 因为我们正在使用容器管理的持久,所以可以让此方法空着。 * EJB容器将自动为我们装载。 */ public void ejbLoad() { System.out.println("ejbLoad() called."); } /** * 由容器调用。 更新数据库反映这个内存中的实体Bean实例代表的当前值。 * 因为我们正在使用容器管理的持久,所以可以让此方法空着。 * EJB容器将自动为我们保存到子类中。 */ public void ejbStore() { System.out.println("ejbStore() called."); } /** * 由容器调用。 把这个Bean实例和一个特定的环境对象关联起来。一旦这么做, * 我们可以查询环境对象得到环境信息,例如Bean通过特性自定义的信息。 */ public void setEntityContext(EntityContext ctx) { System.out.println("setEntityContext called"); this.ctx = ctx; } /** * 由容器调用。把这个Bean实例与一个特定的环境对象分离。 */ public void unsetEntityContext() { System.out.println("unsetEntityContext called"); this.ctx = null; } /** * ejbCreate()调用之后调用。现在,Bean可以从它的环境中提取它的EJB对象。 * 并当作一个“this”参数传递给它。 */ public void ejbPostCreate(String productID, String name, String description, double basePrice) { System.out.println("ejbPostCreate() called"); } /** * 这是对应Home接口的create()方法的初始化方法。 * * 在客户端调用Home对象的create()方法时,Home对象然后调用 * 这个ejbCreate()方法。 * * 注意: 因为我们使用Container-Managed Persistence, * 所以该方法返回void. 用Bean-Managed Persistence, * 则返回 PK. 这是因为我们的Bean有责任处理主键和访问数据库。 * 现在我们让容器来管理持久,容器产生主键。 * * 我们仍然需要用从客户端传递的参数初始化我们的Bean的域, * 好让容器可以检查我们的Bean并创建相应的数据库条目。 */ public ProductPK ejbCreate(String productID, String name, String description, double basePrice) throws CreateException { //注意上一行的红色部分throws CreateException在JBOSS3.0.7中如果不抛出此异常,程序 能够正常运行,但在JBOSS3.2.1中如果不抛出此异常部署就不会成功。 System.out.println("ejbCreate() called"); setProductId(productID); setName(name); setDescription(description); setBasePrice(basePrice); return new ProductPK(productID); } // 没有定位器方法 - 它们由容器实现 //---------------------------------------------------------------- // 结束EJB必需的方法。 //---------------------------------------------------------------- } 部署描述文件 ejb-jar.xml: 这个文件很重要,容器怎么知道用户怎样操作一些资源比如JDBC呢, 就是通过这个文件来使容器做许多工作。 <?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <entity> <ejb-name>Product</ejb-name> <home>examples.ProductHome</home> <remote>examples.Product</remote> <ejb-class>examples.ProductBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.String</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>ProductBean</abstract-schema-name> <cmp-field> <field-name>productID</field-name> </cmp-field> <cmp-field> <field-name>name</field-name> </cmp-field> <cmp-field> <field-name>description</field-name> </cmp-field> <cmp-field> <field-name>basePrice</field-name> </cmp-field> <primkey-field>productID</primkey-field> <query> <query-method> <method-name>findByName</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT OBJECT(a) FROM ProductBean AS a WHERE a.name = ?1]]> </ejb-ql> </query> <query> <query-method> <method-name>findByDescription</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT OBJECT(a) FROM ProductBean AS a WHERE a.description = ?1]]> </ejb-ql> </query> <query> <query-method> <method-name>findByBasePrice</method-name> <method-params> <method-param>double</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT OBJECT(a) FROM ProductBean AS a WHERE a.basePrice = ?1]]> </ejb-ql> </query> <query> <query-method> <method-name>findExpensiveProducts</method-name> <method-params> <method-param>double</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT OBJECT(a) FROM ProductBean AS a WHERE a.basePrice > ?1]]> </ejb-ql> </query> <query> <query-method> <method-name>findCheapProducts</method-name> <method-params> <method-param>double</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT OBJECT(a) FROM ProductBean AS a WHERE a.basePrice < ?1]]> </ejb-ql> </query> <query> <query-method> <method-name>findAllProducts</method-name> <method-params> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT OBJECT(a) FROM ProductBean AS a WHERE a.productID IS NOT NULL]]> </ejb-ql> </query> </entity> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>Product</ejb-name> <method-intf>Remote</method-intf> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> jboss.xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd"> <jboss> <enterprise-beans> <entity> <ejb-name>Product</ejb-name> <jndi-name>RemoteProductHome</jndi-name> </entity> </enterprise-beans> </jboss> jbosscmp-jdbc.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd"> <jbosscmp-jdbc> <defaults> <datasource>java:/MySqlDS</datasource> <datasource-mapping>mySQL</datasource-mapping> <create-table>true</create-table> <remove-table>false</remove-table> <pk-constraint>true</pk-constraint> <preferred-relation-mapping>foreign-key</preferred-relation-mapping> </defaults> <enterprise-beans> <entity> <ejb-name>Product</ejb-name> <table-name>Products</table-name> <cmp-field> <field-name>name</field-name> <column-name>name</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(64)</sql-type> </cmp-field> <cmp-field> <field-name>productID</field-name> <column-name>productID</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(64)</sql-type> </cmp-field> <cmp-field> <field-name>description</field-name> <column-name>description</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(64)</sql-type> </cmp-field> <cmp-field> <field-name>basePrice</field-name> <column-name>basePrice</column-name> <jdbc-type>DOUBLE</jdbc-type> <sql-type>DOUBLE</sql-type> </cmp-field> </entity> </enterprise-beans> </jbosscmp-jdbc> 客户端测试程序 客户端程序(ProductClient.java): //这只是一个测试程序,不过这里要改写为SERVELT或者JSP文件 //所以源代码中用不上这个文件。这里只作为参考。 package examples; import javax.ejb.*; import javax.naming.*; import java.rmi.*; import java.util.*; /** * Container-Managed Entity Bean, Product的客户端测试应用程序。 */ public class ProductClient { public static void main(String[] args) throws Exception { ProductHome home = null; try { Context ctx = null; String url = "t3://localhost:7001"; try { /* * 获得系统属性,为JNDI初始化做准备 */ Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory"); properties.put(Context.PROVIDER_URL,url); ctx = new InitialContext(properties); } catch(NamingException e) { e.printStackTrace(); } /* * 得到一个Product Home对象的引用 - 制造产品EJB对象的生成库。 */ home = (ProductHome) javax.rmi.PortableRemoteObject.narrow(ctx.lookup("ProductRemote"), ProductHome.class); /* * 用生成库创建产品EJB对象。 */ home.create("123-456-7890", "P5-350", "350 Mhz Pentium", 200); home.create("123-456-7891", "P5-400", "400 Mhz Pentium", 300); home.create("123-456-7892", "P5-450", "450 Mhz Pentium", 400); home.create("123-456-7893", "SD-64", "64 MB SDRAM", 50); home.create("123-456-7894", "SD-128", "128 MB SDRAM", 100); home.create("123-456-7895", "SD-256", "256 MB SDRAM", 200); /* * 查找一个产品, 并打印输出它的产品描述。 */ Iterator i = home.findByName("SD-64").iterator(); System.out.println("The following product descriptions match the product name SD-64:"); while (i.hasNext()) { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); System.out.println(prod.getDescription()); } /* * 查找所有价值$200的产品 */ System.out.println("Calling finder to find all products that cost $200"); i = home.findByBasePrice(200).iterator(); while (i.hasNext()) { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); System.out.println(prod.getDescription()); } } catch (Exception e) { e.printStackTrace(); } finally { if (home != null) { System.out.println("Destroying products.."); /* * 删除所有的产品 */ Iterator i = home.findAllProducts().iterator(); while (i.hasNext()) { try { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); if (prod.getProductId().startsWith("123")) { prod.remove(); } } catch (Exception e) { e.printStackTrace(); } } } } } } 改写的SERVLET文件如下: import java.sql.*; import javax.sql.DataSource; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import examples.*; import java.util.*; import javax.rmi.*; import javax.naming.InitialContext; public class helloservlet extends HttpServlet{ ProductHome home = null; public void service(HttpServletRequest req,HttpServletResponse res) throws IOException { res.setContentType("text/html"); PrintWriter out =res.getWriter(); out.println("<html><head><title>Test datasource</title></head>"); try { /* * Get a reference to the Product Home Object - the * factory for Product EJB Objects */ InitialContext ctx = new InitialContext(); home = (ProductHome) javax.rmi.PortableRemoteObject.narrow(ctx.lookup("RemoteProductHome"), ProductHome.class); /* * Use the factory to create the Product EJB Object */ home.create("123-456-7890", "P5-350", "350 Mhz Pentium", 200); home.create("123-456-7891", "P5-400", "400 Mhz Pentium", 300); home.create("123-456-7892", "P5-450", "450 Mhz Pentium", 400); home.create("123-456-7893", "SD-64", "64 MB SDRAM", 50); home.create("123-456-7894", "SD-128", "128 MB SDRAM", 100); home.create("123-456-7895", "SD-256", "256 MB SDRAM", 200); /* * Find a Product, and print out it's description */ Iterator i = home.findByName("SD-64").iterator(); out.println("The following product descriptions match the product name SD-64:<br>"); while (i.hasNext()) { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); out.println(prod.getDescription()+"<br>"); } /* * Find all products that cost $200 */ out.println("Calling finder to find all products that cost $200<br>"); i = home.findByBasePrice(200).iterator(); while (i.hasNext()) { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); out.println(prod.getDescription()+"<br>"); } }catch (Exception e) { e.printStackTrace(); }finally { if (home != null) { out.println("Destroying products..<br>"); /* * Find all the products */ try { Iterator i = home.findAllProducts().iterator(); while (i.hasNext()) { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); if (prod.getProductID().startsWith("00123")) { prod.remove(); } } }catch (Exception e) { e.printStackTrace(); } } } out.println("</body></html>"); } } 改写的JSP文件如下: <%@page contentType="text/html; charset=gb2312" %> <%@page import="javax.ejb.*" %> <%@page import="javax.naming.*" %> <%@page import="java.rmi.*" %> <%@page import="java.util.*" %> <%@page import="examples.*" %> <% /** * Client test application on a Container-Managed Entity Bean, Product. */ ProductHome home = null; try { /* * Get a reference to the Product Home Object - the * factory for Product EJB Objects */ Context ctx = new InitialContext(System.getProperties()); home = (ProductHome) javax.rmi.PortableRemoteObject.narrow(ctx.lookup("RemoteProductHome"), ProductHome.class); /* * Use the factory to create the Product EJB Object */ home.create("123-456-7890", "P5-350", "350 Mhz Pentium", 200); home.create("123-456-7891", "P5-400", "400 Mhz Pentium", 300); home.create("123-456-7892", "P5-450", "450 Mhz Pentium", 400); home.create("123-456-7893", "SD-64", "64 MB SDRAM", 50); home.create("123-456-7894", "SD-128", "128 MB SDRAM", 100); home.create("123-456-7895", "SD-256", "256 MB SDRAM", 200); /* * Find a Product, and print out it's description */ Iterator i = home.findByName("SD-64").iterator(); System.out.println("The following product descriptions match the product name SD-64:"); while (i.hasNext()) { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); System.out.println(prod.getDescription()); } /* * Find all products that cost $200 */ System.out.println("Calling finder to find all products that cost $200"); i = home.findByBasePrice(200).iterator(); while (i.hasNext()) { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); System.out.println(prod.getDescription()); } out.println("祝贺您!运行成功!(哈哈,struggle所写)"); } catch (Exception e) { e.printStackTrace(); } finally { if (home != null) { System.out.println("Destroying products.."); /* * Find all the products */ Iterator i = home.findAllProducts().iterator(); while (i.hasNext()) { try { Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class); if (prod.getProductID().startsWith("123")) { prod.remove(); } } catch (Exception e) { e.printStackTrace(); } } } } %> 7. 打包为JAR文件 将相关类文件以及三个部署描述符文件打包成一个JAR文件,并拷贝到目录: F:\jboss-3.0.7_jakarta-tomcat-4.1.24\server\default\deploy 注意以上打包成jar的文件目录如下: ------jbossCMP.jar ------------examples ------------------Product.class ------------------ProductBean.class ------------------ProductHome.class ------------------ProductPK.class ------------META-INF ------------------ejb-jar.xml ------------------jboss.xml ------------------jbosscmp-jdbc.xml 8. 打包war文件 将客户端程序改写为SERVLET程序,编译生成class文件。并放到war文件中,并有 如下文件结构: -------test.war -------------- WEB-INF ------------------------ web.xml ------------------------ classes -------------------------------- helloservlet.class 其中helloservlet.class文件是改写后的SERVLET编译后的文件。Web.xml是和此SERVELT 相关的部署文件。很简单,具体可见源码。 9. 运行 将此war文件也拷贝到F:\jboss-3.0.7_jakarta-tomcat-4.1.24\server\default\deploy目录, 然后通过F:\jboss-3.0.7_jakarta-tomcat-4.1.24\bin\run.bat启动JBOSS服务 然后通过http://localhost:8080/test/helloservlet就可看到相关输出结果。 客户端输出如下: The following product descriptions match the product name SD-64: 64 MB SDRAM Calling finder to find all products that cost $200 350 Mhz Pentium 256 MB SDRAM Destroying products.. 服务器端输出为: 这里和WEBLOGIC7.0运行此例时WEBLOGIC服务器窗口输出不太一样。 setEntityContext called ejbCreate() called ejbPostCreate() called ejbStore() called. setEntityContext called ejbCreate() called ejbPostCreate() called ejbStore() called. setEntityContext called ejbCreate() called ejbPostCreate() called ejbStore() called. setEntityContext called ejbCreate() called ejbPostCreate() called ejbStore() called. setEntityContext called ejbCreate() called ejbPostCreate() called ejbStore() called. setEntityContext called ejbCreate() called ejbPostCreate() called ejbStore() called. setEntityContext called ejbLoad() called. ejbStore() called. setEntityContext called ejbLoad() called. ejbStore() called. ejbLoad() called. ejbStore() called. setEntityContext called ejbLoad() called. ejbStore() called. ejbLoad() called. ejbStore() called. ejbLoad() called. ejbStore() called. ejbLoad() called. ejbStore() called. ejbLoad() called. ejbStore() called. ejbLoad() called. ejbStore() called. 11. 将客户端程序改写为JSP程序也可以运行。 改写后有如下目录结构: ------mytest.war ------mytest.jsp ------WEB-INF ------------classes ------------examples ------------------Product.class ------------------ProductBean.class ------------------ProductHome.class ------------------ProductPK.class 由于JSP要访问相关的文件,所以将所有类文件放入到CLASSES目录下供JSP语句: <%@page import="examples.*" %>访问。 同样的将此war文件拷贝到F:\jboss-3.0.7_jakarta-tomcat-4.1.24\server\default\deploy目录 用http://localhost:8080/mytest/mytest.jsp就可运行。注意这里的JSP页面不会有任何输出, 因为JSP页面和客户端运行的DOS窗口是不一样的。其输出全部在服务器端。不过偶在里面 加了一条输出语句,如果见着“祝贺您!运行成功!(哈哈,struggle所写)” 就证明运行成功! JBOSS3.2和JBOSS3.0都运行成功的源码.rar (21.12k) |
2.Re:(原创)在JBOSS3.0.7下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: joshwa Posted on: 2003-06-17 15:55 struggle很棒!!!!!!!!!! 写得很详细````呵呵 |
3.Re:(原创)在JBOSS3.0.7下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: moyu Posted on: 2003-06-17 16:02 楼上兄台是不是joshwa Lee 小妹佩服不已。struggle更是厉害,佩服佩服。 |
4.Re:(原创)在JBOSS3.0.7下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-06-17 16:31 TO:moyu 别佩服偶了,偶也是初学者。写出来只是为了让更多的初学者少走弯路。 同时也怕忘记,所以本人也把这作为笔记啦 |
5.Re:(原创)在JBOSS3.0.7下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: tomshang Posted on: 2003-06-27 15:25 呵呵,那cilent test怎么还是weblogic的写法啊 |
6.Re:(原创)在JBOSS3.0.7下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-06-27 18:10 TO:tomshang 请看清我关于这个client test文件的说明哦: 客户端程序(ProductClient.java): //这只是一个测试程序,不过这里要改写为SERVELT或者JSP文件 //所以源代码中用不上这个文件。这里只作为参考。 由于当时我只用SERVLET和JSP测试程序运行成功了。带MAIN的测 试程序后来才运行成功。等我有时间了,将其加进去。也只是两个 参数改一下的问题。 |
7.Re:(原创)在JBOSS3.0.7下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-04 11:23 现在楼顶附件中的源代码可以在JBOSS3.2和JBOSS3.0下正确的运行了! |
8.Re:(原创)在JBOSS3.0.7下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: why Posted on: 2003-07-04 11:31 struggle wrote: Would you please point out what changes you've made? You may also add to the title of this topic "3.2.x compatible" |
9.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-04 14:00 TO:why 如果我再写出类似的贴子(当然比这个贴的知识要深入一些),不知可否 多加点分呀,至少这样的一个贴得加个二分吧.不然没有动力写啊 |
10.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: bruce Posted on: 2003-07-05 21:11 强烈支持! struggle, 我上次的那个CMP存入数据库表的问题。用你的代码没有问题,用我的就不可见。我的Jbosscmp-jdbc.xml是Jbuilder自已生成的,这可能是唯一的差别了。 再次强烈支持Struggle加分。 |
11.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-05 21:26 TO:bruce 谢谢支持!不过您可能误会我的意思了,我是说再写出类似的知识相对深入 的贴子,希望版主给我一个贴多加点分因为我接下来要写的一个贴是四个 JSP调用两个实体BEAN,而且我自己做的工作也相当多,写起来要比前几个贴也 更费事!不知why总版主可否给点看法。 另:您说用JBUILDER生成的,后来我用JB7+JBOSS3.0.7也成功运行了这个例子, 没发现这种事情。倒是我用另一台机器的数据库时出现过您描述的情况,但用我 本机的数据库时就没这个问题,建议您还是检查一下您的数据库相关的东西吧。 |
12.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: why Posted on: 2003-07-05 21:29 struggle: If you love to get more credits, I don't have any problem to give -- 3 credits at most. Again... would you please point out the changes made to get your code running on JBoss 3.2.0 (perhaps you've already done so in the attached rar). |
13.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: bruce] | Copy to clipboard |
Posted by: Big Blue Posted on: 2003-07-05 22:29 Jbuilder生成的Jbosscmp-jdbc.xml没有<defaults></defaults>,自己加上就行了 |
14.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: bruce Posted on: 2003-07-06 09:37 的确如此,刚刚试完。谢谢Big Blue和struggle. 另外,也请大家在用Jbuilder8+Jboss3.2时一定要小心了。没有免费的午餐。为了这个问题,我已经苦了好几天了。想想有2,3年前用过Weblogic + EJB的CMP,现在试一试也这么费劲。 今后希望大家相互切磋, 共同进步。 谢了。 To Struggle: <<倒是我用另一台机器的数据库时出现过您描述的情况<< 请检查一下你的mysql那边的Datasource配置。这个要与你的Jbosscmp-jdbc.xml的相一致才行。 |
15.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-06 14:17 TO:why 我今天在贴子中已经用特殊颜色将JBOSS3.0.X和JBOSS3.2.X下运行此例要注意 的地方已经标注出来。 |
16.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-09 13:10 TO:bruce Jbuilder生成的Jbosscmp-jdbc.xml是有<defaults></defaults>这一项的。 步骤:(我用的JBuilder7) 在生成一个CMP后,右边的窗口位于“EJB Designer”标签下,点击下面的 "JBossCMP-JDBC"标签,在相应的空格中填上相应项即可,比如我的: datasource MySqlDS datasource-mapping mySQL create-table true remove-table false pk-constraint true preferred-relation-mapping foreign-key 这样在我的Jbosscmp-jdbc.xml文件中就会产生: <defaults> <datasource>java:/MySqlDS</datasource> <datasource-mapping>mySQL</datasource-mapping> <create-table>true</create-table> <remove-table>false</remove-table> <pk-constraint>true</pk-constraint> <preferred-relation-mapping>foreign-key</preferred-relation-mapping> </defaults> 注意以上步骤一定要在编译.java文件之前做,否则后来写就写不上了。 |
17.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: jbwang Posted on: 2003-07-09 13:23 这个要收藏一下, |
18.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-10 12:43 谢谢版主(不知是哪位版主给我加了这一分),看来我得赶快再写篇好点(我认为好)的文章了。 不然不好意思呵 |
19.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: samye Posted on: 2003-07-10 13:12 不错,谢谢分享 |
20.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: why Posted on: 2003-07-10 13:20 大侠喜欢得分嘛,小的便给分喽! 反正大侠多得几分也没有得到更多的权限的,又不费分文喔! 如果能达到鼓励的效果,小的何乐而不为呢? 呵呵呵…………从前不给分也是希望达到激励的效果啦! 努力努力努力努力努力…………… |
21.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: why] | Copy to clipboard |
Posted by: ringayumi Posted on: 2003-07-10 14:53 14:34:36,992 ERROR [STDERR] javax.naming.NameNotFoundException: RingRemote not bound hello everybody!! I have a question!~~when i deploy the JAR for Jboss 3.2.1~(Deploy it's ok!!) run the client ~~ Why happend preceding Exception~~~~ thanks client code: InitialContext ic = new InitialContext(); DemoHome home = (DemoHome)javax.rmi.PortableRemoteObject.narrow(ic.lookup("RingRemote"), DemoHome.class); Demo v = home.create(); file list: META-INF/ META-INF/MANIFEST.MF Ring/DAO.class Ring/Demo.class Ring/DemoDAO.class Ring/DemoHome.class Ring/VO.class Ring/META-INF/ejb-jar.xml Ring/META-INF/jboss.xml my ejb-jar.xml : <?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <session> <ejb-name>RingDemo</ejb-name> <home>Ring.DemoHome</home> <remote>Ring.Demo</remote> <ejb-class>Ring.DemoDAO</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar> my jboss.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd"> <jboss> <enterprise-beans> <session> <ejb-name>RingDemo</ejb-name> <jndi-name>RingRemote</jndi-name> </session> </enterprise-beans> </jboss> |
22.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-10 15:21 将 InitialContext ic = new InitialContext(); 改为Context ic = new InitialContext(); 试试 |
23.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: ringayumi Posted on: 2003-07-10 17:14 Still throw the javax.naming.NameNotFoundException: RingRemote not bound |
24.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: ringayumi Posted on: 2003-07-10 17:16 my ejb-jar.xml <== Is it ok? for jboss3.2.1 |
25.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-10 18:10 你取的文件名字真是怪异一个无状态会话BEAN应该很简单的。你从哪儿运行的例子, 看看书吧 |
26.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: ringayumi Posted on: 2003-07-10 19:29 Could you provide a example of Stateless Bean? Let me try that again!! Thanks~~ |
27.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-07-10 20:22 给你推荐一本书《精通EJB第二版》(中文版)电脑书店一般都有。上面就 有很多例子,包括无状态会话BEAN,状态会话BEAN,还有实体BEAN,消 息BEAN的例子。本书最后还有一个结合以上所有技术的一个完整例子。如果 能把这本书仔细看完,并照着例子运行,入门绝对没问题。不知你用什么 IDE,我手边只有一个用JB7+JBOSS3.0.7的无状态会话BEAN的例子。如果你 用JB+JBOSS的话,附件中的代码对你来说就很方便了。注意yang018是工程名 yang018.rar (16.64k) |
28.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: ringayumi Posted on: 2003-07-11 13:31 Hi , I was tried a simply Stateless bean! but still happend javax.naming.NameNotFoundException: DemoEJB not bound it's for Jboss3.2.1 what this problem? |
29.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: bruce Posted on: 2003-07-14 05:30 建议先把JBOSS搞定后,再来看Struggle的例子。 |
30.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: bruce Posted on: 2003-07-30 22:10 可能是由于JVM的原因。 |
31.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: nothing Posted on: 2003-07-31 05:54 《精通EJB第二版》(中文版)我都买了四个月了,还是没有专心看完,看来我要努力了...... |
32.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: merlin45 Posted on: 2003-08-05 22:05 新的 DRIVER 是com.mysql.jdbc.Driver mysql-connector-java-3.0.8-stable-bin.jar 当然旧的也支持。 例子写的很清楚,呵呵,从来没用过JBOSS,也很容易就跑通了。 顺便问一下,我单独起 all server的时候能跑通的,但我在ECLIPSE里用LOMBOZ的时候 ,数据源的服务起不来,不知道是什么问题。 lomboz的jboss server3.2。1 配置文件是照3。0的改的.运行其他的程序没问题,但只要需要数据源的就不行了。 是否和数据源的类型或 JVM有关呢? |
33.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: HenryYu Posted on: 2003-09-15 11:31 我最近在调试cmp的时候,建立了两个实体的关系,老是出现一下错误: org.jboss.deployment.DeploymentException: Role 'TRelationshipRole' on Entity Bean 'T' : CMP field for key not found: field name='txId' at org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCRelationshipRoleMetaData.loadKeyFields(JDBCRelationshipRoleMetaData.java:449) at org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCRelationshipRoleMetaData.init(JDBCRelationshipRoleMetaData.java:189) 为什么呀,我的jboss是3.22 能不能给我例子关于建立实体关系的谢谢。 |
34.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下的一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: nothing Posted on: 2003-10-19 02:35 呵呵,JSP中的System.out.println()写成out.println()就会有显示了吧? |
35.请struggle帮我看看,我没调通呢。 [Re: struggle] | Copy to clipboard |
Posted by: chfchf Posted on: 2003-10-30 14:58 我是个J2EE新手,下了你的“在JBOSS3_0_X和JBOSS3_2_X下的一个CMP实现的全过程”中的例子,copy mysql-service.xml到%jboss_home%\server\default\deploy目录下,copy mysql的jdbc驱动到%jboss_home%\server\default\lib目录下,部署cmpEJB.jar和test.war到%jboss_home%\server\default\deploy目录下也成功(服务端控制台上无错误输出,显示的是部署完成的信息),然后我用"http://localhost:8080/test/helloservlet"测试,总是报错: 1。网页上只有“Destroying products..”输出,看你的helloservlet.java是出异常后由finally中的 if (home != null) { out.println("Destroying products..<br>"); 输出的,我跟踪了一下,发现在helloservlet.java里的程序段中: try { /* * Get a reference to the Product Home Object - the * factory for Product EJB Objects */ InitialContext ctx = new InitialContext(); out.println("step1...<br>"); home = (ProductHome) javax.rmi.PortableRemoteObject.narrow(ctx.lookup("RemoteProductHome"), ProductHome.class); out.println("step2...<br>"); /* * Use the factory to create the Product EJB Object */ home.create("123-456-7890", "P5-350", "350 Mhz Pentium", 200); out.println("step3...<br>"); home.create("123-456-7891", "P5-400", "400 Mhz Pentium", 300); home.create("123-456-7892", "P5-450", "450 Mhz Pentium", 400); home.create("123-456-7893", "SD-64", "64 MB SDRAM", 50); home.create("123-456-7894", "SD-128", "128 MB SDRAM", 100); home.create("123-456-7895", "SD-256", "256 MB SDRAM", 200); 中输出“step2..."后就出错了,好象是home.create("","","",,)这里有问题。 2。服务控制台上的错误输出是: 2003-10-30 11:24:33,625 INFO [STDOUT] setEntityContext called 2003-10-30 11:24:33,766 ERROR [org.jboss.ejb.plugins.LogInterceptor] RuntimeException: java.lang.NullPointerException at org.jboss.ejb.EntityEnterpriseContext.getPersistenceContext(EntityEnterpriseContext.java:140) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPFieldBridge.initInstance(JDBCAbstractCMPFieldBridge.java:260) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.initInstance(JDBCEntityBridge.java:455) at org.jboss.ejb.plugins.cmp.jdbc.JDBCInitEntityCommand.execute(JDBCInitEntityCommand.java:40) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.initEntity(JDBCStoreManager.java:518) at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:215) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.createEntity(CachedConnectionInterceptor.java:270) at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:731) at java.lang.reflect.Method.invoke(Native Method) at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1119) at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:73) at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:207) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:215) at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:73) at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:91) at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:79) at org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(EntityCreationInterceptor.java:44) at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:111) at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:237) at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:68) at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:105) at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:133) at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:487) at org.jboss.ejb.Container.invoke(Container.java:756) at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:1058) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517) at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:99) at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:102) at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:77) at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:80) at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:198) at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76) at $Proxy43.create(Unknown Source) at helloservlet.service(helloservlet.java:31) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:360) at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:294) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:558) at org.mortbay.http.HttpContext.handle(HttpContext.java:1714) at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:505) at org.mortbay.http.HttpContext.handle(HttpContext.java:1664) at org.mortbay.http.HttpServer.service(HttpServer.java:879) at org.jboss.jetty.Jetty.service(Jetty.java:460) at org.mortbay.http.HttpConnection.service(HttpConnection.java:770) at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:932) at org.mortbay.http.HttpConnection.handle(HttpConnection.java:787) at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:201) at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289) at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:454) 2003-10-30 11:24:33,826 ERROR [STDERR] java.rmi.ServerException: RuntimeException; nested exception is: java.lang.NullPointerException 2003-10-30 11:24:33,826 ERROR [STDERR] java.lang.NullPointerException 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.ejb.EntityEnterpriseContext.getPersistenceContext(EntityEnterpriseContext.java:140) 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPFieldBridge.initInstance(JDBCAbstractCMPFieldBridge.java:260) 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.initInstance(JDBCEntityBridge.java:455) 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.ejb.plugins.cmp.jdbc.JDBCInitEntityCommand.execute(JDBCInitEntityCommand.java:40) 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.initEntity(JDBCStoreManager.java:518) 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:215) 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.createEntity(CachedConnectionInterceptor.java:270) 2003-10-30 11:24:33,826 ERROR [STDERR] at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:731) 2003-10-30 11:24:33,846 ERROR [STDERR] at java.lang.reflect.Method.invoke(Native Method) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1119) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:73) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:207) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:215) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:73) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:91) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:79) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(EntityCreationInterceptor.java:44) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:111) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:237) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:68) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:105) 2003-10-30 11:24:33,846 ERROR [STDERR] at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:133) 2003-10-30 11:24:33,856 ERROR [STDERR] at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:487) 2003-10-30 11:24:33,856 ERROR [STDERR] at org.jboss.ejb.Container.invoke(Container.java:756) 2003-10-30 11:24:33,856 ERROR [STDERR] at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:1058) 2003-10-30 11:24:33,896 ERROR [STDERR] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517) 2003-10-30 11:24:33,896 ERROR [STDERR] at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:99) 2003-10-30 11:24:33,896 ERROR [STDERR] at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:102) 2003-10-30 11:24:33,896 ERROR [STDERR] at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:77) 2003-10-30 11:24:33,896 ERROR [STDERR] at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:80) 2003-10-30 11:24:33,906 ERROR [STDERR] at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:198) 2003-10-30 11:24:33,906 ERROR [STDERR] at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76) 2003-10-30 11:24:33,906 ERROR [STDERR] at $Proxy43.create(Unknown Source) 2003-10-30 11:24:33,906 ERROR [STDERR] at helloservlet.service(helloservlet.java:31) 2003-10-30 11:24:33,906 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 2003-10-30 11:24:33,906 ERROR [STDERR] at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:360) 2003-10-30 11:24:33,906 ERROR [STDERR] at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:294) 2003-10-30 11:24:33,906 ERROR [STDERR] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:558) 2003-10-30 11:24:33,906 ERROR [STDERR] at org.mortbay.http.HttpContext.handle(HttpContext.java:1714) 2003-10-30 11:24:33,906 ERROR [STDERR] at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:505) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.http.HttpContext.handle(HttpContext.java:1664) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.http.HttpServer.service(HttpServer.java:879) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.jboss.jetty.Jetty.service(Jetty.java:460) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.http.HttpConnection.service(HttpConnection.java:770) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:932) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.http.HttpConnection.handle(HttpConnection.java:787) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:201) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289) 2003-10-30 11:24:33,916 ERROR [STDERR] at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:454) 2003-10-30 11:24:33,926 INFO [STDOUT] setEntityContext called 请帮我看看,是什么原因?或是什么地方配置不对吗?拜托了。。。。。 |
36.一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-11-03 09:19 我写的这几篇文章本想改为加密,但因为过了三十天,编辑不了了。希望任何人不要将我写的这几篇文章转载到其它任何地方。谢谢! |
37.一个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-11-03 09:19 我写的这几篇文章(共五篇,包括写的那篇报表文章)本想改为加密,但因为过了三十天,编辑不了了。希望任何人不要将我写的这几篇文章转载到其它任何地方。谢谢! 如有转载过的,请您尽快删除,谢谢! |
38.Re:(原创)在JBOSS3.0.X和JBOSS3.2.X下 [Re: struggle] | Copy to clipboard |
Posted by: bjwz Posted on: 2003-11-07 12:29 还好 |
39.个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: struggle Posted on: 2003-11-07 17:49 因为想发表在《程序员》上 |
40.Re:个CMP实现的全过程(源码中文注释) [Re: struggle] | Copy to clipboard |
Posted by: nothing Posted on: 2003-11-07 22:14 struggle wrote: 恭喜啊,哪天有准信了,定准哪期了,兄弟一定去买本RR. |
41.Re: [Re: struggle] | Copy to clipboard |
Posted by: hailwind Posted on: 2003-11-08 21:17 真是不错 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |