Andreas Schaefer writes:
> Hi Tom
>
> Could you please give me the part of the jboss.conf where the your MBean
> <MLET> tag
> is within.
<MLET CODE="org.jboss.jdbc.DataSourceImpl"
ARCHIVE="jboss.jar,jdbc2_0-stdext.jar,postgresql.jar"
CODEBASE="../lib/ext/">
<ARG TYPE="java.lang.String"
VALUE="jdbc:postgresql://192.168.83.54:5432/tcook">
<ARG TYPE="java.lang.String" VALUE="jdbc/WebFootDB">
<ARG TYPE="java.lang.String" VALUE="org.postgresql.Driver">
<ARG TYPE="java.lang.String" VALUE="tcook">
<ARG TYPE="java.lang.String" VALUE="tcook">
</MLET>
<MLET CODE="com.lisasoft.core.sql.keygen.PostgresKeyManagerImpl"
ARCHIVE="jboss.jar,lisacore.jar"
CODEBASE="../lib/ext/">
<ARG TYPE="java.lang.String" VALUE="keymanager">
<ARG TYPE="java.lang.String" VALUE="jdbc/WebFootDB">
</MLET>
Cheers
Tom
> Thanx Mad Andy
>
> ----- Original Message -----
> From: Tom Cook <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Wednesday, September 13, 2000 9:31 PM
> Subject: [jBoss-User] MBean client problems
>
>
> > Hi
> >
> > I'm using JBoss to deploy some beans we've previously had deployed on
> > WebLogic server. These beans access a service which generates primary
> > keys in a particular way. I'm trying to implement this 'key manager'
> > as an MBean to be loaded by jboss' JMX architecture. I've written the
> > service and it seems load into jboss fine, connect to the datasource
> > fine and I can admin it via that groovy thing on port 8082. I've
> > written a test client and that doesn't work so well. The KeyManager
> > interface and client look like this:
> >
> >
> > KeyManager.java (a generic interface for key managers):
> > ---
> > package com.lisasoft.core.sql.keygen;
> >
> > public interface KeyManager extends java.rmi.Remote
> > {
> > public String getOID() throws KeyManagerException,
> java.rmi.RemoteException;
> > }
> > ---
> >
> > KeyManagerTestClient.java (a client to test the key manager):
> > ---
> > import javax.naming.InitialContext;
> > import com.lisasoft.core.sql.keygen.KeyManager;
> > import com.lisasoft.core.sql.keygen.PostgresKeyManagerImpl;
> >
> > public class KeyManagerTestClient
> > {
> > public static void main( String args[] )
> > {
> > try
> > {
> > PostgresKeyManagerImpl pkmi = new PostgresKeyManagerImpl();
> > pkmi = null;
> > InitialContext ctx = new InitialContext();
> > Object objRef = ctx.lookup( args[0] );
> > PostgresKeyManagerImpl keys = (PostgresKeyManagerImpl)objRef;
> > System.out.println( keys.getOID() );
> > System.exit( 0 );
> > }
> > catch( Throwable t )
> > {
> > System.out.println( t.getClass().getName() );
> > System.out.println( t.getMessage() );
> > t.printStackTrace();
> > }
> > }
> > }
> > ---
> >
> > The rest of the code is attached below. When I try to run the test
> > client with this command line:
> >
> > java -Djava.naming.factory.initial=org.jnp.interfaces.NamingContext\
> > -Djava.naming.provider.url=192.168.83.54\
> > -Djava.naming.factory.url.pkgs=org.jboss.naming\
> > KeyManagerTestClient keymanager
> >
> > ('keymanager' being the JNDI name I've given it) I get this stack
> > trace:
> >
> > javax.naming.NamingException: Could not dereference object. Root
> exception is java.lang.ClassCastException:
> com.lisasoft.core.sql.keygen.PostgresKeyManagerImpl
> > at
> javax.naming.spi.NamingManager.getObjectFactoryFromReference(NamingManager.j
> ava:152)
> > at
> javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:305)
> > at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:368)
> > at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:265)
> > at javax.naming.InitialContext.lookup(InitialContext.java:350)
> > at KeyManagerTestClient.main(KeyManagerTestClient.java:14)
> >
> > And if I don't have those first two lines in the test client (which
> > just instantiate an object then make it ready for garbage collection)
> > I get almost identical errors but this time a
> > java.lang.InstantiationException.
> >
> > Any ideas?
> >
> > Tom
> >
> > Other code:
> >
> > PostgresKeyManagerImplMBean.java:
> > ---
> > package com.lisasoft.core.sql.keygen;
> >
> > public interface PostgresKeyManagerImplMBean
> > extends org.jboss.util.ServiceMBean
> > {
> > public static final String OBJECT_NAME = ":service=KeyManager";
> > }
> > ---
> >
> > PostgresKeyManagerImpl.java (an implementation which talks to
> > PostgreSQL and operates as an MBean):
> > ---
> > package com.lisasoft.core.sql.keygen;
> >
> > import javax.management.*;
> >
> > import javax.naming.Reference;
> > import javax.naming.Referenceable;
> > import javax.naming.InitialContext;
> > import javax.naming.Context;
> > import javax.naming.NamingException;
> > import javax.naming.NameNotFoundException;
> > import javax.naming.Name;
> >
> > import java.sql.Connection;
> > import java.sql.Statement;
> > import java.sql.ResultSet;
> >
> > import javax.sql.DataSource;
> >
> > import org.jboss.util.ServiceMBeanSupport;
> >
> > public class PostgresKeyManagerImpl
> > extends ServiceMBeanSupport
> > implements MBeanRegistration, PostgresKeyManagerImplMBean, Referenceable,
> KeyManager
> > {
> > private String jndiName = null;
> > private String datasource = null;
> >
> > private byte low_num = 0;
> >
> > private byte high_num;
> >
> > public PostgresKeyManagerImpl()
> > {
> > }
> >
> > /* Implementation */
> > public PostgresKeyManagerImpl( String jndiName, String datasource )
> > {
> > this.jndiName = jndiName;
> > this.datasource = datasource;
> > }
> >
> > private void refreshHighNum()
> > {
> > log.log( "High byte of keys being generated from database." );
> > try
> > {
> > Connection conn = getConnection();
> > Statement stmt = conn.createStatement();
> > ResultSet rs = stmt.executeQuery
> > ( "SELECT NEXTVAL( 'KEYMANAGER_SEQUENCE' ) AS HIGH_BYTE" );
> > rs.next();
> > log.log( "Old high byte: " + high_num );
> > high_num = (byte)rs.getByte( 1 );
> > log.log( "New high byte: " + high_num );
> > }
> > catch( Throwable e )
> > {
> > stopService();
> > log.log( e.getMessage() );
> > log.log( e.toString() );
> > }
> > }
> >
> > private Connection getConnection()
> > throws java.sql.SQLException
> > {
> > try
> > {
> > InitialContext context = new InitialContext();
> > Object objRef = context.lookup( datasource );
> > DataSource ds = (DataSource)objRef;
> >
> > return (java.sql.Connection)ds.getConnection();
> > }
> > catch( java.sql.SQLException sqle )
> > {
> > stopService();
> > log.log( sqle.getMessage() );
> > log.log( sqle.toString() );
> > throw sqle;
> > }
> > catch( Throwable e )
> > {
> > stopService();
> > log.log( e.getMessage() );
> > log.log( e.toString() );
> > }
> > return null;
> > }
> >
> > public String getOID()
> > throws KeyManagerException, java.rmi.RemoteException
> > {
> > if( low_num > 127 )
> > {
> > refreshHighNum();
> > low_num = 0;
> > }
> >
> > Integer ioid = new Integer( (int)(low_num & (high_num << 4)) );
> > return ioid.toString();
> > }
> >
> > /* MBean junk */
> >
> > public ObjectName getObjectName( MBeanServer server, ObjectName name )
> > {
> > try
> > {
> > return new ObjectName(OBJECT_NAME+",name="+jndiName);
> > }
> > catch( javax.management.MalformedObjectNameException mone )
> > {
> > log.log( mone.getMessage() );
> > log.log( mone.toString() );
> > }
> > return null;
> > }
> >
> > public String getName()
> > {
> > return "KeyManager";
> > }
> >
> > public void initService()
> > throws Exception
> > {
> > try
> > {
> > // Bind in JNDI
> > bind((Context)(new InitialContext()), jndiName, this);
> > }
> > catch( NamingException ne )
> > {
> > log.log( ne.getMessage() );
> > log.log( ne.toString() );
> > return;
> > }
> >
> > log.log( "KeyManager " + jndiName + " started and bound." );
> >
> > refreshHighNum();
> > }
> >
> > private void bind(Context ctx, String name, Object val)
> > throws NamingException
> > {
> > // Bind val to name in ctx, and make sure that all intermediate contexts
> exist
> >
> > Name n = ctx.getNameParser("").parse(name);
> > while (n.size() > 1)
> > {
> > String ctxName = n.get(0);
> > try
> > {
> > ctx = (Context)ctx.lookup(ctxName);
> > } catch (NameNotFoundException e)
> > {
> > ctx = ctx.createSubcontext(ctxName);
> > }
> > n = n.getSuffix(1);
> > }
> >
> > ctx.bind(n.get(0), val);
> > }
> >
> > public void stopService()
> > {
> > // Unbind from JNDI
> > try
> > {
> > new InitialContext().unbind(jndiName);
> > }
> > catch (NamingException e)
> > {
> > ;
> > }
> > }
> >
> > /* eferenceable implementation */
> > public Reference getReference()
> > {
> > return new Reference(getClass().getName(), getClass().getName(), null);
> > }
> > }
> > ---
> >
> >
> > --
> > --------------------------------------------------------------
> > To subscribe: [EMAIL PROTECTED]
> > To unsubscribe: [EMAIL PROTECTED]
> > Problems?: [EMAIL PROTECTED]
> >
>
>
>
> --
> --------------------------------------------------------------
> To subscribe: [EMAIL PROTECTED]
> To unsubscribe: [EMAIL PROTECTED]
> Problems?: [EMAIL PROTECTED]
>
--
--------------------------------------------------------------
To subscribe: [EMAIL PROTECTED]
To unsubscribe: [EMAIL PROTECTED]
Problems?: [EMAIL PROTECTED]